From be0e84c23ca63254332d0bd07f33bdda759ff136 Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Sun, 13 Jul 2025 11:19:53 +0200 Subject: [PATCH] update --- .vscode/ftp-kr.sync.cache.json | 4100 +++- .../creativeelements/classes/CEContent.php | 176 + .../creativeelements/classes/CEDatabase.php | 319 + modules/creativeelements/classes/CEFont.php | 133 + .../creativeelements/classes/CEMigrate.php | 311 + .../creativeelements/classes/CERevision.php | 34 + modules/creativeelements/classes/CESmarty.php | 173 + .../creativeelements/classes/CETemplate.php | 53 + modules/creativeelements/classes/CETheme.php | 97 + .../classes/assets/CEAssetManager.php | 195 + .../classes/assets/CECccReducer.php | 28 + .../classes/assets/CEJavascriptManager.php | 43 + .../classes/assets/CEJavascriptManager5.php | 43 + .../classes/assets/CEStylesheetManager.php | 43 + .../classes/assets/CEStylesheetManager5.php | 43 + .../creativeelements/classes/assets/index.php | 8 + modules/creativeelements/classes/index.php | 16 + .../classes/wrappers/Error.php | 52 + .../classes/wrappers/Helper.php | 1117 + .../classes/wrappers/Post.php | 625 + .../creativeelements/classes/wrappers/UId.php | 574 + .../classes/wrappers/index.php | 8 + modules/creativeelements/config.xml | 12 + modules/creativeelements/config_pl.xml | 12 + .../admin/AdminCEContentController.php | 309 + .../admin/AdminCEEditorController.php | 378 + .../admin/AdminCEFontsController.php | 234 + .../admin/AdminCESettingsController.php | 510 + .../admin/AdminCETemplatesController.php | 415 + .../admin/AdminCEThemesController.php | 462 + .../controllers/admin/index.php | 8 + .../controllers/front/ajax.php | 112 + .../controllers/front/index.php | 8 + .../controllers/front/preview.php | 96 + .../creativeelements/controllers/index.php | 16 + modules/creativeelements/core/base/app.php | 60 + .../core/base/base-object.php | 146 + .../creativeelements/core/base/document.php | 1103 + .../core/base/header-footer-base.php | 55 + modules/creativeelements/core/base/index.php | 8 + modules/creativeelements/core/base/module.php | 282 + .../core/base/theme-document.php | 51 + .../core/base/theme-page-document.php | 35 + modules/creativeelements/core/common/app.php | 269 + .../creativeelements/core/common/index.php | 8 + .../core/common/modules/ajax/index.php | 8 + .../core/common/modules/ajax/module.php | 320 + .../core/common/modules/index.php | 8 + .../core/document-types/content.php | 132 + .../core/document-types/footer.php | 36 + .../core/document-types/header.php | 36 + .../core/document-types/index.php | 8 + .../core/document-types/page-contact.php | 36 + .../core/document-types/page-index.php | 36 + .../core/document-types/page-not-found.php | 36 + .../core/document-types/post.php | 264 + .../core/document-types/product-miniature.php | 378 + .../document-types/product-quick-view.php | 597 + .../core/document-types/product.php | 91 + .../core/documents-manager.php | 627 + .../core/dynamic-tags/base-tag.php | 200 + .../core/dynamic-tags/data-tag.php | 69 + .../core/dynamic-tags/dynamic-css.php | 126 + .../core/dynamic-tags/index.php | 8 + .../core/dynamic-tags/manager.php | 464 + .../core/dynamic-tags/tag.php | 149 + modules/creativeelements/core/files/base.php | 314 + .../creativeelements/core/files/css/base.php | 718 + .../core/files/css/global-css.php | 165 + .../creativeelements/core/files/css/index.php | 8 + .../core/files/css/post-preview.php | 124 + .../creativeelements/core/files/css/post.php | 347 + modules/creativeelements/core/files/index.php | 8 + .../creativeelements/core/files/manager.php | 129 + modules/creativeelements/core/index.php | 16 + .../creativeelements/core/modules-manager.php | 129 + .../core/responsive/files/frontend.php | 157 + .../core/responsive/files/index.php | 8 + .../core/responsive/index.php | 8 + .../core/responsive/responsive.php | 192 + .../core/settings/base/index.php | 8 + .../core/settings/base/manager.php | 417 + .../core/settings/base/model.php | 46 + .../core/settings/general/index.php | 8 + .../core/settings/general/manager.php | 223 + .../core/settings/general/model.php | 337 + .../creativeelements/core/settings/index.php | 8 + .../core/settings/manager.php | 196 + .../core/settings/page/index.php | 8 + .../core/settings/page/manager.php | 310 + .../core/settings/page/model.php | 193 + .../core/utils/exceptions.php | 47 + modules/creativeelements/core/utils/index.php | 8 + modules/creativeelements/creativeelements.php | 855 + modules/creativeelements/includes/api.php | 302 + .../creativeelements/includes/autoloader.php | 279 + .../includes/base/controls-stack.php | 2015 ++ .../includes/base/element-base.php | 1044 + .../creativeelements/includes/base/index.php | 8 + .../includes/base/skin-base.php | 370 + .../includes/base/widget-base.php | 870 + .../includes/base/widget-category-base.php | 191 + .../includes/base/widget-premium-base.php | 68 + .../includes/base/widget-product-base.php | 2582 +++ .../creativeelements/includes/conditions.php | 121 + .../includes/controls/animation.php | 195 + .../includes/controls/base-data.php | 155 + .../includes/controls/base-multiple.php | 98 + .../includes/controls/base-ui.php | 38 + .../includes/controls/base-units.php | 121 + .../includes/controls/base.php | 149 + .../includes/controls/box-shadow.php | 136 + .../includes/controls/button.php | 85 + .../includes/controls/choose.php | 95 + .../includes/controls/code.php | 85 + .../includes/controls/color.php | 120 + .../includes/controls/date-time.php | 89 + .../includes/controls/dimensions.php | 142 + .../includes/controls/divider.php | 71 + .../includes/controls/font.php | 95 + .../includes/controls/groups/background.php | 702 + .../includes/controls/groups/base.php | 587 + .../includes/controls/groups/border.php | 127 + .../includes/controls/groups/box-shadow.php | 114 + .../includes/controls/groups/css-filter.php | 182 + .../includes/controls/groups/image-size.php | 318 + .../includes/controls/groups/index.php | 8 + .../includes/controls/groups/text-shadow.php | 103 + .../includes/controls/groups/text-stroke.php | 130 + .../includes/controls/groups/typography.php | 309 + .../includes/controls/heading.php | 75 + .../includes/controls/hidden.php | 55 + .../includes/controls/hover-animation.php | 158 + .../includes/controls/icon.php | 896 + .../includes/controls/index.php | 8 + .../includes/controls/media.php | 206 + .../includes/controls/number.php | 87 + .../includes/controls/popover-toggle.php | 92 + .../includes/controls/raw-html.php | 77 + .../includes/controls/repeater.php | 199 + .../includes/controls/section.php | 81 + .../includes/controls/select.php | 108 + .../includes/controls/select2.php | 107 + .../includes/controls/slider.php | 130 + .../includes/controls/structure.php | 107 + .../includes/controls/switcher.php | 90 + .../includes/controls/tab.php | 78 + .../includes/controls/tabs.php | 73 + .../includes/controls/text-shadow.php | 129 + .../includes/controls/text.php | 101 + .../includes/controls/textarea.php | 89 + .../includes/controls/url.php | 131 + .../includes/controls/wysiwyg.php | 84 + modules/creativeelements/includes/db.php | 539 + .../editor-templates/editor-wrapper.php | 82 + .../includes/editor-templates/global.php | 62 + .../includes/editor-templates/hotkeys.php | 166 + .../includes/editor-templates/index.php | 8 + .../editor-templates/library-layout.php | 35 + .../includes/editor-templates/navigator.php | 67 + .../editor-templates/panel-elements.php | 54 + .../includes/editor-templates/panel.php | 340 + .../includes/editor-templates/repeater.php | 37 + .../includes/editor-templates/templates.php | 266 + modules/creativeelements/includes/editor.php | 937 + .../includes/elements/column.php | 1179 + .../includes/elements/index.php | 8 + .../includes/elements/repeater.php | 132 + .../includes/elements/section.php | 2364 ++ modules/creativeelements/includes/embed.php | 194 + modules/creativeelements/includes/fonts.php | 1562 ++ .../creativeelements/includes/frontend.php | 998 + .../creativeelements/includes/heartbeat.php | 106 + modules/creativeelements/includes/index.php | 16 + .../includes/interfaces/group-control.php | 33 + .../includes/interfaces/index.php | 8 + .../includes/interfaces/scheme.php | 84 + .../includes/managers/controls.php | 919 + .../includes/managers/elements.php | 340 + .../includes/managers/index.php | 8 + .../includes/managers/schemes.php | 368 + .../includes/managers/skins.php | 123 + .../includes/managers/widgets.php | 459 + modules/creativeelements/includes/plugin.php | 482 + modules/creativeelements/includes/preview.php | 267 + .../includes/schemes/base.php | 191 + .../includes/schemes/color-picker.php | 241 + .../includes/schemes/color.php | 301 + .../includes/schemes/index.php | 8 + .../includes/schemes/typography.php | 79 + modules/creativeelements/includes/shapes.php | 287 + .../creativeelements/includes/stylesheet.php | 457 + .../classes/class-import-images.php | 97 + .../template-library/classes/index.php | 8 + .../includes/template-library/index.php | 8 + .../includes/template-library/manager.php | 686 + .../template-library/sources/base.php | 380 + .../template-library/sources/index.php | 8 + .../template-library/sources/local.php | 884 + .../template-library/sources/remote.php | 233 + .../includes/traits/carousel.php | 399 + .../includes/traits/index.php | 8 + .../creativeelements/includes/traits/nav.php | 852 + modules/creativeelements/includes/user.php | 244 + modules/creativeelements/includes/utils.php | 304 + .../includes/widgets/accordion.php | 594 + .../includes/widgets/ajax-search.php | 1492 ++ .../includes/widgets/alert.php | 371 + .../includes/widgets/animated-headline.php | 475 + .../includes/widgets/button.php | 551 + .../includes/widgets/call-to-action.php | 1787 ++ .../includes/widgets/category-tree.php | 57 + .../includes/widgets/common.php | 1435 ++ .../includes/widgets/contact-form.php | 1319 ++ .../includes/widgets/countdown.php | 666 + .../includes/widgets/counter.php | 362 + .../includes/widgets/currency-selector.php | 292 + .../includes/widgets/divider.php | 290 + .../includes/widgets/email-subscription.php | 1032 + .../includes/widgets/facebook-button.php | 181 + .../includes/widgets/facebook-page.php | 211 + .../includes/widgets/flip-box.php | 1840 ++ .../includes/widgets/google-maps.php | 302 + .../includes/widgets/heading.php | 376 + .../includes/widgets/html.php | 141 + .../includes/widgets/icon-box.php | 714 + .../includes/widgets/icon-list.php | 663 + .../includes/widgets/icon.php | 462 + .../includes/widgets/image-box.php | 686 + .../includes/widgets/image-carousel.php | 525 + .../includes/widgets/image-gallery.php | 587 + .../includes/widgets/image-hotspot.php | 794 + .../includes/widgets/image-slider.php | 223 + .../includes/widgets/image.php | 778 + .../includes/widgets/index.php | 8 + .../includes/widgets/language-selector.php | 287 + .../includes/widgets/layer-slider.php | 309 + .../includes/widgets/menu-anchor.php | 160 + .../includes/widgets/module.php | 225 + .../includes/widgets/nav-menu.php | 657 + .../includes/widgets/product-box.php | 293 + .../includes/widgets/product-carousel.php | 331 + .../includes/widgets/product-grid.php | 332 + .../includes/widgets/progress.php | 359 + .../includes/widgets/shopping-cart.php | 1502 ++ .../includes/widgets/shortcode.php | 149 + .../includes/widgets/sign-in.php | 457 + .../includes/widgets/site-logo.php | 137 + .../includes/widgets/site-title.php | 64 + .../includes/widgets/social-icons.php | 527 + .../includes/widgets/spacer.php | 187 + .../includes/widgets/star-rating.php | 484 + .../includes/widgets/tabs.php | 473 + .../includes/widgets/testimonial-carousel.php | 591 + .../includes/widgets/testimonial.php | 610 + .../includes/widgets/text-editor.php | 480 + .../includes/widgets/text-path.php | 725 + .../includes/widgets/toggle.php | 623 + .../includes/widgets/trustedshops-reviews.php | 539 + .../includes/widgets/video.php | 1103 + modules/creativeelements/index.php | 16 + modules/creativeelements/logo.png | Bin 0 -> 4633 bytes modules/creativeelements/logo.webp | Bin 0 -> 846 bytes modules/creativeelements/modifications.txt | 15 + .../modules/catalog/controls/index.php | 8 + .../catalog/controls/select-category.php | 53 + .../catalog/controls/select-manufacturer.php | 54 + .../catalog/controls/select-supplier.php | 54 + .../modules/catalog/files/css/index.php | 8 + .../catalog/files/css/product-miniature.php | 69 + .../modules/catalog/files/index.php | 8 + .../modules/catalog/index.php | 8 + .../modules/catalog/module.php | 522 + .../catalog/tags/cart-rule-date-time.php | 106 + .../modules/catalog/tags/category-name.php | 50 + .../modules/catalog/tags/category-url.php | 53 + .../modules/catalog/tags/index.php | 8 + .../catalog/tags/manufacturer-image.php | 86 + .../catalog/tags/manufacturer-name.php | 58 + .../modules/catalog/tags/manufacturer-url.php | 57 + .../catalog/tags/product-add-to-cart.php | 69 + .../tags/product-availability-date-time.php | 52 + .../modules/catalog/tags/product-buy-now.php | 29 + .../tags/product-description-short.php | 50 + .../modules/catalog/tags/product-image.php | 107 + .../modules/catalog/tags/product-meta.php | 162 + .../modules/catalog/tags/product-name.php | 50 + .../modules/catalog/tags/product-price.php | 144 + .../catalog/tags/product-quick-view.php | 62 + .../modules/catalog/tags/product-rating.php | 95 + .../modules/catalog/tags/product-url.php | 50 + .../tags/specific-price-rule-date-time.php | 104 + .../modules/catalog/widgets/index.php | 8 + .../catalog/widgets/manufacturer-image.php | 151 + .../catalog/widgets/product-add-to-cart.php | 255 + .../widgets/product-add-to-wishlist.php | 159 + .../catalog/widgets/product-attachments.php | 267 + .../catalog/widgets/product-badges.php | 550 + .../modules/catalog/widgets/product-block.php | 112 + .../catalog/widgets/product-brand-image.php | 26 + .../widgets/product-description-short.php | 161 + .../catalog/widgets/product-description.php | 128 + .../catalog/widgets/product-features.php | 435 + .../modules/catalog/widgets/product-image.php | 243 + .../catalog/widgets/product-images.php | 1116 + .../modules/catalog/widgets/product-meta.php | 652 + .../widgets/product-miniature-add-to-cart.php | 268 + .../catalog/widgets/product-miniature-box.php | 235 + .../widgets/product-miniature-image.php | 83 + .../widgets/product-miniature-name.php | 51 + .../widgets/product-miniature-price.php | 120 + .../widgets/product-miniature-rating.php | 105 + .../widgets/product-miniature-variants.php | 337 + .../modules/catalog/widgets/product-name.php | 153 + .../modules/catalog/widgets/product-price.php | 667 + .../catalog/widgets/product-quantity.php | 744 + .../catalog/widgets/product-rating.php | 638 + .../widgets/product-sale-countdown.php | 88 + .../modules/catalog/widgets/product-share.php | 132 + .../modules/catalog/widgets/product-stock.php | 413 + .../catalog/widgets/product-variants.php | 1063 + .../modules/creative/index.php | 8 + .../modules/creative/module.php | 158 + .../modules/custom-css/index.php | 8 + .../modules/custom-css/module.php | 79 + .../modules/dynamic-tags/index.php | 8 + .../modules/dynamic-tags/module.php | 225 + .../modules/dynamic-tags/tags/carousel.php | 106 + .../modules/dynamic-tags/tags/contact-url.php | 471 + .../dynamic-tags/tags/current-date-time.php | 129 + .../modules/dynamic-tags/tags/index.php | 8 + .../dynamic-tags/tags/internal-url.php | 184 + .../modules/dynamic-tags/tags/lightbox.php | 134 + .../modules/dynamic-tags/tags/page-title.php | 52 + .../dynamic-tags/tags/request-parameter.php | 91 + .../modules/dynamic-tags/tags/shortcode.php | 66 + .../dynamic-tags/tags/site-contact.php | 85 + .../modules/dynamic-tags/tags/site-logo.php | 54 + .../modules/dynamic-tags/tags/site-title.php | 43 + .../modules/dynamic-tags/tags/site-url.php | 43 + .../modules/dynamic-tags/tags/user-info.php | 96 + .../modules/fonts-manager/index.php | 8 + .../modules/fonts-manager/module.php | 125 + .../modules/history/index.php | 8 + .../modules/history/module.php | 99 + .../modules/history/revisions-manager.php | 409 + .../history/views/history-panel-template.php | 46 + .../modules/history/views/index.php | 8 + .../views/revisions-panel-template.php | 73 + modules/creativeelements/modules/index.php | 16 + .../modules/library/documents/index.php | 8 + .../library/documents/library-document.php | 78 + .../library/documents/not-supported.php | 89 + .../modules/library/documents/page.php | 108 + .../modules/library/documents/section.php | 56 + .../modules/library/index.php | 8 + .../modules/library/module.php | 59 + .../modules/motion-effects/controls-group.php | 544 + .../modules/motion-effects/index.php | 8 + .../modules/motion-effects/module.php | 495 + .../modules/page-templates/index.php | 8 + .../modules/page-templates/module.php | 316 + .../modules/visibility/index.php | 8 + .../modules/visibility/module.php | 206 + .../override/classes/CMSCategory.php | 28 + .../override/classes/Category.php | 28 + .../override/classes/Manufacturer.php | 28 + .../override/classes/Supplier.php | 28 + .../override/classes/index.php | 8 + modules/creativeelements/override/index.php | 16 + modules/creativeelements/translations/de.php | 1276 ++ modules/creativeelements/translations/es.php | 1275 ++ modules/creativeelements/translations/fr.php | 1269 ++ .../creativeelements/translations/index.php | 16 + modules/creativeelements/translations/it.php | 1276 ++ modules/creativeelements/translations/pl.php | 1214 ++ modules/creativeelements/upgrade/index.php | 16 + .../upgrade/upgrade-1.0.0.php | 51 + .../upgrade/upgrade-1.4.10.php | 45 + .../upgrade/upgrade-2.5.0.php | 45 + .../upgrade/upgrade-2.5.10.php | 27 + .../upgrade/upgrade-2.5.11.php | 21 + .../upgrade/upgrade-2.5.2.php | 84 + .../upgrade/upgrade-2.5.5.php | 73 + .../upgrade/upgrade-2.5.7.php | 40 + .../upgrade/upgrade-2.5.8.php | 20 + .../upgrade/upgrade-2.5.9.php | 28 + modules/creativeelements/views/css/admin.css | 146 + .../creativeelements/views/css/backoffice.css | 97 + .../views/css/ce/1-global.css | 407 + .../creativeelements/views/css/ce/index.php | 8 + .../creativeelements/views/css/common-rtl.css | 447 + .../views/css/common-rtl.min.css | 1 + modules/creativeelements/views/css/common.css | 447 + .../creativeelements/views/css/common.min.css | 1 + .../views/css/custom-fonts.css | 245 + .../creativeelements/views/css/editor-ce.css | 273 + .../views/css/editor-preview-rtl.css | 2547 +++ .../views/css/editor-preview-rtl.min.css | 1 + .../views/css/editor-preview.css | 2526 +++ .../views/css/editor-preview.min.css | 1 + .../creativeelements/views/css/editor-rtl.css | 4145 ++++ .../views/css/editor-rtl.min.css | 1 + modules/creativeelements/views/css/editor.css | 4136 ++++ .../creativeelements/views/css/editor.min.css | 1 + .../views/css/frontend-edit.css | 65 + .../views/css/frontend-msie.css | 95 + .../views/css/frontend-msie.min.css | 1 + .../views/css/frontend-rtl.css | 5524 +++++ .../views/css/frontend-rtl.min.css | 1 + .../creativeelements/views/css/frontend.css | 5512 +++++ .../views/css/frontend.min.css | 1 + modules/creativeelements/views/css/index.php | 8 + modules/creativeelements/views/css/media.css | 25 + .../creativeelements/views/css/migrate.css | 60 + .../creativeelements/views/css/settings.css | 6 + .../creativeelements/views/fonts/index.php | 8 + .../views/img/ajax-loader.gif | Bin 0 -> 4178 bytes modules/creativeelements/views/img/blur.png | Bin 0 -> 11597 bytes modules/creativeelements/views/img/blur.webp | Bin 0 -> 9040 bytes .../creativeelements/views/img/contrast.png | Bin 0 -> 1218 bytes .../creativeelements/views/img/contrast.webp | Bin 0 -> 186 bytes modules/creativeelements/views/img/index.php | 8 + .../views/img/placeholder.png | Bin 0 -> 11735 bytes .../views/img/placeholder.webp | Bin 0 -> 4804 bytes .../views/img/shapes/arrow-negative.svg | 3 + .../views/img/shapes/arrow.svg | 3 + .../views/img/shapes/book-negative.svg | 3 + .../views/img/shapes/book.svg | 3 + .../views/img/shapes/clouds-negative.svg | 3 + .../views/img/shapes/clouds.svg | 3 + .../shapes/curve-asymmetrical-negative.svg | 3 + .../views/img/shapes/curve-asymmetrical.svg | 3 + .../views/img/shapes/curve-negative.svg | 3 + .../views/img/shapes/curve.svg | 3 + .../views/img/shapes/drops-negative.svg | 3 + .../views/img/shapes/drops.svg | 3 + .../views/img/shapes/index.php | 8 + .../views/img/shapes/mountains.svg | 5 + .../views/img/shapes/opacity-fan.svg | 6 + .../views/img/shapes/opacity-tilt.svg | 5 + .../views/img/shapes/pyramids-negative.svg | 3 + .../views/img/shapes/pyramids.svg | 3 + .../views/img/shapes/split-negative.svg | 3 + .../views/img/shapes/split.svg | 3 + .../views/img/shapes/tilt.svg | 3 + .../shapes/triangle-asymmetrical-negative.svg | 3 + .../img/shapes/triangle-asymmetrical.svg | 3 + .../views/img/shapes/triangle-negative.svg | 3 + .../views/img/shapes/triangle.svg | 3 + .../views/img/shapes/wave-brush.svg | 11 + .../views/img/shapes/waves-negative.svg | 5 + .../views/img/shapes/waves-pattern.svg | 3 + .../views/img/shapes/waves.svg | 5 + .../views/img/shapes/zigzag.svg | 3 + modules/creativeelements/views/index.php | 16 + modules/creativeelements/views/js/admin.js | 242 + .../creativeelements/views/js/backoffice.js | 12 + .../views/js/common-modules.js | 831 + .../views/js/common-modules.min.js | 5 + modules/creativeelements/views/js/common.js | 821 + .../creativeelements/views/js/common.min.js | 5 + .../creativeelements/views/js/custom-fonts.js | 578 + .../creativeelements/views/js/editor-ce.js | 661 + .../views/js/editor-modules.js | 949 + .../views/js/editor-modules.min.js | 5 + .../views/js/editor-preview.js | 8 + modules/creativeelements/views/js/editor.js | 18055 ++++++++++++++++ .../creativeelements/views/js/editor.min.js | 5 + .../views/js/frontend-edit.js | 20 + .../views/js/frontend-modules.js | 900 + .../views/js/frontend-modules.min.js | 5 + modules/creativeelements/views/js/frontend.js | 6924 ++++++ .../creativeelements/views/js/frontend.min.js | 3950 ++++ modules/creativeelements/views/js/index.php | 8 + modules/creativeelements/views/js/migrate.js | 105 + modules/creativeelements/views/js/settings.js | 90 + .../views/lib/animations/animate.css | 797 + .../views/lib/animations/animations.css | 1143 + .../views/lib/animations/animations.min.css | 13 + .../views/lib/animations/hover.css | 502 + .../views/lib/animations/index.php | 8 + .../views/lib/backbone/backbone.marionette.js | 3963 ++++ .../lib/backbone/backbone.marionette.min.js | 20 + .../views/lib/backbone/backbone.min.js | 1 + .../views/lib/backbone/backbone.radio.js | 350 + .../views/lib/backbone/backbone.radio.min.js | 3 + .../views/lib/backbone/index.php | 8 + .../views/lib/ceicons/ceicons.css | 167 + .../views/lib/ceicons/ceicons.min.css | 1 + .../views/lib/ceicons/fonts/ceicons.svg | 55 + .../views/lib/ceicons/fonts/ceicons.woff | Bin 0 -> 5796 bytes .../views/lib/ceicons/fonts/ceicons.woff2 | Bin 0 -> 4740 bytes .../views/lib/ceicons/fonts/index.php | 8 + .../views/lib/ceicons/index.php | 8 + .../views/lib/dialog/dialog.js | 975 + .../views/lib/dialog/dialog.min.js | 3 + .../views/lib/dialog/index.php | 8 + .../views/lib/e-select2/css/e-select2.css | 482 + .../views/lib/e-select2/css/e-select2.min.css | 1 + .../views/lib/e-select2/css/index.php | 8 + .../views/lib/e-select2/index.php | 8 + .../views/lib/e-select2/js/e-select2.full.js | 6575 ++++++ .../lib/e-select2/js/e-select2.full.min.js | 174 + .../views/lib/e-select2/js/index.php | 8 + .../views/lib/eicons/css/elementor-icons.css | 836 + .../lib/eicons/css/elementor-icons.min.css | 1 + .../views/lib/eicons/css/index.php | 8 + .../views/lib/eicons/fonts/eicons.svg | 530 + .../views/lib/eicons/fonts/eicons.woff | Bin 0 -> 47748 bytes .../views/lib/eicons/fonts/eicons.woff2 | Bin 0 -> 39472 bytes .../views/lib/eicons/fonts/index.php | 8 + .../views/lib/eicons/index.php | 8 + .../views/lib/filemanager/.htaccess | 13 + .../views/lib/filemanager/config.php | 46 + .../views/lib/filemanager/index.php | 8 + .../views/lib/flatpickr/flatpickr.css | 848 + .../views/lib/flatpickr/flatpickr.js | 2143 ++ .../views/lib/flatpickr/flatpickr.min.css | 13 + .../views/lib/flatpickr/flatpickr.min.js | 2 + .../views/lib/flatpickr/index.php | 8 + .../lib/font-awesome/css/font-awesome.css | 2298 ++ .../lib/font-awesome/css/font-awesome.min.css | 6 + .../views/lib/font-awesome/css/index.php | 8 + .../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../views/lib/font-awesome/fonts/index.php | 8 + .../views/lib/font-awesome/index.php | 8 + .../views/lib/heartbeat/heartbeat.js | 851 + .../views/lib/heartbeat/heartbeat.min.js | 12 + .../views/lib/heartbeat/index.php | 8 + .../views/lib/imagesloaded/imagesloaded.js | 487 + .../lib/imagesloaded/imagesloaded.min.js | 1 + .../views/lib/imagesloaded/index.php | 8 + modules/creativeelements/views/lib/index.php | 8 + .../views/lib/inline-editor/index.php | 8 + .../views/lib/inline-editor/js/index.php | 8 + .../lib/inline-editor/js/inline-editor.js | 1244 ++ .../lib/inline-editor/js/inline-editor.min.js | 1 + .../creativeelements/views/lib/iris/index.php | 8 + .../creativeelements/views/lib/iris/iris.js | 1557 ++ .../views/lib/iris/iris.min.js | 4 + .../views/lib/jquery-easing/index.php | 8 + .../views/lib/jquery-easing/jquery-easing.js | 143 + .../lib/jquery-easing/jquery-easing.min.js | 1 + .../views/lib/jquery-hover-intent/index.php | 8 + .../jquery-hover-intent.js | 112 + .../jquery-hover-intent.min.js | 1 + .../views/lib/jquery-numerator/index.php | 8 + .../lib/jquery-numerator/jquery-numerator.js | 137 + .../jquery-numerator/jquery-numerator.min.js | 1 + .../views/lib/jquery/index.php | 8 + .../views/lib/jquery/jquery-ui.min.js | 9 + .../views/lib/jquery/jquery.js | 5 + .../views/lib/material-icons/index.php | 8 + .../lib/material-icons/material-icons.css | 24 + .../lib/material-icons/material-icons.woff | Bin 0 -> 57620 bytes .../lib/material-icons/material-icons.woff2 | Bin 0 -> 44300 bytes .../views/lib/nouislider/index.php | 8 + .../views/lib/nouislider/nouislider.js | 2400 ++ .../views/lib/nouislider/nouislider.min.js | 2 + .../views/lib/nprogress/index.php | 8 + .../views/lib/nprogress/nprogress.js | 476 + .../views/lib/nprogress/nprogress.min.js | 1 + .../views/lib/perfect-scrollbar/index.php | 8 + .../views/lib/perfect-scrollbar/js/index.php | 8 + .../perfect-scrollbar/js/perfect-scrollbar.js | 1324 ++ .../js/perfect-scrollbar.min.js | 6 + .../views/lib/slick/index.php | 8 + .../creativeelements/views/lib/slick/slick.js | 3011 +++ .../views/lib/slick/slick.min.js | 89 + .../views/lib/smartmenus/index.php | 8 + .../views/lib/smartmenus/jquery.smartmenus.js | 1223 ++ .../lib/smartmenus/jquery.smartmenus.min.js | 3 + .../views/lib/swiper/index.php | 8 + .../views/lib/swiper/swiper.js | 7989 +++++++ .../views/lib/swiper/swiper.min.js | 270 + .../views/lib/tinymce/index.php | 8 + .../views/lib/tinymce/ps-theme.css | 1430 ++ .../views/lib/tinymce/ps-theme.min.css | 1 + .../views/lib/tinymce/tinymce.inc.js | 71 + .../views/lib/tipsy/index.php | 8 + .../creativeelements/views/lib/tipsy/tipsy.js | 258 + .../views/lib/tipsy/tipsy.min.js | 1 + .../views/lib/underscore/index.php | 8 + .../views/lib/underscore/underscore.min.js | 5 + .../views/lib/waypoints/index.php | 8 + .../lib/waypoints/waypoints-for-editor.js | 7 + .../views/lib/waypoints/waypoints.js | 662 + .../views/lib/waypoints/waypoints.min.js | 1 + .../views/lib/wp-color-picker/index.php | 8 + .../wp-color-picker/wp-color-picker-alpha.js | 481 + .../wp-color-picker-alpha.min.js | 25 + .../wp-color-picker-rtl.min.css | 2 + .../wp-color-picker/wp-color-picker.min.css | 2 + .../wp-color-picker/wp-color-picker.min.js | 1 + .../views/templates/admin/admin.tpl | 163 + .../admin/ce_content/helpers/form/form.tpl | 65 + .../admin/ce_content/helpers/form/index.php | 8 + .../admin/ce_content/helpers/index.php | 8 + .../templates/admin/ce_content/index.php | 8 + .../admin/ce_fonts/helpers/index.php | 8 + .../admin/ce_fonts/helpers/list/index.php | 8 + .../ce_fonts/helpers/list/list_content.tpl | 20 + .../views/templates/admin/ce_fonts/index.php | 8 + .../admin/ce_settings/helpers/index.php | 8 + .../ce_settings/helpers/options/index.php | 8 + .../ce_settings/helpers/options/options.tpl | 27 + .../templates/admin/ce_settings/index.php | 8 + .../views/templates/admin/index.php | 8 + .../views/templates/front/index.php | 8 + .../views/templates/front/preview.tpl | 17 + .../front/theme/_partials/assets.tpl | 36 + .../front/theme/_partials/footer.tpl | 14 + .../front/theme/_partials/header.tpl | 14 + .../templates/front/theme/_partials/index.php | 8 + .../front/theme/_partials/javascript.tpl | 13 + .../front/theme/catalog/_partials/index.php | 8 + .../catalog/_partials/miniatures/index.php | 8 + .../catalog/_partials/miniatures/product.tpl | 25 + .../theme/catalog/_partials/product-block.tpl | 96 + .../theme/catalog/_partials/quickview.tpl | 21 + .../templates/front/theme/catalog/index.php | 8 + .../templates/front/theme/catalog/product.tpl | 60 + .../front/theme/checkout/_partials/footer.tpl | 14 + .../front/theme/checkout/_partials/header.tpl | 14 + .../front/theme/checkout/_partials/index.php | 8 + .../templates/front/theme/checkout/index.php | 8 + .../views/templates/front/theme/contact.tpl | 22 + .../templates/front/theme/errors/404.tpl | 22 + .../templates/front/theme/errors/index.php | 8 + .../front/theme/errors/maintenance.tpl | 37 + .../views/templates/front/theme/index.php | 8 + .../views/templates/front/theme/index.tpl | 22 + .../templates/front/theme/layouts/index.php | 8 + .../front/theme/layouts/layout-canvas.tpl | 26 + .../theme/layouts/layout-header-footer.tpl | 50 + .../theme/layouts/layout-product-block.tpl | 8 + .../templates/hook/backoffice_header.tpl | 48 + .../views/templates/hook/index.php | 8 + .../views/templates/index.php | 8 + 641 files changed, 217372 insertions(+), 2 deletions(-) create mode 100644 modules/creativeelements/classes/CEContent.php create mode 100644 modules/creativeelements/classes/CEDatabase.php create mode 100644 modules/creativeelements/classes/CEFont.php create mode 100644 modules/creativeelements/classes/CEMigrate.php create mode 100644 modules/creativeelements/classes/CERevision.php create mode 100644 modules/creativeelements/classes/CESmarty.php create mode 100644 modules/creativeelements/classes/CETemplate.php create mode 100644 modules/creativeelements/classes/CETheme.php create mode 100644 modules/creativeelements/classes/assets/CEAssetManager.php create mode 100644 modules/creativeelements/classes/assets/CECccReducer.php create mode 100644 modules/creativeelements/classes/assets/CEJavascriptManager.php create mode 100644 modules/creativeelements/classes/assets/CEJavascriptManager5.php create mode 100644 modules/creativeelements/classes/assets/CEStylesheetManager.php create mode 100644 modules/creativeelements/classes/assets/CEStylesheetManager5.php create mode 100644 modules/creativeelements/classes/assets/index.php create mode 100644 modules/creativeelements/classes/index.php create mode 100644 modules/creativeelements/classes/wrappers/Error.php create mode 100644 modules/creativeelements/classes/wrappers/Helper.php create mode 100644 modules/creativeelements/classes/wrappers/Post.php create mode 100644 modules/creativeelements/classes/wrappers/UId.php create mode 100644 modules/creativeelements/classes/wrappers/index.php create mode 100644 modules/creativeelements/config.xml create mode 100644 modules/creativeelements/config_pl.xml create mode 100644 modules/creativeelements/controllers/admin/AdminCEContentController.php create mode 100644 modules/creativeelements/controllers/admin/AdminCEEditorController.php create mode 100644 modules/creativeelements/controllers/admin/AdminCEFontsController.php create mode 100644 modules/creativeelements/controllers/admin/AdminCESettingsController.php create mode 100644 modules/creativeelements/controllers/admin/AdminCETemplatesController.php create mode 100644 modules/creativeelements/controllers/admin/AdminCEThemesController.php create mode 100644 modules/creativeelements/controllers/admin/index.php create mode 100644 modules/creativeelements/controllers/front/ajax.php create mode 100644 modules/creativeelements/controllers/front/index.php create mode 100644 modules/creativeelements/controllers/front/preview.php create mode 100644 modules/creativeelements/controllers/index.php create mode 100644 modules/creativeelements/core/base/app.php create mode 100644 modules/creativeelements/core/base/base-object.php create mode 100644 modules/creativeelements/core/base/document.php create mode 100644 modules/creativeelements/core/base/header-footer-base.php create mode 100644 modules/creativeelements/core/base/index.php create mode 100644 modules/creativeelements/core/base/module.php create mode 100644 modules/creativeelements/core/base/theme-document.php create mode 100644 modules/creativeelements/core/base/theme-page-document.php create mode 100644 modules/creativeelements/core/common/app.php create mode 100644 modules/creativeelements/core/common/index.php create mode 100644 modules/creativeelements/core/common/modules/ajax/index.php create mode 100644 modules/creativeelements/core/common/modules/ajax/module.php create mode 100644 modules/creativeelements/core/common/modules/index.php create mode 100644 modules/creativeelements/core/document-types/content.php create mode 100644 modules/creativeelements/core/document-types/footer.php create mode 100644 modules/creativeelements/core/document-types/header.php create mode 100644 modules/creativeelements/core/document-types/index.php create mode 100644 modules/creativeelements/core/document-types/page-contact.php create mode 100644 modules/creativeelements/core/document-types/page-index.php create mode 100644 modules/creativeelements/core/document-types/page-not-found.php create mode 100644 modules/creativeelements/core/document-types/post.php create mode 100644 modules/creativeelements/core/document-types/product-miniature.php create mode 100644 modules/creativeelements/core/document-types/product-quick-view.php create mode 100644 modules/creativeelements/core/document-types/product.php create mode 100644 modules/creativeelements/core/documents-manager.php create mode 100644 modules/creativeelements/core/dynamic-tags/base-tag.php create mode 100644 modules/creativeelements/core/dynamic-tags/data-tag.php create mode 100644 modules/creativeelements/core/dynamic-tags/dynamic-css.php create mode 100644 modules/creativeelements/core/dynamic-tags/index.php create mode 100644 modules/creativeelements/core/dynamic-tags/manager.php create mode 100644 modules/creativeelements/core/dynamic-tags/tag.php create mode 100644 modules/creativeelements/core/files/base.php create mode 100644 modules/creativeelements/core/files/css/base.php create mode 100644 modules/creativeelements/core/files/css/global-css.php create mode 100644 modules/creativeelements/core/files/css/index.php create mode 100644 modules/creativeelements/core/files/css/post-preview.php create mode 100644 modules/creativeelements/core/files/css/post.php create mode 100644 modules/creativeelements/core/files/index.php create mode 100644 modules/creativeelements/core/files/manager.php create mode 100644 modules/creativeelements/core/index.php create mode 100644 modules/creativeelements/core/modules-manager.php create mode 100644 modules/creativeelements/core/responsive/files/frontend.php create mode 100644 modules/creativeelements/core/responsive/files/index.php create mode 100644 modules/creativeelements/core/responsive/index.php create mode 100644 modules/creativeelements/core/responsive/responsive.php create mode 100644 modules/creativeelements/core/settings/base/index.php create mode 100644 modules/creativeelements/core/settings/base/manager.php create mode 100644 modules/creativeelements/core/settings/base/model.php create mode 100644 modules/creativeelements/core/settings/general/index.php create mode 100644 modules/creativeelements/core/settings/general/manager.php create mode 100644 modules/creativeelements/core/settings/general/model.php create mode 100644 modules/creativeelements/core/settings/index.php create mode 100644 modules/creativeelements/core/settings/manager.php create mode 100644 modules/creativeelements/core/settings/page/index.php create mode 100644 modules/creativeelements/core/settings/page/manager.php create mode 100644 modules/creativeelements/core/settings/page/model.php create mode 100644 modules/creativeelements/core/utils/exceptions.php create mode 100644 modules/creativeelements/core/utils/index.php create mode 100644 modules/creativeelements/creativeelements.php create mode 100644 modules/creativeelements/includes/api.php create mode 100644 modules/creativeelements/includes/autoloader.php create mode 100644 modules/creativeelements/includes/base/controls-stack.php create mode 100644 modules/creativeelements/includes/base/element-base.php create mode 100644 modules/creativeelements/includes/base/index.php create mode 100644 modules/creativeelements/includes/base/skin-base.php create mode 100644 modules/creativeelements/includes/base/widget-base.php create mode 100644 modules/creativeelements/includes/base/widget-category-base.php create mode 100644 modules/creativeelements/includes/base/widget-premium-base.php create mode 100644 modules/creativeelements/includes/base/widget-product-base.php create mode 100644 modules/creativeelements/includes/conditions.php create mode 100644 modules/creativeelements/includes/controls/animation.php create mode 100644 modules/creativeelements/includes/controls/base-data.php create mode 100644 modules/creativeelements/includes/controls/base-multiple.php create mode 100644 modules/creativeelements/includes/controls/base-ui.php create mode 100644 modules/creativeelements/includes/controls/base-units.php create mode 100644 modules/creativeelements/includes/controls/base.php create mode 100644 modules/creativeelements/includes/controls/box-shadow.php create mode 100644 modules/creativeelements/includes/controls/button.php create mode 100644 modules/creativeelements/includes/controls/choose.php create mode 100644 modules/creativeelements/includes/controls/code.php create mode 100644 modules/creativeelements/includes/controls/color.php create mode 100644 modules/creativeelements/includes/controls/date-time.php create mode 100644 modules/creativeelements/includes/controls/dimensions.php create mode 100644 modules/creativeelements/includes/controls/divider.php create mode 100644 modules/creativeelements/includes/controls/font.php create mode 100644 modules/creativeelements/includes/controls/groups/background.php create mode 100644 modules/creativeelements/includes/controls/groups/base.php create mode 100644 modules/creativeelements/includes/controls/groups/border.php create mode 100644 modules/creativeelements/includes/controls/groups/box-shadow.php create mode 100644 modules/creativeelements/includes/controls/groups/css-filter.php create mode 100644 modules/creativeelements/includes/controls/groups/image-size.php create mode 100644 modules/creativeelements/includes/controls/groups/index.php create mode 100644 modules/creativeelements/includes/controls/groups/text-shadow.php create mode 100644 modules/creativeelements/includes/controls/groups/text-stroke.php create mode 100644 modules/creativeelements/includes/controls/groups/typography.php create mode 100644 modules/creativeelements/includes/controls/heading.php create mode 100644 modules/creativeelements/includes/controls/hidden.php create mode 100644 modules/creativeelements/includes/controls/hover-animation.php create mode 100644 modules/creativeelements/includes/controls/icon.php create mode 100644 modules/creativeelements/includes/controls/index.php create mode 100644 modules/creativeelements/includes/controls/media.php create mode 100644 modules/creativeelements/includes/controls/number.php create mode 100644 modules/creativeelements/includes/controls/popover-toggle.php create mode 100644 modules/creativeelements/includes/controls/raw-html.php create mode 100644 modules/creativeelements/includes/controls/repeater.php create mode 100644 modules/creativeelements/includes/controls/section.php create mode 100644 modules/creativeelements/includes/controls/select.php create mode 100644 modules/creativeelements/includes/controls/select2.php create mode 100644 modules/creativeelements/includes/controls/slider.php create mode 100644 modules/creativeelements/includes/controls/structure.php create mode 100644 modules/creativeelements/includes/controls/switcher.php create mode 100644 modules/creativeelements/includes/controls/tab.php create mode 100644 modules/creativeelements/includes/controls/tabs.php create mode 100644 modules/creativeelements/includes/controls/text-shadow.php create mode 100644 modules/creativeelements/includes/controls/text.php create mode 100644 modules/creativeelements/includes/controls/textarea.php create mode 100644 modules/creativeelements/includes/controls/url.php create mode 100644 modules/creativeelements/includes/controls/wysiwyg.php create mode 100644 modules/creativeelements/includes/db.php create mode 100644 modules/creativeelements/includes/editor-templates/editor-wrapper.php create mode 100644 modules/creativeelements/includes/editor-templates/global.php create mode 100644 modules/creativeelements/includes/editor-templates/hotkeys.php create mode 100644 modules/creativeelements/includes/editor-templates/index.php create mode 100644 modules/creativeelements/includes/editor-templates/library-layout.php create mode 100644 modules/creativeelements/includes/editor-templates/navigator.php create mode 100644 modules/creativeelements/includes/editor-templates/panel-elements.php create mode 100644 modules/creativeelements/includes/editor-templates/panel.php create mode 100644 modules/creativeelements/includes/editor-templates/repeater.php create mode 100644 modules/creativeelements/includes/editor-templates/templates.php create mode 100644 modules/creativeelements/includes/editor.php create mode 100644 modules/creativeelements/includes/elements/column.php create mode 100644 modules/creativeelements/includes/elements/index.php create mode 100644 modules/creativeelements/includes/elements/repeater.php create mode 100644 modules/creativeelements/includes/elements/section.php create mode 100644 modules/creativeelements/includes/embed.php create mode 100644 modules/creativeelements/includes/fonts.php create mode 100644 modules/creativeelements/includes/frontend.php create mode 100644 modules/creativeelements/includes/heartbeat.php create mode 100644 modules/creativeelements/includes/index.php create mode 100644 modules/creativeelements/includes/interfaces/group-control.php create mode 100644 modules/creativeelements/includes/interfaces/index.php create mode 100644 modules/creativeelements/includes/interfaces/scheme.php create mode 100644 modules/creativeelements/includes/managers/controls.php create mode 100644 modules/creativeelements/includes/managers/elements.php create mode 100644 modules/creativeelements/includes/managers/index.php create mode 100644 modules/creativeelements/includes/managers/schemes.php create mode 100644 modules/creativeelements/includes/managers/skins.php create mode 100644 modules/creativeelements/includes/managers/widgets.php create mode 100644 modules/creativeelements/includes/plugin.php create mode 100644 modules/creativeelements/includes/preview.php create mode 100644 modules/creativeelements/includes/schemes/base.php create mode 100644 modules/creativeelements/includes/schemes/color-picker.php create mode 100644 modules/creativeelements/includes/schemes/color.php create mode 100644 modules/creativeelements/includes/schemes/index.php create mode 100644 modules/creativeelements/includes/schemes/typography.php create mode 100644 modules/creativeelements/includes/shapes.php create mode 100644 modules/creativeelements/includes/stylesheet.php create mode 100644 modules/creativeelements/includes/template-library/classes/class-import-images.php create mode 100644 modules/creativeelements/includes/template-library/classes/index.php create mode 100644 modules/creativeelements/includes/template-library/index.php create mode 100644 modules/creativeelements/includes/template-library/manager.php create mode 100644 modules/creativeelements/includes/template-library/sources/base.php create mode 100644 modules/creativeelements/includes/template-library/sources/index.php create mode 100644 modules/creativeelements/includes/template-library/sources/local.php create mode 100644 modules/creativeelements/includes/template-library/sources/remote.php create mode 100644 modules/creativeelements/includes/traits/carousel.php create mode 100644 modules/creativeelements/includes/traits/index.php create mode 100644 modules/creativeelements/includes/traits/nav.php create mode 100644 modules/creativeelements/includes/user.php create mode 100644 modules/creativeelements/includes/utils.php create mode 100644 modules/creativeelements/includes/widgets/accordion.php create mode 100644 modules/creativeelements/includes/widgets/ajax-search.php create mode 100644 modules/creativeelements/includes/widgets/alert.php create mode 100644 modules/creativeelements/includes/widgets/animated-headline.php create mode 100644 modules/creativeelements/includes/widgets/button.php create mode 100644 modules/creativeelements/includes/widgets/call-to-action.php create mode 100644 modules/creativeelements/includes/widgets/category-tree.php create mode 100644 modules/creativeelements/includes/widgets/common.php create mode 100644 modules/creativeelements/includes/widgets/contact-form.php create mode 100644 modules/creativeelements/includes/widgets/countdown.php create mode 100644 modules/creativeelements/includes/widgets/counter.php create mode 100644 modules/creativeelements/includes/widgets/currency-selector.php create mode 100644 modules/creativeelements/includes/widgets/divider.php create mode 100644 modules/creativeelements/includes/widgets/email-subscription.php create mode 100644 modules/creativeelements/includes/widgets/facebook-button.php create mode 100644 modules/creativeelements/includes/widgets/facebook-page.php create mode 100644 modules/creativeelements/includes/widgets/flip-box.php create mode 100644 modules/creativeelements/includes/widgets/google-maps.php create mode 100644 modules/creativeelements/includes/widgets/heading.php create mode 100644 modules/creativeelements/includes/widgets/html.php create mode 100644 modules/creativeelements/includes/widgets/icon-box.php create mode 100644 modules/creativeelements/includes/widgets/icon-list.php create mode 100644 modules/creativeelements/includes/widgets/icon.php create mode 100644 modules/creativeelements/includes/widgets/image-box.php create mode 100644 modules/creativeelements/includes/widgets/image-carousel.php create mode 100644 modules/creativeelements/includes/widgets/image-gallery.php create mode 100644 modules/creativeelements/includes/widgets/image-hotspot.php create mode 100644 modules/creativeelements/includes/widgets/image-slider.php create mode 100644 modules/creativeelements/includes/widgets/image.php create mode 100644 modules/creativeelements/includes/widgets/index.php create mode 100644 modules/creativeelements/includes/widgets/language-selector.php create mode 100644 modules/creativeelements/includes/widgets/layer-slider.php create mode 100644 modules/creativeelements/includes/widgets/menu-anchor.php create mode 100644 modules/creativeelements/includes/widgets/module.php create mode 100644 modules/creativeelements/includes/widgets/nav-menu.php create mode 100644 modules/creativeelements/includes/widgets/product-box.php create mode 100644 modules/creativeelements/includes/widgets/product-carousel.php create mode 100644 modules/creativeelements/includes/widgets/product-grid.php create mode 100644 modules/creativeelements/includes/widgets/progress.php create mode 100644 modules/creativeelements/includes/widgets/shopping-cart.php create mode 100644 modules/creativeelements/includes/widgets/shortcode.php create mode 100644 modules/creativeelements/includes/widgets/sign-in.php create mode 100644 modules/creativeelements/includes/widgets/site-logo.php create mode 100644 modules/creativeelements/includes/widgets/site-title.php create mode 100644 modules/creativeelements/includes/widgets/social-icons.php create mode 100644 modules/creativeelements/includes/widgets/spacer.php create mode 100644 modules/creativeelements/includes/widgets/star-rating.php create mode 100644 modules/creativeelements/includes/widgets/tabs.php create mode 100644 modules/creativeelements/includes/widgets/testimonial-carousel.php create mode 100644 modules/creativeelements/includes/widgets/testimonial.php create mode 100644 modules/creativeelements/includes/widgets/text-editor.php create mode 100644 modules/creativeelements/includes/widgets/text-path.php create mode 100644 modules/creativeelements/includes/widgets/toggle.php create mode 100644 modules/creativeelements/includes/widgets/trustedshops-reviews.php create mode 100644 modules/creativeelements/includes/widgets/video.php create mode 100644 modules/creativeelements/index.php create mode 100644 modules/creativeelements/logo.png create mode 100644 modules/creativeelements/logo.webp create mode 100644 modules/creativeelements/modifications.txt create mode 100644 modules/creativeelements/modules/catalog/controls/index.php create mode 100644 modules/creativeelements/modules/catalog/controls/select-category.php create mode 100644 modules/creativeelements/modules/catalog/controls/select-manufacturer.php create mode 100644 modules/creativeelements/modules/catalog/controls/select-supplier.php create mode 100644 modules/creativeelements/modules/catalog/files/css/index.php create mode 100644 modules/creativeelements/modules/catalog/files/css/product-miniature.php create mode 100644 modules/creativeelements/modules/catalog/files/index.php create mode 100644 modules/creativeelements/modules/catalog/index.php create mode 100644 modules/creativeelements/modules/catalog/module.php create mode 100644 modules/creativeelements/modules/catalog/tags/cart-rule-date-time.php create mode 100644 modules/creativeelements/modules/catalog/tags/category-name.php create mode 100644 modules/creativeelements/modules/catalog/tags/category-url.php create mode 100644 modules/creativeelements/modules/catalog/tags/index.php create mode 100644 modules/creativeelements/modules/catalog/tags/manufacturer-image.php create mode 100644 modules/creativeelements/modules/catalog/tags/manufacturer-name.php create mode 100644 modules/creativeelements/modules/catalog/tags/manufacturer-url.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-add-to-cart.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-availability-date-time.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-buy-now.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-description-short.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-image.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-meta.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-name.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-price.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-quick-view.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-rating.php create mode 100644 modules/creativeelements/modules/catalog/tags/product-url.php create mode 100644 modules/creativeelements/modules/catalog/tags/specific-price-rule-date-time.php create mode 100644 modules/creativeelements/modules/catalog/widgets/index.php create mode 100644 modules/creativeelements/modules/catalog/widgets/manufacturer-image.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-add-to-cart.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-add-to-wishlist.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-attachments.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-badges.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-block.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-brand-image.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-description-short.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-description.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-features.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-image.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-images.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-meta.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-miniature-add-to-cart.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-miniature-box.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-miniature-image.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-miniature-name.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-miniature-price.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-miniature-rating.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-miniature-variants.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-name.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-price.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-quantity.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-rating.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-sale-countdown.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-share.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-stock.php create mode 100644 modules/creativeelements/modules/catalog/widgets/product-variants.php create mode 100644 modules/creativeelements/modules/creative/index.php create mode 100644 modules/creativeelements/modules/creative/module.php create mode 100644 modules/creativeelements/modules/custom-css/index.php create mode 100644 modules/creativeelements/modules/custom-css/module.php create mode 100644 modules/creativeelements/modules/dynamic-tags/index.php create mode 100644 modules/creativeelements/modules/dynamic-tags/module.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/carousel.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/contact-url.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/current-date-time.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/index.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/internal-url.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/lightbox.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/page-title.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/request-parameter.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/shortcode.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/site-contact.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/site-logo.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/site-title.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/site-url.php create mode 100644 modules/creativeelements/modules/dynamic-tags/tags/user-info.php create mode 100644 modules/creativeelements/modules/fonts-manager/index.php create mode 100644 modules/creativeelements/modules/fonts-manager/module.php create mode 100644 modules/creativeelements/modules/history/index.php create mode 100644 modules/creativeelements/modules/history/module.php create mode 100644 modules/creativeelements/modules/history/revisions-manager.php create mode 100644 modules/creativeelements/modules/history/views/history-panel-template.php create mode 100644 modules/creativeelements/modules/history/views/index.php create mode 100644 modules/creativeelements/modules/history/views/revisions-panel-template.php create mode 100644 modules/creativeelements/modules/index.php create mode 100644 modules/creativeelements/modules/library/documents/index.php create mode 100644 modules/creativeelements/modules/library/documents/library-document.php create mode 100644 modules/creativeelements/modules/library/documents/not-supported.php create mode 100644 modules/creativeelements/modules/library/documents/page.php create mode 100644 modules/creativeelements/modules/library/documents/section.php create mode 100644 modules/creativeelements/modules/library/index.php create mode 100644 modules/creativeelements/modules/library/module.php create mode 100644 modules/creativeelements/modules/motion-effects/controls-group.php create mode 100644 modules/creativeelements/modules/motion-effects/index.php create mode 100644 modules/creativeelements/modules/motion-effects/module.php create mode 100644 modules/creativeelements/modules/page-templates/index.php create mode 100644 modules/creativeelements/modules/page-templates/module.php create mode 100644 modules/creativeelements/modules/visibility/index.php create mode 100644 modules/creativeelements/modules/visibility/module.php create mode 100644 modules/creativeelements/override/classes/CMSCategory.php create mode 100644 modules/creativeelements/override/classes/Category.php create mode 100644 modules/creativeelements/override/classes/Manufacturer.php create mode 100644 modules/creativeelements/override/classes/Supplier.php create mode 100644 modules/creativeelements/override/classes/index.php create mode 100644 modules/creativeelements/override/index.php create mode 100644 modules/creativeelements/translations/de.php create mode 100644 modules/creativeelements/translations/es.php create mode 100644 modules/creativeelements/translations/fr.php create mode 100644 modules/creativeelements/translations/index.php create mode 100644 modules/creativeelements/translations/it.php create mode 100644 modules/creativeelements/translations/pl.php create mode 100644 modules/creativeelements/upgrade/index.php create mode 100644 modules/creativeelements/upgrade/upgrade-1.0.0.php create mode 100644 modules/creativeelements/upgrade/upgrade-1.4.10.php create mode 100644 modules/creativeelements/upgrade/upgrade-2.5.0.php create mode 100644 modules/creativeelements/upgrade/upgrade-2.5.10.php create mode 100644 modules/creativeelements/upgrade/upgrade-2.5.11.php create mode 100644 modules/creativeelements/upgrade/upgrade-2.5.2.php create mode 100644 modules/creativeelements/upgrade/upgrade-2.5.5.php create mode 100644 modules/creativeelements/upgrade/upgrade-2.5.7.php create mode 100644 modules/creativeelements/upgrade/upgrade-2.5.8.php create mode 100644 modules/creativeelements/upgrade/upgrade-2.5.9.php create mode 100644 modules/creativeelements/views/css/admin.css create mode 100644 modules/creativeelements/views/css/backoffice.css create mode 100644 modules/creativeelements/views/css/ce/1-global.css create mode 100644 modules/creativeelements/views/css/ce/index.php create mode 100644 modules/creativeelements/views/css/common-rtl.css create mode 100644 modules/creativeelements/views/css/common-rtl.min.css create mode 100644 modules/creativeelements/views/css/common.css create mode 100644 modules/creativeelements/views/css/common.min.css create mode 100644 modules/creativeelements/views/css/custom-fonts.css create mode 100644 modules/creativeelements/views/css/editor-ce.css create mode 100644 modules/creativeelements/views/css/editor-preview-rtl.css create mode 100644 modules/creativeelements/views/css/editor-preview-rtl.min.css create mode 100644 modules/creativeelements/views/css/editor-preview.css create mode 100644 modules/creativeelements/views/css/editor-preview.min.css create mode 100644 modules/creativeelements/views/css/editor-rtl.css create mode 100644 modules/creativeelements/views/css/editor-rtl.min.css create mode 100644 modules/creativeelements/views/css/editor.css create mode 100644 modules/creativeelements/views/css/editor.min.css create mode 100644 modules/creativeelements/views/css/frontend-edit.css create mode 100644 modules/creativeelements/views/css/frontend-msie.css create mode 100644 modules/creativeelements/views/css/frontend-msie.min.css create mode 100644 modules/creativeelements/views/css/frontend-rtl.css create mode 100644 modules/creativeelements/views/css/frontend-rtl.min.css create mode 100644 modules/creativeelements/views/css/frontend.css create mode 100644 modules/creativeelements/views/css/frontend.min.css create mode 100644 modules/creativeelements/views/css/index.php create mode 100644 modules/creativeelements/views/css/media.css create mode 100644 modules/creativeelements/views/css/migrate.css create mode 100644 modules/creativeelements/views/css/settings.css create mode 100644 modules/creativeelements/views/fonts/index.php create mode 100644 modules/creativeelements/views/img/ajax-loader.gif create mode 100644 modules/creativeelements/views/img/blur.png create mode 100644 modules/creativeelements/views/img/blur.webp create mode 100644 modules/creativeelements/views/img/contrast.png create mode 100644 modules/creativeelements/views/img/contrast.webp create mode 100644 modules/creativeelements/views/img/index.php create mode 100644 modules/creativeelements/views/img/placeholder.png create mode 100644 modules/creativeelements/views/img/placeholder.webp create mode 100644 modules/creativeelements/views/img/shapes/arrow-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/arrow.svg create mode 100644 modules/creativeelements/views/img/shapes/book-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/book.svg create mode 100644 modules/creativeelements/views/img/shapes/clouds-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/clouds.svg create mode 100644 modules/creativeelements/views/img/shapes/curve-asymmetrical-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/curve-asymmetrical.svg create mode 100644 modules/creativeelements/views/img/shapes/curve-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/curve.svg create mode 100644 modules/creativeelements/views/img/shapes/drops-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/drops.svg create mode 100644 modules/creativeelements/views/img/shapes/index.php create mode 100644 modules/creativeelements/views/img/shapes/mountains.svg create mode 100644 modules/creativeelements/views/img/shapes/opacity-fan.svg create mode 100644 modules/creativeelements/views/img/shapes/opacity-tilt.svg create mode 100644 modules/creativeelements/views/img/shapes/pyramids-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/pyramids.svg create mode 100644 modules/creativeelements/views/img/shapes/split-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/split.svg create mode 100644 modules/creativeelements/views/img/shapes/tilt.svg create mode 100644 modules/creativeelements/views/img/shapes/triangle-asymmetrical-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/triangle-asymmetrical.svg create mode 100644 modules/creativeelements/views/img/shapes/triangle-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/triangle.svg create mode 100644 modules/creativeelements/views/img/shapes/wave-brush.svg create mode 100644 modules/creativeelements/views/img/shapes/waves-negative.svg create mode 100644 modules/creativeelements/views/img/shapes/waves-pattern.svg create mode 100644 modules/creativeelements/views/img/shapes/waves.svg create mode 100644 modules/creativeelements/views/img/shapes/zigzag.svg create mode 100644 modules/creativeelements/views/index.php create mode 100644 modules/creativeelements/views/js/admin.js create mode 100644 modules/creativeelements/views/js/backoffice.js create mode 100644 modules/creativeelements/views/js/common-modules.js create mode 100644 modules/creativeelements/views/js/common-modules.min.js create mode 100644 modules/creativeelements/views/js/common.js create mode 100644 modules/creativeelements/views/js/common.min.js create mode 100644 modules/creativeelements/views/js/custom-fonts.js create mode 100644 modules/creativeelements/views/js/editor-ce.js create mode 100644 modules/creativeelements/views/js/editor-modules.js create mode 100644 modules/creativeelements/views/js/editor-modules.min.js create mode 100644 modules/creativeelements/views/js/editor-preview.js create mode 100644 modules/creativeelements/views/js/editor.js create mode 100644 modules/creativeelements/views/js/editor.min.js create mode 100644 modules/creativeelements/views/js/frontend-edit.js create mode 100644 modules/creativeelements/views/js/frontend-modules.js create mode 100644 modules/creativeelements/views/js/frontend-modules.min.js create mode 100644 modules/creativeelements/views/js/frontend.js create mode 100644 modules/creativeelements/views/js/frontend.min.js create mode 100644 modules/creativeelements/views/js/index.php create mode 100644 modules/creativeelements/views/js/migrate.js create mode 100644 modules/creativeelements/views/js/settings.js create mode 100644 modules/creativeelements/views/lib/animations/animate.css create mode 100644 modules/creativeelements/views/lib/animations/animations.css create mode 100644 modules/creativeelements/views/lib/animations/animations.min.css create mode 100644 modules/creativeelements/views/lib/animations/hover.css create mode 100644 modules/creativeelements/views/lib/animations/index.php create mode 100644 modules/creativeelements/views/lib/backbone/backbone.marionette.js create mode 100644 modules/creativeelements/views/lib/backbone/backbone.marionette.min.js create mode 100644 modules/creativeelements/views/lib/backbone/backbone.min.js create mode 100644 modules/creativeelements/views/lib/backbone/backbone.radio.js create mode 100644 modules/creativeelements/views/lib/backbone/backbone.radio.min.js create mode 100644 modules/creativeelements/views/lib/backbone/index.php create mode 100644 modules/creativeelements/views/lib/ceicons/ceicons.css create mode 100644 modules/creativeelements/views/lib/ceicons/ceicons.min.css create mode 100644 modules/creativeelements/views/lib/ceicons/fonts/ceicons.svg create mode 100644 modules/creativeelements/views/lib/ceicons/fonts/ceicons.woff create mode 100644 modules/creativeelements/views/lib/ceicons/fonts/ceicons.woff2 create mode 100644 modules/creativeelements/views/lib/ceicons/fonts/index.php create mode 100644 modules/creativeelements/views/lib/ceicons/index.php create mode 100644 modules/creativeelements/views/lib/dialog/dialog.js create mode 100644 modules/creativeelements/views/lib/dialog/dialog.min.js create mode 100644 modules/creativeelements/views/lib/dialog/index.php create mode 100644 modules/creativeelements/views/lib/e-select2/css/e-select2.css create mode 100644 modules/creativeelements/views/lib/e-select2/css/e-select2.min.css create mode 100644 modules/creativeelements/views/lib/e-select2/css/index.php create mode 100644 modules/creativeelements/views/lib/e-select2/index.php create mode 100644 modules/creativeelements/views/lib/e-select2/js/e-select2.full.js create mode 100644 modules/creativeelements/views/lib/e-select2/js/e-select2.full.min.js create mode 100644 modules/creativeelements/views/lib/e-select2/js/index.php create mode 100644 modules/creativeelements/views/lib/eicons/css/elementor-icons.css create mode 100644 modules/creativeelements/views/lib/eicons/css/elementor-icons.min.css create mode 100644 modules/creativeelements/views/lib/eicons/css/index.php create mode 100644 modules/creativeelements/views/lib/eicons/fonts/eicons.svg create mode 100644 modules/creativeelements/views/lib/eicons/fonts/eicons.woff create mode 100644 modules/creativeelements/views/lib/eicons/fonts/eicons.woff2 create mode 100644 modules/creativeelements/views/lib/eicons/fonts/index.php create mode 100644 modules/creativeelements/views/lib/eicons/index.php create mode 100644 modules/creativeelements/views/lib/filemanager/.htaccess create mode 100644 modules/creativeelements/views/lib/filemanager/config.php create mode 100644 modules/creativeelements/views/lib/filemanager/index.php create mode 100644 modules/creativeelements/views/lib/flatpickr/flatpickr.css create mode 100644 modules/creativeelements/views/lib/flatpickr/flatpickr.js create mode 100644 modules/creativeelements/views/lib/flatpickr/flatpickr.min.css create mode 100644 modules/creativeelements/views/lib/flatpickr/flatpickr.min.js create mode 100644 modules/creativeelements/views/lib/flatpickr/index.php create mode 100644 modules/creativeelements/views/lib/font-awesome/css/font-awesome.css create mode 100644 modules/creativeelements/views/lib/font-awesome/css/font-awesome.min.css create mode 100644 modules/creativeelements/views/lib/font-awesome/css/index.php create mode 100644 modules/creativeelements/views/lib/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 modules/creativeelements/views/lib/font-awesome/fonts/fontawesome-webfont.woff2 create mode 100644 modules/creativeelements/views/lib/font-awesome/fonts/index.php create mode 100644 modules/creativeelements/views/lib/font-awesome/index.php create mode 100644 modules/creativeelements/views/lib/heartbeat/heartbeat.js create mode 100644 modules/creativeelements/views/lib/heartbeat/heartbeat.min.js create mode 100644 modules/creativeelements/views/lib/heartbeat/index.php create mode 100644 modules/creativeelements/views/lib/imagesloaded/imagesloaded.js create mode 100644 modules/creativeelements/views/lib/imagesloaded/imagesloaded.min.js create mode 100644 modules/creativeelements/views/lib/imagesloaded/index.php create mode 100644 modules/creativeelements/views/lib/index.php create mode 100644 modules/creativeelements/views/lib/inline-editor/index.php create mode 100644 modules/creativeelements/views/lib/inline-editor/js/index.php create mode 100644 modules/creativeelements/views/lib/inline-editor/js/inline-editor.js create mode 100644 modules/creativeelements/views/lib/inline-editor/js/inline-editor.min.js create mode 100644 modules/creativeelements/views/lib/iris/index.php create mode 100644 modules/creativeelements/views/lib/iris/iris.js create mode 100644 modules/creativeelements/views/lib/iris/iris.min.js create mode 100644 modules/creativeelements/views/lib/jquery-easing/index.php create mode 100644 modules/creativeelements/views/lib/jquery-easing/jquery-easing.js create mode 100644 modules/creativeelements/views/lib/jquery-easing/jquery-easing.min.js create mode 100644 modules/creativeelements/views/lib/jquery-hover-intent/index.php create mode 100644 modules/creativeelements/views/lib/jquery-hover-intent/jquery-hover-intent.js create mode 100644 modules/creativeelements/views/lib/jquery-hover-intent/jquery-hover-intent.min.js create mode 100644 modules/creativeelements/views/lib/jquery-numerator/index.php create mode 100644 modules/creativeelements/views/lib/jquery-numerator/jquery-numerator.js create mode 100644 modules/creativeelements/views/lib/jquery-numerator/jquery-numerator.min.js create mode 100644 modules/creativeelements/views/lib/jquery/index.php create mode 100644 modules/creativeelements/views/lib/jquery/jquery-ui.min.js create mode 100644 modules/creativeelements/views/lib/jquery/jquery.js create mode 100644 modules/creativeelements/views/lib/material-icons/index.php create mode 100644 modules/creativeelements/views/lib/material-icons/material-icons.css create mode 100644 modules/creativeelements/views/lib/material-icons/material-icons.woff create mode 100644 modules/creativeelements/views/lib/material-icons/material-icons.woff2 create mode 100644 modules/creativeelements/views/lib/nouislider/index.php create mode 100644 modules/creativeelements/views/lib/nouislider/nouislider.js create mode 100644 modules/creativeelements/views/lib/nouislider/nouislider.min.js create mode 100644 modules/creativeelements/views/lib/nprogress/index.php create mode 100644 modules/creativeelements/views/lib/nprogress/nprogress.js create mode 100644 modules/creativeelements/views/lib/nprogress/nprogress.min.js create mode 100644 modules/creativeelements/views/lib/perfect-scrollbar/index.php create mode 100644 modules/creativeelements/views/lib/perfect-scrollbar/js/index.php create mode 100644 modules/creativeelements/views/lib/perfect-scrollbar/js/perfect-scrollbar.js create mode 100644 modules/creativeelements/views/lib/perfect-scrollbar/js/perfect-scrollbar.min.js create mode 100644 modules/creativeelements/views/lib/slick/index.php create mode 100644 modules/creativeelements/views/lib/slick/slick.js create mode 100644 modules/creativeelements/views/lib/slick/slick.min.js create mode 100644 modules/creativeelements/views/lib/smartmenus/index.php create mode 100644 modules/creativeelements/views/lib/smartmenus/jquery.smartmenus.js create mode 100644 modules/creativeelements/views/lib/smartmenus/jquery.smartmenus.min.js create mode 100644 modules/creativeelements/views/lib/swiper/index.php create mode 100644 modules/creativeelements/views/lib/swiper/swiper.js create mode 100644 modules/creativeelements/views/lib/swiper/swiper.min.js create mode 100644 modules/creativeelements/views/lib/tinymce/index.php create mode 100644 modules/creativeelements/views/lib/tinymce/ps-theme.css create mode 100644 modules/creativeelements/views/lib/tinymce/ps-theme.min.css create mode 100644 modules/creativeelements/views/lib/tinymce/tinymce.inc.js create mode 100644 modules/creativeelements/views/lib/tipsy/index.php create mode 100644 modules/creativeelements/views/lib/tipsy/tipsy.js create mode 100644 modules/creativeelements/views/lib/tipsy/tipsy.min.js create mode 100644 modules/creativeelements/views/lib/underscore/index.php create mode 100644 modules/creativeelements/views/lib/underscore/underscore.min.js create mode 100644 modules/creativeelements/views/lib/waypoints/index.php create mode 100644 modules/creativeelements/views/lib/waypoints/waypoints-for-editor.js create mode 100644 modules/creativeelements/views/lib/waypoints/waypoints.js create mode 100644 modules/creativeelements/views/lib/waypoints/waypoints.min.js create mode 100644 modules/creativeelements/views/lib/wp-color-picker/index.php create mode 100644 modules/creativeelements/views/lib/wp-color-picker/wp-color-picker-alpha.js create mode 100644 modules/creativeelements/views/lib/wp-color-picker/wp-color-picker-alpha.min.js create mode 100644 modules/creativeelements/views/lib/wp-color-picker/wp-color-picker-rtl.min.css create mode 100644 modules/creativeelements/views/lib/wp-color-picker/wp-color-picker.min.css create mode 100644 modules/creativeelements/views/lib/wp-color-picker/wp-color-picker.min.js create mode 100644 modules/creativeelements/views/templates/admin/admin.tpl create mode 100644 modules/creativeelements/views/templates/admin/ce_content/helpers/form/form.tpl create mode 100644 modules/creativeelements/views/templates/admin/ce_content/helpers/form/index.php create mode 100644 modules/creativeelements/views/templates/admin/ce_content/helpers/index.php create mode 100644 modules/creativeelements/views/templates/admin/ce_content/index.php create mode 100644 modules/creativeelements/views/templates/admin/ce_fonts/helpers/index.php create mode 100644 modules/creativeelements/views/templates/admin/ce_fonts/helpers/list/index.php create mode 100644 modules/creativeelements/views/templates/admin/ce_fonts/helpers/list/list_content.tpl create mode 100644 modules/creativeelements/views/templates/admin/ce_fonts/index.php create mode 100644 modules/creativeelements/views/templates/admin/ce_settings/helpers/index.php create mode 100644 modules/creativeelements/views/templates/admin/ce_settings/helpers/options/index.php create mode 100644 modules/creativeelements/views/templates/admin/ce_settings/helpers/options/options.tpl create mode 100644 modules/creativeelements/views/templates/admin/ce_settings/index.php create mode 100644 modules/creativeelements/views/templates/admin/index.php create mode 100644 modules/creativeelements/views/templates/front/index.php create mode 100644 modules/creativeelements/views/templates/front/preview.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/_partials/assets.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/_partials/footer.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/_partials/header.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/_partials/index.php create mode 100644 modules/creativeelements/views/templates/front/theme/_partials/javascript.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/catalog/_partials/index.php create mode 100644 modules/creativeelements/views/templates/front/theme/catalog/_partials/miniatures/index.php create mode 100644 modules/creativeelements/views/templates/front/theme/catalog/_partials/miniatures/product.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/catalog/_partials/product-block.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/catalog/_partials/quickview.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/catalog/index.php create mode 100644 modules/creativeelements/views/templates/front/theme/catalog/product.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/checkout/_partials/footer.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/checkout/_partials/header.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/checkout/_partials/index.php create mode 100644 modules/creativeelements/views/templates/front/theme/checkout/index.php create mode 100644 modules/creativeelements/views/templates/front/theme/contact.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/errors/404.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/errors/index.php create mode 100644 modules/creativeelements/views/templates/front/theme/errors/maintenance.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/index.php create mode 100644 modules/creativeelements/views/templates/front/theme/index.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/layouts/index.php create mode 100644 modules/creativeelements/views/templates/front/theme/layouts/layout-canvas.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/layouts/layout-header-footer.tpl create mode 100644 modules/creativeelements/views/templates/front/theme/layouts/layout-product-block.tpl create mode 100644 modules/creativeelements/views/templates/hook/backoffice_header.tpl create mode 100644 modules/creativeelements/views/templates/hook/index.php create mode 100644 modules/creativeelements/views/templates/index.php diff --git a/.vscode/ftp-kr.sync.cache.json b/.vscode/ftp-kr.sync.cache.json index 8f0dc256..3dc74a7e 100644 --- a/.vscode/ftp-kr.sync.cache.json +++ b/.vscode/ftp-kr.sync.cache.json @@ -1082,7 +1082,7 @@ }, ".htaccess": { "type": "-", - "size": 5862, + "size": 41518, "lmtime": 1746726321526, "modified": true }, @@ -8081,7 +8081,4103 @@ "ybc_productimagehover": {}, "ybc_specificprices": {}, "ybc_themeconfig": {}, - "ybc_widget": {} + "ybc_widget": {}, + "creativeelements": { + "classes": { + "assets": { + "CEAssetManager.php": { + "type": "-", + "size": 6960, + "lmtime": 1751610811000, + "modified": false + }, + "CECccReducer.php": { + "type": "-", + "size": 760, + "lmtime": 1751610811000, + "modified": false + }, + "CEJavascriptManager5.php": { + "type": "-", + "size": 1093, + "lmtime": 1751610811000, + "modified": false + }, + "CEJavascriptManager.php": { + "type": "-", + "size": 1100, + "lmtime": 1751610811000, + "modified": false + }, + "CEStylesheetManager5.php": { + "type": "-", + "size": 1093, + "lmtime": 1751610811000, + "modified": false + }, + "CEStylesheetManager.php": { + "type": "-", + "size": 1100, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + } + }, + "CEContent.php": { + "type": "-", + "size": 6689, + "lmtime": 1751610811000, + "modified": false + }, + "CEDatabase.php": { + "type": "-", + "size": 13317, + "lmtime": 1751610811000, + "modified": false + }, + "CEFont.php": { + "type": "-", + "size": 4007, + "lmtime": 1751610811000, + "modified": false + }, + "CEMigrate.php": { + "type": "-", + "size": 10585, + "lmtime": 1751610811000, + "modified": false + }, + "CERevision.php": { + "type": "-", + "size": 1181, + "lmtime": 1751610811000, + "modified": false + }, + "CESmarty.php": { + "type": "-", + "size": 5047, + "lmtime": 1751610811000, + "modified": false + }, + "CETemplate.php": { + "type": "-", + "size": 1756, + "lmtime": 1751610811000, + "modified": false + }, + "CETheme.php": { + "type": "-", + "size": 3337, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 501, + "lmtime": 1751610811000, + "modified": false + }, + "wrappers": { + "Error.php": { + "type": "-", + "size": 1137, + "lmtime": 1751610811000, + "modified": false + }, + "Helper.php": { + "type": "-", + "size": 34509, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "Post.php": { + "type": "-", + "size": 18408, + "lmtime": 1751610811000, + "modified": false + }, + "UId.php": { + "type": "-", + "size": 20295, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "config_pl.xml": { + "type": "-", + "size": 640, + "lmtime": 1751610811000, + "modified": false + }, + "config.xml": { + "type": "-", + "size": 865, + "lmtime": 1751610811000, + "modified": false + }, + "controllers": { + "admin": { + "AdminCEContentController.php": { + "type": "-", + "size": 11547, + "lmtime": 1751610811000, + "modified": false + }, + "AdminCEEditorController.php": { + "type": "-", + "size": 15904, + "lmtime": 1751610811000, + "modified": false + }, + "AdminCEFontsController.php": { + "type": "-", + "size": 8214, + "lmtime": 1751610811000, + "modified": false + }, + "AdminCESettingsController.php": { + "type": "-", + "size": 25257, + "lmtime": 1751610811000, + "modified": false + }, + "AdminCETemplatesController.php": { + "type": "-", + "size": 15561, + "lmtime": 1751610811000, + "modified": false + }, + "AdminCEThemesController.php": { + "type": "-", + "size": 18544, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + } + }, + "front": { + "ajax.php": { + "type": "-", + "size": 3927, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "preview.php": { + "type": "-", + "size": 2896, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 501, + "lmtime": 1751610811000, + "modified": false + } + }, + "core": { + "base": { + "app.php": { + "type": "-", + "size": 1436, + "lmtime": 1751610811000, + "modified": false + }, + "base-object.php": { + "type": "-", + "size": 3607, + "lmtime": 1751610811000, + "modified": false + }, + "document.php": { + "type": "-", + "size": 29013, + "lmtime": 1751610811000, + "modified": false + }, + "header-footer-base.php": { + "type": "-", + "size": 1358, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 6710, + "lmtime": 1751610811000, + "modified": false + }, + "theme-document.php": { + "type": "-", + "size": 1072, + "lmtime": 1751610811000, + "modified": false + }, + "theme-page-document.php": { + "type": "-", + "size": 891, + "lmtime": 1751610811000, + "modified": false + } + }, + "common": { + "app.php": { + "type": "-", + "size": 6682, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "modules": { + "ajax": { + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 8171, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "documents-manager.php": { + "type": "-", + "size": 18217, + "lmtime": 1751610811000, + "modified": false + }, + "document-types": { + "content.php": { + "type": "-", + "size": 3173, + "lmtime": 1751610811000, + "modified": false + }, + "footer.php": { + "type": "-", + "size": 743, + "lmtime": 1751610811000, + "modified": false + }, + "header.php": { + "type": "-", + "size": 743, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "page-contact.php": { + "type": "-", + "size": 717, + "lmtime": 1751610811000, + "modified": false + }, + "page-index.php": { + "type": "-", + "size": 710, + "lmtime": 1751610811000, + "modified": false + }, + "page-not-found.php": { + "type": "-", + "size": 725, + "lmtime": 1751610811000, + "modified": false + }, + "post.php": { + "type": "-", + "size": 6910, + "lmtime": 1751610811000, + "modified": false + }, + "product-miniature.php": { + "type": "-", + "size": 11483, + "lmtime": 1751610811000, + "modified": false + }, + "product.php": { + "type": "-", + "size": 2485, + "lmtime": 1751610811000, + "modified": false + }, + "product-quick-view.php": { + "type": "-", + "size": 18575, + "lmtime": 1751610811000, + "modified": false + } + }, + "dynamic-tags": { + "base-tag.php": { + "type": "-", + "size": 4937, + "lmtime": 1751610811000, + "modified": false + }, + "data-tag.php": { + "type": "-", + "size": 1493, + "lmtime": 1751610811000, + "modified": false + }, + "dynamic-css.php": { + "type": "-", + "size": 3320, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "manager.php": { + "type": "-", + "size": 11909, + "lmtime": 1751610811000, + "modified": false + }, + "tag.php": { + "type": "-", + "size": 3499, + "lmtime": 1751610811000, + "modified": false + } + }, + "files": { + "base.php": { + "type": "-", + "size": 6439, + "lmtime": 1751610811000, + "modified": false + }, + "css": { + "base.php": { + "type": "-", + "size": 20997, + "lmtime": 1751610811000, + "modified": false + }, + "global-css.php": { + "type": "-", + "size": 4205, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "post.php": { + "type": "-", + "size": 9061, + "lmtime": 1751610811000, + "modified": false + }, + "post-preview.php": { + "type": "-", + "size": 2779, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "manager.php": { + "type": "-", + "size": 3418, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 501, + "lmtime": 1751610811000, + "modified": false + }, + "modules-manager.php": { + "type": "-", + "size": 2982, + "lmtime": 1751610811000, + "modified": false + }, + "responsive": { + "files": { + "frontend.php": { + "type": "-", + "size": 3631, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "responsive.php": { + "type": "-", + "size": 4837, + "lmtime": 1751610811000, + "modified": false + } + }, + "settings": { + "base": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "manager.php": { + "type": "-", + "size": 10579, + "lmtime": 1751610811000, + "modified": false + }, + "model.php": { + "type": "-", + "size": 1048, + "lmtime": 1751610811000, + "modified": false + } + }, + "general": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "manager.php": { + "type": "-", + "size": 5622, + "lmtime": 1751610811000, + "modified": false + }, + "model.php": { + "type": "-", + "size": 14781, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "manager.php": { + "type": "-", + "size": 5345, + "lmtime": 1751610811000, + "modified": false + }, + "page": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "manager.php": { + "type": "-", + "size": 8311, + "lmtime": 1751610811000, + "modified": false + }, + "model.php": { + "type": "-", + "size": 4842, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "utils": { + "exceptions.php": { + "type": "-", + "size": 981, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "creativeelements.php": { + "type": "-", + "size": 34366, + "lmtime": 1751610811000, + "modified": false + }, + "includes": { + "api.php": { + "type": "-", + "size": 8170, + "lmtime": 1751610811000, + "modified": false + }, + "autoloader.php": { + "type": "-", + "size": 8874, + "lmtime": 1751610811000, + "modified": false + }, + "base": { + "controls-stack.php": { + "type": "-", + "size": 60278, + "lmtime": 1751610811000, + "modified": false + }, + "element-base.php": { + "type": "-", + "size": 28133, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "skin-base.php": { + "type": "-", + "size": 9467, + "lmtime": 1751610811000, + "modified": false + }, + "widget-base.php": { + "type": "-", + "size": 24082, + "lmtime": 1751610811000, + "modified": false + }, + "widget-category-base.php": { + "type": "-", + "size": 7219, + "lmtime": 1751610811000, + "modified": false + }, + "widget-premium-base.php": { + "type": "-", + "size": 2324, + "lmtime": 1751610811000, + "modified": false + }, + "widget-product-base.php": { + "type": "-", + "size": 89442, + "lmtime": 1751610811000, + "modified": false + } + }, + "conditions.php": { + "type": "-", + "size": 3706, + "lmtime": 1751610811000, + "modified": false + }, + "controls": { + "animation.php": { + "type": "-", + "size": 6761, + "lmtime": 1751610811000, + "modified": false + }, + "base-data.php": { + "type": "-", + "size": 4316, + "lmtime": 1751610811000, + "modified": false + }, + "base-multiple.php": { + "type": "-", + "size": 2599, + "lmtime": 1751610811000, + "modified": false + }, + "base.php": { + "type": "-", + "size": 3483, + "lmtime": 1751610811000, + "modified": false + }, + "base-ui.php": { + "type": "-", + "size": 762, + "lmtime": 1751610811000, + "modified": false + }, + "base-units.php": { + "type": "-", + "size": 3327, + "lmtime": 1751610811000, + "modified": false + }, + "box-shadow.php": { + "type": "-", + "size": 4264, + "lmtime": 1751610811000, + "modified": false + }, + "button.php": { + "type": "-", + "size": 2236, + "lmtime": 1751610811000, + "modified": false + }, + "choose.php": { + "type": "-", + "size": 2874, + "lmtime": 1751610811000, + "modified": false + }, + "code.php": { + "type": "-", + "size": 2336, + "lmtime": 1751610811000, + "modified": false + }, + "color.php": { + "type": "-", + "size": 3384, + "lmtime": 1751610811000, + "modified": false + }, + "date-time.php": { + "type": "-", + "size": 2564, + "lmtime": 1751610811000, + "modified": false + }, + "dimensions.php": { + "type": "-", + "size": 5170, + "lmtime": 1751610811000, + "modified": false + }, + "divider.php": { + "type": "-", + "size": 1593, + "lmtime": 1751610811000, + "modified": false + }, + "font.php": { + "type": "-", + "size": 2932, + "lmtime": 1751610811000, + "modified": false + }, + "groups": { + "background.php": { + "type": "-", + "size": 23446, + "lmtime": 1751610811000, + "modified": false + }, + "base.php": { + "type": "-", + "size": 16309, + "lmtime": 1751610811000, + "modified": false + }, + "border.php": { + "type": "-", + "size": 3253, + "lmtime": 1751610811000, + "modified": false + }, + "box-shadow.php": { + "type": "-", + "size": 2989, + "lmtime": 1751610811000, + "modified": false + }, + "css-filter.php": { + "type": "-", + "size": 4877, + "lmtime": 1751610811000, + "modified": false + }, + "image-size.php": { + "type": "-", + "size": 9958, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "text-shadow.php": { + "type": "-", + "size": 2533, + "lmtime": 1751610811000, + "modified": false + }, + "text-stroke.php": { + "type": "-", + "size": 3366, + "lmtime": 1751610811000, + "modified": false + }, + "typography.php": { + "type": "-", + "size": 9118, + "lmtime": 1751610811000, + "modified": false + } + }, + "heading.php": { + "type": "-", + "size": 1762, + "lmtime": 1751610811000, + "modified": false + }, + "hidden.php": { + "type": "-", + "size": 1267, + "lmtime": 1751610811000, + "modified": false + }, + "hover-animation.php": { + "type": "-", + "size": 5002, + "lmtime": 1751610811000, + "modified": false + }, + "icon.php": { + "type": "-", + "size": 40292, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "media.php": { + "type": "-", + "size": 6551, + "lmtime": 1751610811000, + "modified": false + }, + "number.php": { + "type": "-", + "size": 2465, + "lmtime": 1751610811000, + "modified": false + }, + "popover-toggle.php": { + "type": "-", + "size": 3062, + "lmtime": 1751610811000, + "modified": false + }, + "raw-html.php": { + "type": "-", + "size": 1890, + "lmtime": 1751610811000, + "modified": false + }, + "repeater.php": { + "type": "-", + "size": 6035, + "lmtime": 1751610811000, + "modified": false + }, + "section.php": { + "type": "-", + "size": 2168, + "lmtime": 1751610811000, + "modified": false + }, + "select2.php": { + "type": "-", + "size": 3551, + "lmtime": 1751610811000, + "modified": false + }, + "select.php": { + "type": "-", + "size": 3450, + "lmtime": 1751610811000, + "modified": false + }, + "slider.php": { + "type": "-", + "size": 4349, + "lmtime": 1751610811000, + "modified": false + }, + "structure.php": { + "type": "-", + "size": 3823, + "lmtime": 1751610811000, + "modified": false + }, + "switcher.php": { + "type": "-", + "size": 2674, + "lmtime": 1751610811000, + "modified": false + }, + "tab.php": { + "type": "-", + "size": 1818, + "lmtime": 1751610811000, + "modified": false + }, + "tabs.php": { + "type": "-", + "size": 1690, + "lmtime": 1751610811000, + "modified": false + }, + "textarea.php": { + "type": "-", + "size": 2485, + "lmtime": 1751610811000, + "modified": false + }, + "text.php": { + "type": "-", + "size": 3026, + "lmtime": 1751610811000, + "modified": false + }, + "text-shadow.php": { + "type": "-", + "size": 4082, + "lmtime": 1751610811000, + "modified": false + }, + "url.php": { + "type": "-", + "size": 4677, + "lmtime": 1751610811000, + "modified": false + }, + "wysiwyg.php": { + "type": "-", + "size": 2165, + "lmtime": 1751610811000, + "modified": false + } + }, + "db.php": { + "type": "-", + "size": 15142, + "lmtime": 1751610811000, + "modified": false + }, + "editor.php": { + "type": "-", + "size": 32018, + "lmtime": 1751610811000, + "modified": false + }, + "editor-templates": { + "editor-wrapper.php": { + "type": "-", + "size": 2898, + "lmtime": 1751610811000, + "modified": false + }, + "global.php": { + "type": "-", + "size": 2387, + "lmtime": 1751610811000, + "modified": false + }, + "hotkeys.php": { + "type": "-", + "size": 7089, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "library-layout.php": { + "type": "-", + "size": 1428, + "lmtime": 1751610811000, + "modified": false + }, + "navigator.php": { + "type": "-", + "size": 2559, + "lmtime": 1751610811000, + "modified": false + }, + "panel-elements.php": { + "type": "-", + "size": 2190, + "lmtime": 1751610811000, + "modified": false + }, + "panel.php": { + "type": "-", + "size": 18492, + "lmtime": 1751610811000, + "modified": false + }, + "repeater.php": { + "type": "-", + "size": 1467, + "lmtime": 1751610811000, + "modified": false + }, + "templates.php": { + "type": "-", + "size": 16995, + "lmtime": 1751610811000, + "modified": false + } + }, + "elements": { + "column.php": { + "type": "-", + "size": 36961, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "repeater.php": { + "type": "-", + "size": 3235, + "lmtime": 1751610811000, + "modified": false + }, + "section.php": { + "type": "-", + "size": 79242, + "lmtime": 1751610811000, + "modified": false + } + }, + "embed.php": { + "type": "-", + "size": 6344, + "lmtime": 1751610811000, + "modified": false + }, + "fonts.php": { + "type": "-", + "size": 65350, + "lmtime": 1751610811000, + "modified": false + }, + "frontend.php": { + "type": "-", + "size": 27913, + "lmtime": 1751610811000, + "modified": false + }, + "heartbeat.php": { + "type": "-", + "size": 3200, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 501, + "lmtime": 1751610811000, + "modified": false + }, + "interfaces": { + "group-control.php": { + "type": "-", + "size": 634, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "scheme.php": { + "type": "-", + "size": 1659, + "lmtime": 1751610811000, + "modified": false + } + }, + "managers": { + "controls.php": { + "type": "-", + "size": 23359, + "lmtime": 1751610811000, + "modified": false + }, + "elements.php": { + "type": "-", + "size": 8906, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "schemes.php": { + "type": "-", + "size": 9338, + "lmtime": 1751610811000, + "modified": false + }, + "skins.php": { + "type": "-", + "size": 2920, + "lmtime": 1751610811000, + "modified": false + }, + "widgets.php": { + "type": "-", + "size": 12207, + "lmtime": 1751610811000, + "modified": false + } + }, + "plugin.php": { + "type": "-", + "size": 10564, + "lmtime": 1751610811000, + "modified": false + }, + "preview.php": { + "type": "-", + "size": 6759, + "lmtime": 1751610811000, + "modified": false + }, + "schemes": { + "base.php": { + "type": "-", + "size": 4929, + "lmtime": 1751610811000, + "modified": false + }, + "color.php": { + "type": "-", + "size": 8623, + "lmtime": 1751610811000, + "modified": false + }, + "color-picker.php": { + "type": "-", + "size": 6009, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "typography.php": { + "type": "-", + "size": 1891, + "lmtime": 1751610811000, + "modified": false + } + }, + "shapes.php": { + "type": "-", + "size": 7968, + "lmtime": 1751610811000, + "modified": false + }, + "stylesheet.php": { + "type": "-", + "size": 11881, + "lmtime": 1751610811000, + "modified": false + }, + "template-library": { + "classes": { + "class-import-images.php": { + "type": "-", + "size": 3257, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "manager.php": { + "type": "-", + "size": 18306, + "lmtime": 1751610811000, + "modified": false + }, + "sources": { + "base.php": { + "type": "-", + "size": 10231, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "local.php": { + "type": "-", + "size": 25814, + "lmtime": 1751610811000, + "modified": false + }, + "remote.php": { + "type": "-", + "size": 6404, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "traits": { + "carousel.php": { + "type": "-", + "size": 12591, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "nav.php": { + "type": "-", + "size": 31647, + "lmtime": 1751610811000, + "modified": false + } + }, + "user.php": { + "type": "-", + "size": 6075, + "lmtime": 1751610811000, + "modified": false + }, + "utils.php": { + "type": "-", + "size": 8285, + "lmtime": 1751610811000, + "modified": false + }, + "widgets": { + "accordion.php": { + "type": "-", + "size": 20047, + "lmtime": 1751610811000, + "modified": false + }, + "ajax-search.php": { + "type": "-", + "size": 50415, + "lmtime": 1751610811000, + "modified": false + }, + "alert.php": { + "type": "-", + "size": 11035, + "lmtime": 1751610811000, + "modified": false + }, + "animated-headline.php": { + "type": "-", + "size": 15412, + "lmtime": 1751610811000, + "modified": false + }, + "button.php": { + "type": "-", + "size": 16607, + "lmtime": 1751610811000, + "modified": false + }, + "call-to-action.php": { + "type": "-", + "size": 61164, + "lmtime": 1751610811000, + "modified": false + }, + "category-tree.php": { + "type": "-", + "size": 1352, + "lmtime": 1751610811000, + "modified": false + }, + "common.php": { + "type": "-", + "size": 48758, + "lmtime": 1751610811000, + "modified": false + }, + "contact-form.php": { + "type": "-", + "size": 47881, + "lmtime": 1751610811000, + "modified": false + }, + "countdown.php": { + "type": "-", + "size": 21465, + "lmtime": 1751610811000, + "modified": false + }, + "counter.php": { + "type": "-", + "size": 10271, + "lmtime": 1751610811000, + "modified": false + }, + "currency-selector.php": { + "type": "-", + "size": 8930, + "lmtime": 1751610811000, + "modified": false + }, + "divider.php": { + "type": "-", + "size": 7669, + "lmtime": 1751610811000, + "modified": false + }, + "email-subscription.php": { + "type": "-", + "size": 34099, + "lmtime": 1751610811000, + "modified": false + }, + "facebook-button.php": { + "type": "-", + "size": 5272, + "lmtime": 1751610811000, + "modified": false + }, + "facebook-page.php": { + "type": "-", + "size": 6210, + "lmtime": 1751610811000, + "modified": false + }, + "flip-box.php": { + "type": "-", + "size": 63566, + "lmtime": 1751610811000, + "modified": false + }, + "google-maps.php": { + "type": "-", + "size": 7654, + "lmtime": 1751610811000, + "modified": false + }, + "heading.php": { + "type": "-", + "size": 10577, + "lmtime": 1751610811000, + "modified": false + }, + "html.php": { + "type": "-", + "size": 2933, + "lmtime": 1751610811000, + "modified": false + }, + "icon-box.php": { + "type": "-", + "size": 23027, + "lmtime": 1751610811000, + "modified": false + }, + "icon-list.php": { + "type": "-", + "size": 22431, + "lmtime": 1751610811000, + "modified": false + }, + "icon.php": { + "type": "-", + "size": 14038, + "lmtime": 1751610811000, + "modified": false + }, + "image-box.php": { + "type": "-", + "size": 21107, + "lmtime": 1751610811000, + "modified": false + }, + "image-carousel.php": { + "type": "-", + "size": 15843, + "lmtime": 1751610811000, + "modified": false + }, + "image-gallery.php": { + "type": "-", + "size": 18138, + "lmtime": 1751610811000, + "modified": false + }, + "image-hotspot.php": { + "type": "-", + "size": 27235, + "lmtime": 1751610811000, + "modified": false + }, + "image.php": { + "type": "-", + "size": 23144, + "lmtime": 1751610811000, + "modified": false + }, + "image-slider.php": { + "type": "-", + "size": 7512, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "language-selector.php": { + "type": "-", + "size": 8744, + "lmtime": 1751610811000, + "modified": false + }, + "layer-slider.php": { + "type": "-", + "size": 9590, + "lmtime": 1751610811000, + "modified": false + }, + "menu-anchor.php": { + "type": "-", + "size": 3906, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 7057, + "lmtime": 1751610811000, + "modified": false + }, + "nav-menu.php": { + "type": "-", + "size": 22188, + "lmtime": 1751610811000, + "modified": false + }, + "product-box.php": { + "type": "-", + "size": 9175, + "lmtime": 1751610811000, + "modified": false + }, + "product-carousel.php": { + "type": "-", + "size": 10510, + "lmtime": 1751610811000, + "modified": false + }, + "product-grid.php": { + "type": "-", + "size": 10451, + "lmtime": 1751610811000, + "modified": false + }, + "progress.php": { + "type": "-", + "size": 10439, + "lmtime": 1751610811000, + "modified": false + }, + "shopping-cart.php": { + "type": "-", + "size": 51230, + "lmtime": 1751610811000, + "modified": false + }, + "shortcode.php": { + "type": "-", + "size": 3270, + "lmtime": 1751610811000, + "modified": false + }, + "sign-in.php": { + "type": "-", + "size": 13607, + "lmtime": 1751610811000, + "modified": false + }, + "site-logo.php": { + "type": "-", + "size": 3719, + "lmtime": 1751610811000, + "modified": false + }, + "site-title.php": { + "type": "-", + "size": 1543, + "lmtime": 1751610811000, + "modified": false + }, + "social-icons.php": { + "type": "-", + "size": 16326, + "lmtime": 1751610811000, + "modified": false + }, + "spacer.php": { + "type": "-", + "size": 4223, + "lmtime": 1751610811000, + "modified": false + }, + "star-rating.php": { + "type": "-", + "size": 15147, + "lmtime": 1751610811000, + "modified": false + }, + "tabs.php": { + "type": "-", + "size": 15661, + "lmtime": 1751610811000, + "modified": false + }, + "testimonial-carousel.php": { + "type": "-", + "size": 21045, + "lmtime": 1751610811000, + "modified": false + }, + "testimonial.php": { + "type": "-", + "size": 20658, + "lmtime": 1751610811000, + "modified": false + }, + "text-editor.php": { + "type": "-", + "size": 14373, + "lmtime": 1751610811000, + "modified": false + }, + "text-path.php": { + "type": "-", + "size": 22366, + "lmtime": 1751610811000, + "modified": false + }, + "toggle.php": { + "type": "-", + "size": 20355, + "lmtime": 1751610811000, + "modified": false + }, + "trustedshops-reviews.php": { + "type": "-", + "size": 17492, + "lmtime": 1751610811000, + "modified": false + }, + "video.php": { + "type": "-", + "size": 32959, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "index.php": { + "type": "-", + "size": 498, + "lmtime": 1751610811000, + "modified": false + }, + "logo.png": { + "type": "-", + "size": 4633, + "lmtime": 1751610811000, + "modified": false + }, + "logo.webp": { + "type": "-", + "size": 846, + "lmtime": 1751610811000, + "modified": false + }, + "modifications.txt": { + "type": "-", + "size": 353, + "lmtime": 1751610811000, + "modified": false + }, + "modules": { + "catalog": { + "controls": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "select-category.php": { + "type": "-", + "size": 1307, + "lmtime": 1751610811000, + "modified": false + }, + "select-manufacturer.php": { + "type": "-", + "size": 1390, + "lmtime": 1751610811000, + "modified": false + }, + "select-supplier.php": { + "type": "-", + "size": 1330, + "lmtime": 1751610811000, + "modified": false + } + }, + "files": { + "css": { + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + }, + "product-miniature.php": { + "type": "-", + "size": 1608, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 20047, + "lmtime": 1751610811000, + "modified": false + }, + "tags": { + "cart-rule-date-time.php": { + "type": "-", + "size": 2963, + "lmtime": 1751610811000, + "modified": false + }, + "category-name.php": { + "type": "-", + "size": 994, + "lmtime": 1751610811000, + "modified": false + }, + "category-url.php": { + "type": "-", + "size": 1283, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "manufacturer-image.php": { + "type": "-", + "size": 2430, + "lmtime": 1751610811000, + "modified": false + }, + "manufacturer-name.php": { + "type": "-", + "size": 1341, + "lmtime": 1751610811000, + "modified": false + }, + "manufacturer-url.php": { + "type": "-", + "size": 1306, + "lmtime": 1751610811000, + "modified": false + }, + "product-add-to-cart.php": { + "type": "-", + "size": 1631, + "lmtime": 1751610811000, + "modified": false + }, + "product-availability-date-time.php": { + "type": "-", + "size": 1156, + "lmtime": 1751610811000, + "modified": false + }, + "product-buy-now.php": { + "type": "-", + "size": 570, + "lmtime": 1751610811000, + "modified": false + }, + "product-description-short.php": { + "type": "-", + "size": 1076, + "lmtime": 1751610811000, + "modified": false + }, + "product-image.php": { + "type": "-", + "size": 2933, + "lmtime": 1751610811000, + "modified": false + }, + "product-meta.php": { + "type": "-", + "size": 5551, + "lmtime": 1751610811000, + "modified": false + }, + "product-name.php": { + "type": "-", + "size": 973, + "lmtime": 1751610811000, + "modified": false + }, + "product-price.php": { + "type": "-", + "size": 4364, + "lmtime": 1751610811000, + "modified": false + }, + "product-quick-view.php": { + "type": "-", + "size": 1460, + "lmtime": 1751610811000, + "modified": false + }, + "product-rating.php": { + "type": "-", + "size": 2643, + "lmtime": 1751610811000, + "modified": false + }, + "product-url.php": { + "type": "-", + "size": 1025, + "lmtime": 1751610811000, + "modified": false + }, + "specific-price-rule-date-time.php": { + "type": "-", + "size": 2851, + "lmtime": 1751610811000, + "modified": false + } + }, + "widgets": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "manufacturer-image.php": { + "type": "-", + "size": 3852, + "lmtime": 1751610811000, + "modified": false + }, + "product-add-to-cart.php": { + "type": "-", + "size": 8534, + "lmtime": 1751610811000, + "modified": false + }, + "product-add-to-wishlist.php": { + "type": "-", + "size": 4739, + "lmtime": 1751610811000, + "modified": false + }, + "product-attachments.php": { + "type": "-", + "size": 7957, + "lmtime": 1751610811000, + "modified": false + }, + "product-badges.php": { + "type": "-", + "size": 17132, + "lmtime": 1751610811000, + "modified": false + }, + "product-block.php": { + "type": "-", + "size": 3928, + "lmtime": 1751610811000, + "modified": false + }, + "product-brand-image.php": { + "type": "-", + "size": 540, + "lmtime": 1751610811000, + "modified": false + }, + "product-description.php": { + "type": "-", + "size": 3508, + "lmtime": 1751610811000, + "modified": false + }, + "product-description-short.php": { + "type": "-", + "size": 4642, + "lmtime": 1751610811000, + "modified": false + }, + "product-features.php": { + "type": "-", + "size": 12915, + "lmtime": 1751610811000, + "modified": false + }, + "product-image.php": { + "type": "-", + "size": 7351, + "lmtime": 1751610811000, + "modified": false + }, + "product-images.php": { + "type": "-", + "size": 37016, + "lmtime": 1751610811000, + "modified": false + }, + "product-meta.php": { + "type": "-", + "size": 25039, + "lmtime": 1751610811000, + "modified": false + }, + "product-miniature-add-to-cart.php": { + "type": "-", + "size": 8815, + "lmtime": 1751610811000, + "modified": false + }, + "product-miniature-box.php": { + "type": "-", + "size": 10079, + "lmtime": 1751610811000, + "modified": false + }, + "product-miniature-image.php": { + "type": "-", + "size": 2762, + "lmtime": 1751610811000, + "modified": false + }, + "product-miniature-name.php": { + "type": "-", + "size": 1105, + "lmtime": 1751610811000, + "modified": false + }, + "product-miniature-price.php": { + "type": "-", + "size": 5333, + "lmtime": 1751610811000, + "modified": false + }, + "product-miniature-rating.php": { + "type": "-", + "size": 3614, + "lmtime": 1751610811000, + "modified": false + }, + "product-miniature-variants.php": { + "type": "-", + "size": 11290, + "lmtime": 1751610811000, + "modified": false + }, + "product-name.php": { + "type": "-", + "size": 3901, + "lmtime": 1751610811000, + "modified": false + }, + "product-price.php": { + "type": "-", + "size": 21708, + "lmtime": 1751610811000, + "modified": false + }, + "product-quantity.php": { + "type": "-", + "size": 24439, + "lmtime": 1751610811000, + "modified": false + }, + "product-rating.php": { + "type": "-", + "size": 20966, + "lmtime": 1751610811000, + "modified": false + }, + "product-sale-countdown.php": { + "type": "-", + "size": 2419, + "lmtime": 1751610811000, + "modified": false + }, + "product-share.php": { + "type": "-", + "size": 3793, + "lmtime": 1751610811000, + "modified": false + }, + "product-stock.php": { + "type": "-", + "size": 13898, + "lmtime": 1751610811000, + "modified": false + }, + "product-variants.php": { + "type": "-", + "size": 35683, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "creative": { + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 5795, + "lmtime": 1751610811000, + "modified": false + } + }, + "custom-css": { + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 2239, + "lmtime": 1751610811000, + "modified": false + } + }, + "dynamic-tags": { + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 5134, + "lmtime": 1751610811000, + "modified": false + }, + "tags": { + "carousel.php": { + "type": "-", + "size": 2515, + "lmtime": 1751610811000, + "modified": false + }, + "contact-url.php": { + "type": "-", + "size": 14483, + "lmtime": 1751610811000, + "modified": false + }, + "current-date-time.php": { + "type": "-", + "size": 3777, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "internal-url.php": { + "type": "-", + "size": 5928, + "lmtime": 1751610811000, + "modified": false + }, + "lightbox.php": { + "type": "-", + "size": 3536, + "lmtime": 1751610811000, + "modified": false + }, + "page-title.php": { + "type": "-", + "size": 1126, + "lmtime": 1751610811000, + "modified": false + }, + "request-parameter.php": { + "type": "-", + "size": 2258, + "lmtime": 1751610811000, + "modified": false + }, + "shortcode.php": { + "type": "-", + "size": 1415, + "lmtime": 1751610811000, + "modified": false + }, + "site-contact.php": { + "type": "-", + "size": 2115, + "lmtime": 1751610811000, + "modified": false + }, + "site-logo.php": { + "type": "-", + "size": 1144, + "lmtime": 1751610811000, + "modified": false + }, + "site-title.php": { + "type": "-", + "size": 856, + "lmtime": 1751610811000, + "modified": false + }, + "site-url.php": { + "type": "-", + "size": 864, + "lmtime": 1751610811000, + "modified": false + }, + "user-info.php": { + "type": "-", + "size": 2431, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "fonts-manager": { + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 3631, + "lmtime": 1751610811000, + "modified": false + } + }, + "history": { + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 2570, + "lmtime": 1751610811000, + "modified": false + }, + "revisions-manager.php": { + "type": "-", + "size": 12809, + "lmtime": 1751610811000, + "modified": false + }, + "views": { + "history-panel-template.php": { + "type": "-", + "size": 1984, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "revisions-panel-template.php": { + "type": "-", + "size": 3314, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "index.php": { + "type": "-", + "size": 501, + "lmtime": 1751610811000, + "modified": false + }, + "library": { + "documents": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "library-document.php": { + "type": "-", + "size": 1805, + "lmtime": 1751610811000, + "modified": false + }, + "not-supported.php": { + "type": "-", + "size": 1967, + "lmtime": 1751610811000, + "modified": false + }, + "page.php": { + "type": "-", + "size": 2231, + "lmtime": 1751610811000, + "modified": false + }, + "section.php": { + "type": "-", + "size": 1163, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 1470, + "lmtime": 1751610811000, + "modified": false + } + }, + "motion-effects": { + "controls-group.php": { + "type": "-", + "size": 19631, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 17492, + "lmtime": 1751610811000, + "modified": false + } + }, + "page-templates": { + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 9445, + "lmtime": 1751610811000, + "modified": false + } + }, + "visibility": { + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "module.php": { + "type": "-", + "size": 7017, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "override": { + "classes": { + "Category.php": { + "type": "-", + "size": 936, + "lmtime": 1751610811000, + "modified": false + }, + "CMSCategory.php": { + "type": "-", + "size": 891, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "Manufacturer.php": { + "type": "-", + "size": 914, + "lmtime": 1751610811000, + "modified": false + }, + "Supplier.php": { + "type": "-", + "size": 894, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 501, + "lmtime": 1751610811000, + "modified": false + } + }, + "translations": { + "de.php": { + "type": "-", + "size": 162133, + "lmtime": 1751610811000, + "modified": false + }, + "es.php": { + "type": "-", + "size": 162658, + "lmtime": 1751610811000, + "modified": false + }, + "fr.php": { + "type": "-", + "size": 163570, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 501, + "lmtime": 1751610811000, + "modified": false + }, + "it.php": { + "type": "-", + "size": 162191, + "lmtime": 1751610811000, + "modified": false + }, + "pl.php": { + "type": "-", + "size": 153134, + "lmtime": 1751610811000, + "modified": false + } + }, + "upgrade": { + "index.php": { + "type": "-", + "size": 501, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-1.0.0.php": { + "type": "-", + "size": 1441, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-1.4.10.php": { + "type": "-", + "size": 1697, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-2.5.0.php": { + "type": "-", + "size": 1678, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-2.5.10.php": { + "type": "-", + "size": 661, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-2.5.11.php": { + "type": "-", + "size": 538, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-2.5.2.php": { + "type": "-", + "size": 3103, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-2.5.5.php": { + "type": "-", + "size": 2429, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-2.5.7.php": { + "type": "-", + "size": 1122, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-2.5.8.php": { + "type": "-", + "size": 440, + "lmtime": 1751610811000, + "modified": false + }, + "upgrade-2.5.9.php": { + "type": "-", + "size": 804, + "lmtime": 1751610811000, + "modified": false + } + }, + "views": { + "css": { + "admin.css": { + "type": "-", + "size": 3475, + "lmtime": 1751610811000, + "modified": false + }, + "backoffice.css": { + "type": "-", + "size": 4139, + "lmtime": 1751610811000, + "modified": false + }, + "ce": { + "1-global.css": { + "type": "-", + "size": 8417, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "common.css": { + "type": "-", + "size": 13388, + "lmtime": 1751610811000, + "modified": false + }, + "common.min.css": { + "type": "-", + "size": 10163, + "lmtime": 1751610811000, + "modified": false + }, + "common-rtl.css": { + "type": "-", + "size": 13391, + "lmtime": 1751610811000, + "modified": false + }, + "common-rtl.min.css": { + "type": "-", + "size": 10165, + "lmtime": 1751610811000, + "modified": false + }, + "custom-fonts.css": { + "type": "-", + "size": 10015, + "lmtime": 1751610811000, + "modified": false + }, + "editor-ce.css": { + "type": "-", + "size": 8879, + "lmtime": 1751610811000, + "modified": false + }, + "editor.css": { + "type": "-", + "size": 144184, + "lmtime": 1751610811000, + "modified": false + }, + "editor.min.css": { + "type": "-", + "size": 113623, + "lmtime": 1751610811000, + "modified": false + }, + "editor-preview.css": { + "type": "-", + "size": 86745, + "lmtime": 1751610811000, + "modified": false + }, + "editor-preview.min.css": { + "type": "-", + "size": 69651, + "lmtime": 1751610811000, + "modified": false + }, + "editor-preview-rtl.css": { + "type": "-", + "size": 88094, + "lmtime": 1751610811000, + "modified": false + }, + "editor-preview-rtl.min.css": { + "type": "-", + "size": 70847, + "lmtime": 1751610811000, + "modified": false + }, + "editor-rtl.css": { + "type": "-", + "size": 144552, + "lmtime": 1751610811000, + "modified": false + }, + "editor-rtl.min.css": { + "type": "-", + "size": 113865, + "lmtime": 1751610811000, + "modified": false + }, + "frontend.css": { + "type": "-", + "size": 203968, + "lmtime": 1751610811000, + "modified": false + }, + "frontend-edit.css": { + "type": "-", + "size": 1328, + "lmtime": 1751610811000, + "modified": false + }, + "frontend.min.css": { + "type": "-", + "size": 169062, + "lmtime": 1751610811000, + "modified": false + }, + "frontend-msie.css": { + "type": "-", + "size": 3482, + "lmtime": 1751610811000, + "modified": false + }, + "frontend-msie.min.css": { + "type": "-", + "size": 2945, + "lmtime": 1751610811000, + "modified": false + }, + "frontend-rtl.css": { + "type": "-", + "size": 204231, + "lmtime": 1751610811000, + "modified": false + }, + "frontend-rtl.min.css": { + "type": "-", + "size": 168748, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "media.css": { + "type": "-", + "size": 643, + "lmtime": 1751610811000, + "modified": false + }, + "migrate.css": { + "type": "-", + "size": 1349, + "lmtime": 1751610811000, + "modified": false + }, + "settings.css": { + "type": "-", + "size": 102, + "lmtime": 1751610811000, + "modified": false + } + }, + "fonts": { + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + } + }, + "img": { + "ajax-loader.gif": { + "type": "-", + "size": 4178, + "lmtime": 1751610811000, + "modified": false + }, + "blur.png": { + "type": "-", + "size": 11597, + "lmtime": 1751610811000, + "modified": false + }, + "blur.webp": { + "type": "-", + "size": 9040, + "lmtime": 1751610811000, + "modified": false + }, + "contrast.png": { + "type": "-", + "size": 1218, + "lmtime": 1751610811000, + "modified": false + }, + "contrast.webp": { + "type": "-", + "size": 186, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "placeholder.png": { + "type": "-", + "size": 11735, + "lmtime": 1751610811000, + "modified": false + }, + "placeholder.webp": { + "type": "-", + "size": 4804, + "lmtime": 1751610811000, + "modified": false + }, + "shapes": { + "arrow-negative.svg": { + "type": "-", + "size": 182, + "lmtime": 1751610811000, + "modified": false + }, + "arrow.svg": { + "type": "-", + "size": 164, + "lmtime": 1751610811000, + "modified": false + }, + "book-negative.svg": { + "type": "-", + "size": 318, + "lmtime": 1751610811000, + "modified": false + }, + "book.svg": { + "type": "-", + "size": 290, + "lmtime": 1751610811000, + "modified": false + }, + "clouds-negative.svg": { + "type": "-", + "size": 1255, + "lmtime": 1751610811000, + "modified": false + }, + "clouds.svg": { + "type": "-", + "size": 1196, + "lmtime": 1751610811000, + "modified": false + }, + "curve-asymmetrical-negative.svg": { + "type": "-", + "size": 217, + "lmtime": 1751610811000, + "modified": false + }, + "curve-asymmetrical.svg": { + "type": "-", + "size": 236, + "lmtime": 1751610811000, + "modified": false + }, + "curve-negative.svg": { + "type": "-", + "size": 215, + "lmtime": 1751610811000, + "modified": false + }, + "curve.svg": { + "type": "-", + "size": 210, + "lmtime": 1751610811000, + "modified": false + }, + "drops-negative.svg": { + "type": "-", + "size": 2270, + "lmtime": 1751610811000, + "modified": false + }, + "drops.svg": { + "type": "-", + "size": 2345, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "mountains.svg": { + "type": "-", + "size": 784, + "lmtime": 1751610811000, + "modified": false + }, + "opacity-fan.svg": { + "type": "-", + "size": 493, + "lmtime": 1751610811000, + "modified": false + }, + "opacity-tilt.svg": { + "type": "-", + "size": 358, + "lmtime": 1751610811000, + "modified": false + }, + "pyramids-negative.svg": { + "type": "-", + "size": 191, + "lmtime": 1751610811000, + "modified": false + }, + "pyramids.svg": { + "type": "-", + "size": 192, + "lmtime": 1751610811000, + "modified": false + }, + "split-negative.svg": { + "type": "-", + "size": 219, + "lmtime": 1751610811000, + "modified": false + }, + "split.svg": { + "type": "-", + "size": 244, + "lmtime": 1751610811000, + "modified": false + }, + "tilt.svg": { + "type": "-", + "size": 162, + "lmtime": 1751610811000, + "modified": false + }, + "triangle-asymmetrical-negative.svg": { + "type": "-", + "size": 180, + "lmtime": 1751610811000, + "modified": false + }, + "triangle-asymmetrical.svg": { + "type": "-", + "size": 172, + "lmtime": 1751610811000, + "modified": false + }, + "triangle-negative.svg": { + "type": "-", + "size": 180, + "lmtime": 1751610811000, + "modified": false + }, + "triangle.svg": { + "type": "-", + "size": 178, + "lmtime": 1751610811000, + "modified": false + }, + "wave-brush.svg": { + "type": "-", + "size": 3131, + "lmtime": 1751610811000, + "modified": false + }, + "waves-negative.svg": { + "type": "-", + "size": 426, + "lmtime": 1751610811000, + "modified": false + }, + "waves-pattern.svg": { + "type": "-", + "size": 7299, + "lmtime": 1751610811000, + "modified": false + }, + "waves.svg": { + "type": "-", + "size": 423, + "lmtime": 1751610811000, + "modified": false + }, + "zigzag.svg": { + "type": "-", + "size": 2830, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "index.php": { + "type": "-", + "size": 501, + "lmtime": 1751610811000, + "modified": false + }, + "js": { + "admin.js": { + "type": "-", + "size": 8604, + "lmtime": 1751610811000, + "modified": false + }, + "backoffice.js": { + "type": "-", + "size": 475, + "lmtime": 1751610811000, + "modified": false + }, + "common.js": { + "type": "-", + "size": 26825, + "lmtime": 1751610811000, + "modified": false + }, + "common.min.js": { + "type": "-", + "size": 11665, + "lmtime": 1751610811000, + "modified": false + }, + "common-modules.js": { + "type": "-", + "size": 25099, + "lmtime": 1751610811000, + "modified": false + }, + "common-modules.min.js": { + "type": "-", + "size": 11537, + "lmtime": 1751610811000, + "modified": false + }, + "custom-fonts.js": { + "type": "-", + "size": 18379, + "lmtime": 1751610811000, + "modified": false + }, + "editor-ce.js": { + "type": "-", + "size": 22412, + "lmtime": 1751610811000, + "modified": false + }, + "editor.js": { + "type": "-", + "size": 484999, + "lmtime": 1751610811000, + "modified": false + }, + "editor.min.js": { + "type": "-", + "size": 264812, + "lmtime": 1751610811000, + "modified": false + }, + "editor-modules.js": { + "type": "-", + "size": 26623, + "lmtime": 1751610811000, + "modified": false + }, + "editor-modules.min.js": { + "type": "-", + "size": 12887, + "lmtime": 1751610811000, + "modified": false + }, + "editor-preview.js": { + "type": "-", + "size": 300, + "lmtime": 1751610811000, + "modified": false + }, + "frontend-edit.js": { + "type": "-", + "size": 609, + "lmtime": 1751610811000, + "modified": false + }, + "frontend.js": { + "type": "-", + "size": 213702, + "lmtime": 1751610811000, + "modified": false + }, + "frontend.min.js": { + "type": "-", + "size": 213467, + "lmtime": 1751610811000, + "modified": false + }, + "frontend-modules.js": { + "type": "-", + "size": 24294, + "lmtime": 1751610811000, + "modified": false + }, + "frontend-modules.min.js": { + "type": "-", + "size": 10949, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "migrate.js": { + "type": "-", + "size": 2675, + "lmtime": 1751610811000, + "modified": false + }, + "settings.js": { + "type": "-", + "size": 2343, + "lmtime": 1751610811000, + "modified": false + } + }, + "lib": { + "animations": { + "animate.css": { + "type": "-", + "size": 14166, + "lmtime": 1751610811000, + "modified": false + }, + "animations.css": { + "type": "-", + "size": 24387, + "lmtime": 1751610811000, + "modified": false + }, + "animations.min.css": { + "type": "-", + "size": 18274, + "lmtime": 1751610811000, + "modified": false + }, + "hover.css": { + "type": "-", + "size": 11025, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "backbone": { + "backbone.marionette.js": { + "type": "-", + "size": 126357, + "lmtime": 1751610811000, + "modified": false + }, + "backbone.marionette.min.js": { + "type": "-", + "size": 45082, + "lmtime": 1751610811000, + "modified": false + }, + "backbone.min.js": { + "type": "-", + "size": 24968, + "lmtime": 1751610811000, + "modified": false + }, + "backbone.radio.js": { + "type": "-", + "size": 10714, + "lmtime": 1751610811000, + "modified": false + }, + "backbone.radio.min.js": { + "type": "-", + "size": 3754, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "ceicons": { + "ceicons.css": { + "type": "-", + "size": 3148, + "lmtime": 1751610811000, + "modified": false + }, + "ceicons.min.css": { + "type": "-", + "size": 2488, + "lmtime": 1751610811000, + "modified": false + }, + "fonts": { + "ceicons.svg": { + "type": "-", + "size": 30232, + "lmtime": 1751610811000, + "modified": false + }, + "ceicons.woff": { + "type": "-", + "size": 5796, + "lmtime": 1751610811000, + "modified": false + }, + "ceicons.woff2": { + "type": "-", + "size": 4740, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "dialog": { + "dialog.js": { + "type": "-", + "size": 20946, + "lmtime": 1751610811000, + "modified": false + }, + "dialog.min.js": { + "type": "-", + "size": 10570, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "eicons": { + "css": { + "elementor-icons.css": { + "type": "-", + "size": 15365, + "lmtime": 1751610811000, + "modified": false + }, + "elementor-icons.min.css": { + "type": "-", + "size": 11963, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + } + }, + "fonts": { + "eicons.svg": { + "type": "-", + "size": 201666, + "lmtime": 1751610811000, + "modified": false + }, + "eicons.woff": { + "type": "-", + "size": 47748, + "lmtime": 1751610811000, + "modified": false + }, + "eicons.woff2": { + "type": "-", + "size": 39472, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "e-select2": { + "css": { + "e-select2.css": { + "type": "-", + "size": 17976, + "lmtime": 1751610811000, + "modified": false + }, + "e-select2.min.css": { + "type": "-", + "size": 14773, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "js": { + "e-select2.full.js": { + "type": "-", + "size": 154512, + "lmtime": 1751610811000, + "modified": false + }, + "e-select2.full.min.js": { + "type": "-", + "size": 81877, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "filemanager": { + "config.php": { + "type": "-", + "size": 1369, + "lmtime": 1751610811000, + "modified": false + }, + ".htaccess": { + "type": "-", + "size": 260, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "flatpickr": { + "flatpickr.css": { + "type": "-", + "size": 22475, + "lmtime": 1751610811000, + "modified": false + }, + "flatpickr.js": { + "type": "-", + "size": 77084, + "lmtime": 1751610811000, + "modified": false + }, + "flatpickr.min.css": { + "type": "-", + "size": 17234, + "lmtime": 1751610811000, + "modified": false + }, + "flatpickr.min.js": { + "type": "-", + "size": 43585, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "font-awesome": { + "css": { + "font-awesome.css": { + "type": "-", + "size": 38197, + "lmtime": 1751610811000, + "modified": false + }, + "font-awesome.min.css": { + "type": "-", + "size": 29691, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + } + }, + "fonts": { + "fontawesome-webfont.woff": { + "type": "-", + "size": 98024, + "lmtime": 1751610811000, + "modified": false + }, + "fontawesome-webfont.woff2": { + "type": "-", + "size": 77160, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "heartbeat": { + "heartbeat.js": { + "type": "-", + "size": 23653, + "lmtime": 1751610811000, + "modified": false + }, + "heartbeat.min.js": { + "type": "-", + "size": 5759, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "imagesloaded": { + "imagesloaded.js": { + "type": "-", + "size": 12770, + "lmtime": 1751610811000, + "modified": false + }, + "imagesloaded.min.js": { + "type": "-", + "size": 7119, + "lmtime": 1751610811000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610811000, + "modified": false + }, + "inline-editor": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "js": { + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610811000, + "modified": false + }, + "inline-editor.js": { + "type": "-", + "size": 33487, + "lmtime": 1751610811000, + "modified": false + }, + "inline-editor.min.js": { + "type": "-", + "size": 17437, + "lmtime": 1751610811000, + "modified": false + } + } + }, + "iris": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610811000, + "modified": false + }, + "iris.js": { + "type": "-", + "size": 47548, + "lmtime": 1751610812000, + "modified": false + }, + "iris.min.js": { + "type": "-", + "size": 23611, + "lmtime": 1751610812000, + "modified": false + } + }, + "jquery": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "jquery.js": { + "type": "-", + "size": 97166, + "lmtime": 1751610812000, + "modified": false + }, + "jquery-ui.min.js": { + "type": "-", + "size": 108653, + "lmtime": 1751610812000, + "modified": false + } + }, + "jquery-easing": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "jquery-easing.js": { + "type": "-", + "size": 5012, + "lmtime": 1751610812000, + "modified": false + }, + "jquery-easing.min.js": { + "type": "-", + "size": 3315, + "lmtime": 1751610812000, + "modified": false + } + }, + "jquery-hover-intent": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "jquery-hover-intent.js": { + "type": "-", + "size": 2174, + "lmtime": 1751610812000, + "modified": false + }, + "jquery-hover-intent.min.js": { + "type": "-", + "size": 1030, + "lmtime": 1751610812000, + "modified": false + } + }, + "jquery-numerator": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "jquery-numerator.js": { + "type": "-", + "size": 3529, + "lmtime": 1751610812000, + "modified": false + }, + "jquery-numerator.min.js": { + "type": "-", + "size": 1801, + "lmtime": 1751610812000, + "modified": false + } + }, + "material-icons": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "material-icons.css": { + "type": "-", + "size": 756, + "lmtime": 1751610812000, + "modified": false + }, + "material-icons.woff": { + "type": "-", + "size": 57620, + "lmtime": 1751610812000, + "modified": false + }, + "material-icons.woff2": { + "type": "-", + "size": 44300, + "lmtime": 1751610812000, + "modified": false + } + }, + "nouislider": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "nouislider.js": { + "type": "-", + "size": 89950, + "lmtime": 1751610812000, + "modified": false + }, + "nouislider.min.js": { + "type": "-", + "size": 23001, + "lmtime": 1751610812000, + "modified": false + } + }, + "nprogress": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "nprogress.js": { + "type": "-", + "size": 12041, + "lmtime": 1751610812000, + "modified": false + }, + "nprogress.min.js": { + "type": "-", + "size": 5999, + "lmtime": 1751610812000, + "modified": false + } + }, + "perfect-scrollbar": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "js": { + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610812000, + "modified": false + }, + "perfect-scrollbar.js": { + "type": "-", + "size": 36645, + "lmtime": 1751610812000, + "modified": false + }, + "perfect-scrollbar.min.js": { + "type": "-", + "size": 18296, + "lmtime": 1751610812000, + "modified": false + } + } + }, + "slick": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "slick.js": { + "type": "-", + "size": 72065, + "lmtime": 1751610812000, + "modified": false + }, + "slick.min.js": { + "type": "-", + "size": 45550, + "lmtime": 1751610812000, + "modified": false + } + }, + "smartmenus": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "jquery.smartmenus.js": { + "type": "-", + "size": 46509, + "lmtime": 1751610812000, + "modified": false + }, + "jquery.smartmenus.min.js": { + "type": "-", + "size": 25204, + "lmtime": 1751610812000, + "modified": false + } + }, + "swiper": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "swiper.js": { + "type": "-", + "size": 282945, + "lmtime": 1751610812000, + "modified": false + }, + "swiper.min.js": { + "type": "-", + "size": 132460, + "lmtime": 1751610812000, + "modified": false + } + }, + "tinymce": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "ps-theme.css": { + "type": "-", + "size": 27303, + "lmtime": 1751610812000, + "modified": false + }, + "ps-theme.min.css": { + "type": "-", + "size": 19987, + "lmtime": 1751610812000, + "modified": false + }, + "tinymce.inc.js": { + "type": "-", + "size": 2929, + "lmtime": 1751610812000, + "modified": false + } + }, + "tipsy": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "tipsy.js": { + "type": "-", + "size": 8070, + "lmtime": 1751610812000, + "modified": false + }, + "tipsy.min.js": { + "type": "-", + "size": 4987, + "lmtime": 1751610812000, + "modified": false + } + }, + "underscore": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "underscore.min.js": { + "type": "-", + "size": 16397, + "lmtime": 1751610812000, + "modified": false + } + }, + "waypoints": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "waypoints-for-editor.js": { + "type": "-", + "size": 161, + "lmtime": 1751610812000, + "modified": false + }, + "waypoints.js": { + "type": "-", + "size": 18625, + "lmtime": 1751610812000, + "modified": false + }, + "waypoints.min.js": { + "type": "-", + "size": 12198, + "lmtime": 1751610812000, + "modified": false + } + }, + "wp-color-picker": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "wp-color-picker-alpha.js": { + "type": "-", + "size": 14969, + "lmtime": 1751610812000, + "modified": false + }, + "wp-color-picker-alpha.min.js": { + "type": "-", + "size": 6981, + "lmtime": 1751610812000, + "modified": false + }, + "wp-color-picker.min.css": { + "type": "-", + "size": 2757, + "lmtime": 1751610812000, + "modified": false + }, + "wp-color-picker.min.js": { + "type": "-", + "size": 3521, + "lmtime": 1751610812000, + "modified": false + }, + "wp-color-picker-rtl.min.css": { + "type": "-", + "size": 2760, + "lmtime": 1751610812000, + "modified": false + } + } + }, + "templates": { + "admin": { + "admin.tpl": { + "type": "-", + "size": 8739, + "lmtime": 1751610812000, + "modified": false + }, + "ce_content": { + "helpers": { + "form": { + "form.tpl": { + "type": "-", + "size": 2204, + "lmtime": 1751610812000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 336, + "lmtime": 1751610812000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 333, + "lmtime": 1751610812000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610812000, + "modified": false + } + }, + "ce_fonts": { + "helpers": { + "index.php": { + "type": "-", + "size": 333, + "lmtime": 1751610812000, + "modified": false + }, + "list": { + "index.php": { + "type": "-", + "size": 336, + "lmtime": 1751610812000, + "modified": false + }, + "list_content.tpl": { + "type": "-", + "size": 580, + "lmtime": 1751610812000, + "modified": false + } + } + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610812000, + "modified": false + } + }, + "ce_settings": { + "helpers": { + "index.php": { + "type": "-", + "size": 333, + "lmtime": 1751610812000, + "modified": false + }, + "options": { + "index.php": { + "type": "-", + "size": 336, + "lmtime": 1751610812000, + "modified": false + }, + "options.tpl": { + "type": "-", + "size": 1008, + "lmtime": 1751610812000, + "modified": false + } + } + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610812000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + } + }, + "front": { + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + }, + "preview.tpl": { + "type": "-", + "size": 368, + "lmtime": 1751610812000, + "modified": false + }, + "theme": { + "catalog": { + "index.php": { + "type": "-", + "size": 333, + "lmtime": 1751610812000, + "modified": false + }, + "_partials": { + "index.php": { + "type": "-", + "size": 336, + "lmtime": 1751610812000, + "modified": false + }, + "miniatures": { + "index.php": { + "type": "-", + "size": 339, + "lmtime": 1751610812000, + "modified": false + }, + "product.tpl": { + "type": "-", + "size": 1045, + "lmtime": 1751610812000, + "modified": false + } + }, + "product-block.tpl": { + "type": "-", + "size": 2805, + "lmtime": 1751610812000, + "modified": false + }, + "quickview.tpl": { + "type": "-", + "size": 1085, + "lmtime": 1751610812000, + "modified": false + } + }, + "product.tpl": { + "type": "-", + "size": 2542, + "lmtime": 1751610812000, + "modified": false + } + }, + "checkout": { + "index.php": { + "type": "-", + "size": 333, + "lmtime": 1751610812000, + "modified": false + }, + "_partials": { + "footer.tpl": { + "type": "-", + "size": 466, + "lmtime": 1751610812000, + "modified": false + }, + "header.tpl": { + "type": "-", + "size": 476, + "lmtime": 1751610812000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 336, + "lmtime": 1751610812000, + "modified": false + } + } + }, + "contact.tpl": { + "type": "-", + "size": 584, + "lmtime": 1751610812000, + "modified": false + }, + "errors": { + "404.tpl": { + "type": "-", + "size": 599, + "lmtime": 1751610812000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 333, + "lmtime": 1751610812000, + "modified": false + }, + "maintenance.tpl": { + "type": "-", + "size": 1230, + "lmtime": 1751610812000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 330, + "lmtime": 1751610812000, + "modified": false + }, + "index.tpl": { + "type": "-", + "size": 572, + "lmtime": 1751610812000, + "modified": false + }, + "layouts": { + "index.php": { + "type": "-", + "size": 333, + "lmtime": 1751610812000, + "modified": false + }, + "layout-canvas.tpl": { + "type": "-", + "size": 676, + "lmtime": 1751610812000, + "modified": false + }, + "layout-header-footer.tpl": { + "type": "-", + "size": 1518, + "lmtime": 1751610812000, + "modified": false + }, + "layout-product-block.tpl": { + "type": "-", + "size": 206, + "lmtime": 1751610812000, + "modified": false + } + }, + "_partials": { + "assets.tpl": { + "type": "-", + "size": 834, + "lmtime": 1751610812000, + "modified": false + }, + "footer.tpl": { + "type": "-", + "size": 439, + "lmtime": 1751610812000, + "modified": false + }, + "header.tpl": { + "type": "-", + "size": 439, + "lmtime": 1751610812000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 333, + "lmtime": 1751610812000, + "modified": false + }, + "javascript.tpl": { + "type": "-", + "size": 413, + "lmtime": 1751610812000, + "modified": false + } + } + } + }, + "hook": { + "backoffice_header.tpl": { + "type": "-", + "size": 1469, + "lmtime": 1751610812000, + "modified": false + }, + "index.php": { + "type": "-", + "size": 327, + "lmtime": 1751610812000, + "modified": false + } + }, + "index.php": { + "type": "-", + "size": 324, + "lmtime": 1751610812000, + "modified": false + } + } + } + } }, "nov": {}, "override": { diff --git a/modules/creativeelements/classes/CEContent.php b/modules/creativeelements/classes/CEContent.php new file mode 100644 index 00000000..d4c07e4f --- /dev/null +++ b/modules/creativeelements/classes/CEContent.php @@ -0,0 +1,176 @@ + 'ce_content', + 'primary' => 'id_ce_content', + 'multilang' => true, + 'multilang_shop' => true, + 'fields' => [ + 'id_employee' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId'], + 'id_product' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'], + 'hook' => ['type' => self::TYPE_STRING, 'validate' => 'isHookName', 'required' => true, 'size' => 64], + // Shop fields + 'position' => ['type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedInt'], + 'active' => ['type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isBool'], + 'date_add' => ['type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDate'], + 'date_upd' => ['type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDate'], + // Lang fields + 'title' => ['type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128], + 'content' => ['type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'], + ], + ]; + + public function __construct($id = null, $id_lang = null, $id_shop = null, $translator = null) + { + parent::__construct($id, $id_lang, $id_shop, $translator); + + // Insert missing ce_content_lang row if new language was added + if (!$this->id && $id && $id_lang && $id_shop && Shop::getShop($id_shop) && Language::getLanguage($id_lang) && self::getHookById($id) !== false) { + $res = Db::getInstance()->insert('ce_content_lang', [ + 'id_ce_content' => (int) $id, + 'id_lang' => (int) $id_lang, + 'id_shop' => (int) $id_shop, + 'title' => '', + 'content' => '', + ]); + empty($res) or parent::__construct($id, $id_lang, $id_shop, $translator); + } + } + + public function add($auto_date = true, $null_values = false) + { + $ctx = Context::getContext(); + $this->id_employee = $ctx->employee->id; + + $res = parent::add($auto_date, $null_values); + + if ($res && $this->hook && !empty($ctx->controller->module)) { + $ctx->controller->module->registerHook($this->hook, Shop::getContextListShopID()); + } + return $res; + } + + public function update($null_values = false) + { + if ('0000-00-00 00:00:00' === $this->date_add) { + $this->date_add = date('Y-m-d H:i:s'); + } + $before = new self($this->id); + + if ($res = parent::update($null_values)) { + $module = Context::getContext()->controller->module; + // handle hook changes + if ($before->hook && !method_exists($module, 'hook' . $before->hook) && !self::hasHook($before->hook)) { + $module->unregisterHook($before->hook, Shop::getContextListShopID()); + } + empty($this->hook) or $module->registerHook($this->hook, Shop::getContextListShopID()); + } + return $res; + } + + public function delete() + { + $res = parent::delete(); + + if ($res && $this->hook != 'displayFooterProduct') { + $module = Context::getContext()->controller->module; + $shops = Shop::getContextListShopID(); + + // unregister hook if needed + if (!method_exists($module, 'hook' . $this->hook) && !self::hasHook($this->hook)) { + $module->unregisterHook($this->hook, $shops); + } + } + return $res; + } + + public static function displayFieldName($field, $class = __CLASS__, $htmlentities = true, Context $ctx = null) + { + return 'hook' == $field ? 'Position' : parent::displayFieldName($field, $class, $htmlentities, $ctx); + } + + public static function hasHook($hook) + { + $db = Db::getInstance(); + $table = _DB_PREFIX_ . 'ce_content'; + $hook = $db->escape($hook); + + return $db->getValue("SELECT 1 FROM $table WHERE hook LIKE '$hook'"); + } + + public static function getHookById($id) + { + $table = _DB_PREFIX_ . 'ce_content'; + + return Db::getInstance()->getValue( + "SELECT hook FROM $table WHERE id_ce_content = " . (int) $id + ); + } + + public static function getIdsByHook($hook, $id_lang, $id_shop, $id_product = 0, $preview = false) + { + $db = Db::getInstance(); + $table = _DB_PREFIX_ . 'ce_content'; + $hook = $db->escape($hook); + $id_lang = (int) $id_lang; + $id_shop = (int) $id_shop; + $id_product = (int) $id_product; + $id_preview = isset($preview->id, $preview->id_type) && CE\UId::CONTENT == $preview->id_type + ? (int) $preview->id + : 0 + ; + $res = $db->executeS( + "SELECT a.id_ce_content as id FROM $table a + LEFT JOIN {$table}_lang AS b ON a.id_ce_content = b.id_ce_content + LEFT JOIN {$table}_shop sa ON sa.id_ce_content = a.id_ce_content AND sa.id_shop = b.id_shop + WHERE b.id_lang = $id_lang AND sa.id_shop = $id_shop AND a.hook LIKE '$hook' " . + ($id_product ? "AND (a.id_product = 0 OR a.id_product = $id_product) " : "") . + ($id_preview ? "AND (a.active = 1 OR a.id_ce_content = $id_preview) " : "AND a.active = 1 ") . + "ORDER BY a.id_product DESC" + ); + + return $res ?: []; + } + + public static function getFooterProductId($id_product) + { + if (!$id_product = (int) $id_product) { + return 0; + } + $table = _DB_PREFIX_ . 'ce_content'; + + return (int) Db::getInstance()->getValue( + "SELECT id_ce_content FROM $table WHERE id_product = $id_product AND hook = 'displayFooterProduct'" + ); + } + + public static function getMaintenanceId() + { + $table = _DB_PREFIX_ . 'ce_content'; + + return (int) Db::getInstance()->getValue( + "SELECT id_ce_content FROM $table WHERE hook LIKE 'displayMaintenance' ORDER BY active DESC" + ); + } +} diff --git a/modules/creativeelements/classes/CEDatabase.php b/modules/creativeelements/classes/CEDatabase.php new file mode 100644 index 00000000..c6c6bb3f --- /dev/null +++ b/modules/creativeelements/classes/CEDatabase.php @@ -0,0 +1,319 @@ + 1, + 'elementor_max_revisions' => 10, + // Style + 'elementor_default_generic_fonts' => 'sans-serif', + 'elementor_container_width' => 1140, + 'elementor_space_between_widgets' => 20, + 'elementor_page_title_selector' => 'header.page-header', + 'elementor_page_wrapper_selector' => '#content, #wrapper, #wrapper .container', + 'elementor_viewport_lg' => 1025, + 'elementor_viewport_md' => 768, + 'elementor_global_image_lightbox' => 1, + // Advanced + 'elementor_edit_buttons' => 'on', + 'elementor_exclude_modules' => json_encode([ + 'administration', + 'analytics_stats', + 'billing_invoicing', + 'checkout', + 'dashboard', + 'export', + 'emailing', + 'i18n_localization', + 'migration_tools', + 'payments_gateways', + 'payment_security', + 'quick_bulk_update', + 'seo', + 'shipping_logistics', + 'market_place', + ]), + 'elementor_load_fontawesome' => 1, + 'elementor_load_waypoints' => 1, + 'elementor_load_slick' => 1, + ]; + foreach ($defaults as $key => $value) { + Configuration::hasKey($key) or Configuration::updateValue($key, $value); + } + copy(_CE_PATH_ . 'views/lib/filemanager/config.php', _PS_IMG_DIR_ . 'cms/config.php'); + copy(_CE_PATH_ . 'views/lib/filemanager/.htaccess', _PS_IMG_DIR_ . 'cms/.htaccess'); + } + + public static function createTables() + { + $db = Db::getInstance(); + $ce_revision = _DB_PREFIX_ . 'ce_revision'; + $ce_template = _DB_PREFIX_ . 'ce_template'; + $ce_content = _DB_PREFIX_ . 'ce_content'; + $ce_theme = _DB_PREFIX_ . 'ce_theme'; + $ce_font = _DB_PREFIX_ . 'ce_font'; + $ce_meta = _DB_PREFIX_ . 'ce_meta'; + $engine = _MYSQL_ENGINE_; + + return $db->execute(" + CREATE TABLE IF NOT EXISTS `$ce_revision` ( + `id_ce_revision` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `parent` bigint(20) UNSIGNED NOT NULL, + `id_employee` int(10) UNSIGNED NOT NULL, + `title` varchar(255) NOT NULL, + `type` varchar(64) NOT NULL DEFAULT '', + `content` longtext NOT NULL, + `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_ce_revision`), + KEY `id` (`parent`), + KEY `date_add` (`date_upd`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `$ce_template` ( + `id_ce_template` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `id_employee` int(10) UNSIGNED NOT NULL, + `title` varchar(128) NOT NULL DEFAULT '', + `type` varchar(64) NOT NULL DEFAULT '', + `content` longtext, + `position` int(10) UNSIGNED NOT NULL DEFAULT 0, + `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_ce_template`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `$ce_content` ( + `id_ce_content` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `id_employee` int(10) UNSIGNED NOT NULL, + `id_product` int(10) UNSIGNED NOT NULL DEFAULT 0, + `hook` varchar(64) NOT NULL DEFAULT '', + `position` int(10) UNSIGNED NOT NULL DEFAULT 0, + `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_ce_content`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `{$ce_content}_shop` ( + `id_ce_content` int(10) UNSIGNED NOT NULL, + `id_shop` int(10) UNSIGNED NOT NULL, + `position` int(10) UNSIGNED NOT NULL DEFAULT 0, + `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_ce_content`,`id_shop`), + KEY `id_shop` (`id_shop`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `{$ce_content}_lang` ( + `id_ce_content` int(10) UNSIGNED NOT NULL, + `id_lang` int(10) UNSIGNED NOT NULL, + `id_shop` int(10) UNSIGNED NOT NULL DEFAULT 1, + `title` varchar(128) NOT NULL DEFAULT '', + `content` longtext, + PRIMARY KEY (`id_ce_content`,`id_shop`,`id_lang`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `$ce_theme` ( + `id_ce_theme` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `id_employee` int(10) UNSIGNED NOT NULL, + `type` varchar(64) NOT NULL DEFAULT '', + `position` int(10) UNSIGNED NOT NULL DEFAULT 0, + `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_ce_theme`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `{$ce_theme}_shop` ( + `id_ce_theme` int(10) UNSIGNED NOT NULL, + `id_shop` int(10) UNSIGNED NOT NULL, + `position` int(10) UNSIGNED NOT NULL DEFAULT 0, + `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_ce_theme`,`id_shop`), + KEY `id_shop` (`id_shop`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `{$ce_theme}_lang` ( + `id_ce_theme` int(10) UNSIGNED NOT NULL, + `id_lang` int(10) UNSIGNED NOT NULL, + `id_shop` int(10) UNSIGNED NOT NULL DEFAULT 1, + `title` varchar(128) NOT NULL DEFAULT '', + `content` text, + PRIMARY KEY (`id_ce_theme`,`id_shop`,`id_lang`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `$ce_font` ( + `id_ce_font` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `family` varchar(128) NOT NULL DEFAULT '', + `files` text, + PRIMARY KEY (`id_ce_font`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `$ce_meta` ( + `id_ce_meta` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `id` bigint(20) UNSIGNED NOT NULL DEFAULT 0, + `name` varchar(255) DEFAULT NULL, + `value` longtext, + PRIMARY KEY (`id_ce_meta`), + KEY `id` (`id`), + KEY `name` (`name`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + "); + } + + public static function updateTabs() + { + $id = (int) Tab::getIdFromClassName('IMPROVE'); + + try { + $pos = $id ? 1 : Tab::getInstanceFromClassName('AdminParentModules')->position; + $parent = self::updateTab($id, $pos, 'AdminParentCEContent', true, ['en' => 'Creative Elements'], 'ce'); + + self::updateTab($parent->id, 1, 'AdminCEThemes', true, [ + 'en' => 'Theme Builder', + 'fr' => 'Constructeur de thème', + 'es' => 'Maquetador de temas', + 'it' => 'Generatore di temi', + 'de' => 'Theme Builder', + 'pl' => 'Kreator motywów', + ]); + self::updateTab($parent->id, 2, 'AdminCEContent', true, [ + 'en' => 'Content Anywhere', + 'fr' => 'Contenu n’importe où', + 'es' => 'Contenido cualquier lugar', + 'it' => 'Contenuto Ovunque', + 'de' => 'Inhalt überall', + 'pl' => 'Treść w dowolnym miejscu', + ]); + self::updateTab($parent->id, 3, 'AdminCETemplates', true, [ + 'en' => 'Saved Templates', + 'fr' => 'Modèles enregistrés', + 'es' => 'Plantillas guardadas', + 'it' => 'Template salvati', + 'de' => 'Gespeicherte Templates', + 'pl' => 'Zapisane szablony', + ]); + self::updateTab($parent->id, 4, 'AdminCEFonts', true, [ + 'en' => 'Custom Fonts', + 'fr' => 'Polices personnalisées', + 'es' => 'Fuentes personalizadas', + 'it' => 'Font Personalizzati', + 'de' => 'Eigene Schriftarten', + 'pl' => 'Własne czcionki', + ]); + self::updateTab($parent->id, 5, 'AdminCESettings', true, [ + 'en' => 'Settings', + 'fr' => 'Réglages', + 'es' => 'Ajustes', + 'it' => 'Impostazioni', + 'de' => 'Einstellungen', + 'pl' => 'Ustawienia', + ]); + self::updateTab($parent->id, 6, 'AdminCEEditor', false, [ + 'en' => 'Live Editor', + 'fr' => 'Éditeur en direct', + 'es' => 'Editor en vivo', + 'it' => 'Editor live', + 'de' => 'Live Editor', + 'pl' => 'Edytor na żywo', + ]); + } catch (Exception $ex) { + return false; + } + + return true; + } + + protected static function updateTab($id_parent, $position, $class, $active, array $name, $icon = '') + { + $id = (int) Tab::getIdFromClassName($class); + $tab = new Tab($id); + $tab->id_parent = $id_parent; + $tab->position = (int) $position; + $tab->module = 'creativeelements'; + $tab->class_name = $class; + $tab->active = $active; + $tab->icon = $icon; + $tab->name = []; + + foreach (Language::getLanguages(false) as $lang) { + $tab->name[$lang['id_lang']] = isset($name[$lang['iso_code']]) ? $name[$lang['iso_code']] : $name['en']; + } + + if (!$tab->save()) { + throw new Exception('Can not save Tab: ' . $class); + } + + if (!$id && $tab->position != $position) { + $tab->position = (int) $position; + $tab->update(); + } + + return $tab; + } + + public static function getHooks($all = true) + { + $hooks = self::$hooks; + + if ($all) { + $ce_content = _DB_PREFIX_ . 'ce_content'; + $rows = Db::getInstance()->executeS("SELECT DISTINCT hook FROM $ce_content"); + + if (!empty($rows)) { + foreach ($rows as &$row) { + $hook = $row['hook']; + + if ($hook && !in_array($hook, $hooks)) { + $hooks[] = $hook; + } + } + } + } + return $hooks; + } +} diff --git a/modules/creativeelements/classes/CEFont.php b/modules/creativeelements/classes/CEFont.php new file mode 100644 index 00000000..847705ae --- /dev/null +++ b/modules/creativeelements/classes/CEFont.php @@ -0,0 +1,133 @@ + 'ce_font', + 'primary' => 'id_ce_font', + 'fields' => [ + 'family' => ['type' => self::TYPE_STRING, 'validate' => 'isImageTypeName', 'required' => true, 'size' => 128], + 'files' => ['type' => self::TYPE_STRING, 'validate' => 'isJson'], + ], + ]; + + protected static $format = [ + 'woff' => 'woff', + 'woff2' => 'woff2', + 'ttf' => 'truetype', + 'otf' => 'opentype', + ]; + + public static function getAllowedExt() + { + return array_keys(self::$format); + } + + public static function familyAlreadyExists($family, $exclude_id = 0) + { + $db = Db::getInstance(); + $table = _DB_PREFIX_ . 'ce_font'; + $id_ce_font = (int) $exclude_id; + $family = $db->escape($family); + + return (bool) $db->getValue( + "SELECT `id_ce_font` FROM `$table` WHERE `family` = '$family' AND `id_ce_font` != $id_ce_font" + ); + } + + public static function generateFontsList() + { + $fonts = []; + $font_types = []; + $db = Db::getInstance(); + $table = _DB_PREFIX_ . 'ce_font'; + $rows = $db->executeS("SELECT `family`, `files` FROM `$table` ORDER BY `family`"); + + if ($rows) { + foreach ($rows as &$row) { + if ($font_face = self::getFontFaceFromData($row['family'], $row['files'])) { + $fonts[$row['family']] = ['font_face' => $font_face]; + } + $font_types[$row['family']] = 'custom'; + } + } + CE\update_post_meta(0, 'elementor_fonts_manager_fonts', $fonts); + CE\update_post_meta(0, 'elementor_fonts_manager_font_types', $font_types); + } + + public static function getFontFaceFromData($family, $data) + { + is_array($data) or $data = json_decode($data, true); + + if (!$data) { + return ''; + } + ob_start(); + + foreach ($data as &$font) { + $src = []; + + foreach (self::$format as $ext => $format) { + if (!empty($font[$ext]['url'])) { + if (stripos($font[$ext]['url'], 'modules/') === 0 || stripos($font[$ext]['url'], 'themes/') === 0) { + $url = '{{BASE}}' . trim($font[$ext]['url']); + } else { + $url = trim($font[$ext]['url']); + } + $src[] = "url('$url') format('$format')"; + } + } + $src = implode(",\n\t\t", $src); + + echo "@font-face {\n"; + echo "\tfont-family: '$family';\n"; + echo "\tfont-weight: {$font['font_weight']};\n"; + echo "\tfont-style: {$font['font_style']};\n"; + echo "\tfont-display: swap;\n"; + echo "\tsrc: $src;\n"; + echo "}\n"; + } + return ob_get_clean(); + } + + public function add($auto_date = true, $null_values = false) + { + if ($result = parent::add($auto_date, $null_values)) { + self::generateFontsList(); + } + return $result; + } + + public function update($null_values = false) + { + if ($result = parent::update($null_values)) { + self::generateFontsList(); + } + return $result; + } + + public function delete() + { + if ($result = parent::delete()) { + self::generateFontsList(); + } + return $result; + } + + public function __toString() + { + return self::getFontFaceFromData($this->family, $this->files); + } +} diff --git a/modules/creativeelements/classes/CEMigrate.php b/modules/creativeelements/classes/CEMigrate.php new file mode 100644 index 00000000..e4337cbb --- /dev/null +++ b/modules/creativeelements/classes/CEMigrate.php @@ -0,0 +1,311 @@ +executeS("SELECT id, active FROM $table ORDER BY id"); + $ids = [ + 'content' => [], + 'template' => [], + ]; + if (!empty($rows)) { + foreach ($rows as &$row) { + $ids[$row['active'] < 2 ? 'content' : 'template'][] = (int) $row['id']; + } + } + return $ids; + } + + public static function storeIds() + { + $ids = self::searchIds(); + $count = count($ids['content']) + count($ids['template']); + + if ($count > 0) { + Configuration::updateGlobalValue('ce_migrate', $count); + + CE\update_post_meta(0, self::IDS_META_KEY, $ids) && self::$ids = $ids; + } + return $count; + } + + public static function getIds() + { + if (null === self::$ids) { + self::$ids = CE\get_post_meta(0, self::IDS_META_KEY, true); + } + return self::$ids; + } + + public static function removeIds($type, $done) + { + $ids = self::getIds(); + $ids[$type] = array_values(array_diff($ids[$type], $done)); + + if (!empty($ids['content']) || !empty($ids['template'])) { + CE\update_post_meta(0, self::IDS_META_KEY, $ids) && self::$ids = $ids; + } else { + self::deleteIds(); + + Media::clearCache(); + } + return [ + 'type' => $type, + 'done' => $done, + ]; + } + + private static function deleteIds() + { + Configuration::deleteByName('ce_migrate'); + + CE\delete_post_meta(0, self::IDS_META_KEY) && self::$ids = false; + } + + private static function getJsDef() + { + $link = Context::getContext()->link; + + return [ + 'ids' => self::getIds(), + 'count' => Configuration::getGlobalValue('ce_migrate'), + 'baseDir' => __PS_BASE_URI__, + 'ajaxUrl' => [ + 'content' => $link->getAdminLink('AdminCEContent') . '&ajax=1', + 'template' => $link->getAdminLink('AdminCETemplates') . '&ajax=1', + ], + ]; + } + + public static function registerJavaScripts() + { + $context = Context::getContext(); + + if ($context->controller instanceof AdminController) { + if (Tools::getValue('CEMigrate') === 'reset' && !self::storeIds()) { + return; + } + Media::addJsDef([ + 'ceMigrate' => self::getJsDef(), + ]); + $context->controller->js_files[] = _MODULE_DIR_ . 'creativeelements/views/js/migrate.js?v=' . _CE_VERSION_; + } + } + + public static function renderJavaScripts() + { + $ce_migrate = json_encode(self::getJsDef()); + + return CESmarty::sprintf(_CE_TEMPLATES_ . 'admin/admin.tpl', 'ce_inline_script', " + $('#module-modal-import .modal-content').hide(); + window.ceMigrate = $ce_migrate; + $.getScript(ceMigrate.baseDir + 'modules/creativeelements/views/js/migrate.js'); + "); + } + + public static function moveConfigs() + { + $table = _DB_PREFIX_ . 'creativepage'; + // Get old data rows + $rows = Db::getInstance()->executeS( + "SELECT id_shop, meta_key, meta_value FROM {$table}_meta + WHERE id = 0 AND meta_key LIKE 'elementor_scheme_%'" + ); + // Update configs + if (!empty($rows)) { + foreach ($rows as &$row) { + $id_shop = $row['id_shop']; + $id_group = Shop::getGroupFromShop($id_shop); + + Configuration::updateValue($row['meta_key'], $row['meta_value'], false, $id_group, $id_shop); + } + } + } + + private static function isMoved($id) + { + $res = CE\get_post_meta($id, '_ce_migrated', true); + + if (isset($res['started']) && $res['started'] + self::MOVE_TIMEOUT < time()) { + return false; + } + return (bool) $res; + } + + private static function startMoving($id) + { + return CE\update_post_meta($id, '_ce_migrated', [ + 'started' => time(), + ]); + } + + private static function setMoved($id) + { + return CE\update_post_meta($id, '_ce_migrated', time()); + } + + public static function moveContent($id, $module) + { + if (self::isMoved($id)) { + return true; + } else { + self::startMoving($id); + } + $db = Db::getInstance(); + $table = _DB_PREFIX_ . 'creativepage'; + + // Get old data rows + $rows = $db->executeS( + "SELECT * FROM $table AS a + INNER JOIN {$table}_lang AS b ON a.id = b.id + INNER JOIN {$table}_shop AS sa ON a.id = sa.id AND b.id_shop = sa.id_shop + WHERE a.id = " . (int) $id + ); + if (empty($rows)) { + return false; + } + $res = true; + $id_ce_content = null; + $shops = []; + // Re-structuring rows + foreach ($rows as &$row) { + $id_shop = $row['id_shop']; + $id_lang = $row['id_lang']; + + if (empty($shops[$id_shop])) { + $shops[$id_shop] = $row; + $shops[$id_shop]['title'] = []; + $shops[$id_shop]['data'] = []; + } + $shops[$id_shop]['title'][$id_lang] = $row['title']; + $shops[$id_shop]['data'][$id_lang] = $row['data']; + } + foreach ($shops as $id_shop => &$row) { + // Create CEContent if needed + if (!$row['id_page'] || 'displayFooterProduct' === $row['type']) { + // Insert ce_content fields + if (!$id_ce_content) { + $ce_content = [ + 'id_employee' => (int) $row['id_employee'], + 'id_product' => (int) $row['id_page'], + 'hook' => $db->escape($row['type']), + 'active' => $row['id_page'] ? 1 : (int) $row['active'], + 'date_add' => $db->escape($row['date_add']), + 'date_upd' => $db->escape($row['date_upd']), + ]; + if (!$db->insert('ce_content', $ce_content)) { + return false; + } + $id_ce_content = $db->insert_ID(); + + // Register hook + if (!$row['id_page']) { + $module->registerHook($ce_content['hook'], array_keys($shops)); + } + } + // Insert ce_content_shop fields + $ce_content_shop = [ + 'id_ce_content' => (int) $id_ce_content, + 'id_shop' => (int) $id_shop, + 'active' => (int) $row['active'], + 'date_add' => $db->escape($row['date_add']), + 'date_upd' => $db->escape($row['date_upd']), + ]; + if (!$db->insert('ce_content_shop', $ce_content_shop)) { + return false; + } + // Insert ce_content_lang fields + foreach ($row['title'] as $id_lang => $title) { + $ce_content_lang = [ + 'id_ce_content' => (int) $id_ce_content, + 'id_lang' => (int) $id_lang, + 'id_shop' => (int) $id_shop, + 'title' => $db->escape($title), + 'content' => '', + ]; + if (!$db->insert('ce_content_lang', $ce_content_lang)) { + return false; + } + } + $id_page = $id_ce_content; + $id_type = CE\UId::CONTENT; + } else { + $id_page = $row['id_page']; + $id_type = CE\UId::getTypeId($row['type']); + } + // Update meta data + foreach ($row['data'] as $id_lang => &$json) { + if ($json) { + $uid = new CE\UId($id_page, $id_type, $id_lang, $id_shop); + $data = json_decode($json, true); + + if ($id_ce_content || $row['id_page'] && $row['active']) { + $res &= CE\update_post_meta($uid, '_elementor_edit_mode', 'builder'); + } + $res &= CE\update_post_meta($uid, '_elementor_data', $data); + } + } + } + empty($res) or self::setMoved($id); + + return $res; + } + + public static function moveTemplate($id) + { + if (self::isMoved($id)) { + return true; + } else { + self::startMoving($id); + } + $db = Db::getInstance(); + $table = _DB_PREFIX_ . 'creativepage'; + + // Get old data row + $row = $db->getRow( + "SELECT * FROM $table AS a + INNER JOIN {$table}_lang AS b ON a.id = b.id AND b.id_lang = 1 AND b.id_shop = 1 + WHERE a.id = " . (int) $id + ); + if (empty($row)) { + return false; + } + // Insert ce_template fields + $res = $db->insert('ce_template', [ + 'id_employee' => (int) $row['id_employee'], + 'title' => $db->escape($row['title']), + 'type' => $db->escape($row['type']), + 'active' => true, + 'date_add' => $db->escape($row['date_add']), + 'date_upd' => $db->escape($row['date_upd']), + ]); + // Update meta data + if ($res) { + $uid = new CE\UId($db->insert_ID(), CE\UId::TEMPLATE); + $data = json_decode($row['data'], true); + + $res &= CE\update_post_meta($uid, '_elementor_edit_mode', 'builder'); + $res &= CE\update_post_meta($uid, '_elementor_data', $data); + } + empty($res) or self::setMoved($id); + + return $res; + } +} diff --git a/modules/creativeelements/classes/CERevision.php b/modules/creativeelements/classes/CERevision.php new file mode 100644 index 00000000..cf5dcd71 --- /dev/null +++ b/modules/creativeelements/classes/CERevision.php @@ -0,0 +1,34 @@ + 'ce_revision', + 'primary' => 'id_ce_revision', + 'fields' => [ + 'parent' => ['type' => self::TYPE_STRING, 'validate' => 'isIp2Long', 'required' => true], + 'id_employee' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId'], + 'title' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 255], + 'type' => ['type' => self::TYPE_STRING, 'validate' => 'isHookName', 'size' => 64], + 'content' => ['type' => self::TYPE_HTML, 'validate' => 'isCleanHtml'], + 'active' => ['type' => self::TYPE_INT, 'validate' => 'isBool'], + 'date_upd' => ['type' => self::TYPE_DATE, 'validate' => 'isDate'], + ], + ]; +} diff --git a/modules/creativeelements/classes/CESmarty.php b/modules/creativeelements/classes/CESmarty.php new file mode 100644 index 00000000..8d2c4187 --- /dev/null +++ b/modules/creativeelements/classes/CESmarty.php @@ -0,0 +1,173 @@ +smarty->createTemplate($path); + CE\do_action('smarty/before_fetch', $tpl->smarty); + $tpl->fetch(); + CE\do_action('smarty/after_fetch', $tpl->smarty); + + return self::$tpls[$path] = $tpl; + } + + public static function call($path, $func, array $params = [], $nocache = true) + { + $tpl = self::getTemplate($path); + CE\do_action('smarty/before_call', $tpl->smarty); + isset($tpl->smarty->ext->_tplFunction) + ? $tpl->smarty->ext->_tplFunction->callTemplateFunction($tpl, $func, $params, $nocache) + : call_user_func("smarty_template_function_$func", $tpl, $params) + ; + CE\do_action('smarty/after_call', $tpl->smarty); + } + + public static function capture($path, $func, array $params = [], $nocache = true) + { + ob_start(); + + self::call($path, $func, $params, $nocache); + + return ob_get_clean(); + } + + public static function get($path, $buffer) + { + $tpl = self::getTemplate($path); + + return isset($tpl->smarty->ext->_capture) + ? $tpl->smarty->ext->_capture->getBuffer($tpl, $buffer) + : Smarty::$_smarty_vars['capture'][$buffer] + ; + } + + public static function write($path, $buffer) + { + $tpl = self::getTemplate($path); + + echo isset($tpl->smarty->ext->_capture) + ? $tpl->smarty->ext->_capture->getBuffer($tpl, $buffer) + : Smarty::$_smarty_vars['capture'][$buffer] + ; + } + + public static function printf($path, $buffer) + { + $args = func_get_args(); + array_shift($args); + $args[0] = self::get($path, $buffer); + + call_user_func_array(__FUNCTION__, $args); + } + + public static function sprintf($path, $buffer) + { + $args = func_get_args(); + array_shift($args); + $args[0] = self::get($path, $buffer); + + return call_user_func_array(__FUNCTION__, $args); + } +} + +function smartyInclude(array $params) +{ + if (empty($params['file'])) { + return; + } + + $file = $params['file']; + + try { + if (strrpos($file, '../') !== false || strcasecmp(Tools::substr($file, -4), '.tpl') !== 0) { + throw new Exception(); + } + + if (stripos($file, 'module:') === 0) { + $file = Tools::substr($file, 7); + + if (!file_exists($path = _PS_THEME_DIR_ . "modules/$file") && + (!_PARENT_THEME_NAME_ || !file_exists($path = _PS_PARENT_THEME_DIR_ . "modules/$file")) && + !file_exists($path = _PS_MODULE_DIR_ . $file) + ) { + throw new Exception(); + } + } elseif (_PARENT_THEME_NAME_ && stripos($file, 'parent:') === 0) { + $file = Tools::substr($file, 7); + + if (!file_exists($path = _PS_PARENT_THEME_DIR_ . "templates/$file")) { + throw new Exception(); + } + } elseif (!file_exists($path = _PS_THEME_DIR_ . "templates/$file") && + (!_PARENT_THEME_NAME_ || !file_exists($path = _PS_PARENT_THEME_DIR_ . "templates/$file")) + ) { + throw new Exception(); + } + + $cache_id = isset($params['cache_id']) ? $params['cache_id'] : null; + $compile_id = isset($params['compile_id']) ? $params['compile_id'] : null; + unset($params['file'], $params['cache_id'], $params['compile_id']); + + $out = Context::getContext()->smarty->fetch($path, $cache_id, $compile_id, $params); + } catch (Exception $ex) { + $out = "Failed including: '$file'"; + } + return $out; +} + +function ce__($text, $module = 'creativeelements') +{ + return CE\translate($text, $module); +} + +function ce_new($class) +{ + $rc = new ReflectionClass($class); + $args = func_get_args(); + array_shift($args); + + return $rc->newInstanceArgs($args); +} + +function ce_enqueue_miniature($uid) +{ + static $enqueued = []; + + if (isset($enqueued[$uid])) { + return; + } + $enqueued[$uid] = true; + + $forceInline = Tools::getValue('render') === 'widget'; + + if ($forceInline || !Context::getContext()->controller->ajax) { + $css_file = new CE\ModulesXCatalogXFilesXCSSXProductMiniature($uid, $forceInline); + $css_file->enqueue(); + } +} + +function array_export($array) +{ + echo preg_replace(['/\barray\s*\(/i', '/,\r?(\n\s*)\)/'], ['[', '$1]'], var_export($array, true)); +} + +function _q_c_($if, $then, $else) +{ + return $if ? $then : $else; +} diff --git a/modules/creativeelements/classes/CETemplate.php b/modules/creativeelements/classes/CETemplate.php new file mode 100644 index 00000000..e2ce3fa5 --- /dev/null +++ b/modules/creativeelements/classes/CETemplate.php @@ -0,0 +1,53 @@ + 'ce_template', + 'primary' => 'id_ce_template', + 'fields' => [ + 'id_employee' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId'], + 'title' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 128], + 'type' => ['type' => self::TYPE_STRING, 'validate' => 'isHookName', 'required' => true, 'size' => 64], + 'content' => ['type' => self::TYPE_HTML, 'validate' => 'isCleanHtml'], + 'position' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'], + 'active' => ['type' => self::TYPE_INT, 'validate' => 'isBool'], + 'date_add' => ['type' => self::TYPE_DATE, 'validate' => 'isDate'], + 'date_upd' => ['type' => self::TYPE_DATE, 'validate' => 'isDate'], + ], + ]; + + public function add($auto_date = true, $null_values = false) + { + $this->id_employee = Context::getContext()->employee->id; + + return parent::add($auto_date, $null_values); + } + + public static function getTypeById($id) + { + $table = _DB_PREFIX_ . 'ce_template'; + + return Db::getInstance()->getValue( + "SELECT type FROM $table WHERE id_ce_template = " . (int) $id + ); + } +} diff --git a/modules/creativeelements/classes/CETheme.php b/modules/creativeelements/classes/CETheme.php new file mode 100644 index 00000000..5e7a4df8 --- /dev/null +++ b/modules/creativeelements/classes/CETheme.php @@ -0,0 +1,97 @@ + 'ce_theme', + 'primary' => 'id_ce_theme', + 'multilang' => true, + 'multilang_shop' => true, + 'fields' => [ + 'id_employee' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId'], + 'type' => ['type' => self::TYPE_STRING, 'validate' => 'isHookName', 'required' => true, 'size' => 64], + // Shop fields + 'position' => ['type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedInt'], + 'active' => ['type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isBool'], + 'date_add' => ['type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDate'], + 'date_upd' => ['type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDate'], + // Lang fields + 'title' => ['type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128], + 'content' => ['type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'], + ], + ]; + + public function add($auto_date = true, $null_values = false) + { + $this->id_employee = Context::getContext()->employee->id; + + return parent::add($auto_date, $null_values); + } + + public function update($null_values = false) + { + if ('0000-00-00 00:00:00' === $this->date_add) { + $this->date_add = date('Y-m-d H:i:s'); + } + + return parent::update($null_values); + } + + public function delete() + { + $result = parent::delete(); + + if ($result && 'product-miniature' === $this->type) { + array_map( + 'unlink', + glob(_CE_TEMPLATES_ . "front/theme/catalog/_partials/miniatures/product-{$this->id}17????.tpl") + ); + } + + return $result; + } + + public static function getOptions($type, $id_lang, $id_shop) + { + $db = Db::getInstance(); + $table = _DB_PREFIX_ . 'ce_theme'; + $id_lang = (int) $id_lang; + $id_shop = (int) $id_shop; + $type = $db->escape($type); + $res = $db->executeS( + "SELECT t.id_ce_theme as `value`, CONCAT('#', t.id_ce_theme, ' ', tl.title) as `name` FROM $table AS t + INNER JOIN {$table}_shop as ts ON t.id_ce_theme = ts.id_ce_theme + INNER JOIN {$table}_lang as tl ON t.id_ce_theme = tl.id_ce_theme AND ts.id_shop = tl.id_shop + WHERE ts.active = 1 AND ts.id_shop = $id_shop AND tl.id_lang = $id_lang AND t.type = '$type' + ORDER BY tl.title" + ); + return $res ?: []; + } + + public static function getTypeById($id) + { + $table = _DB_PREFIX_ . 'ce_theme'; + + return Db::getInstance()->getValue( + "SELECT type FROM $table WHERE id_ce_theme = " . (int) $id + ); + } +} diff --git a/modules/creativeelements/classes/assets/CEAssetManager.php b/modules/creativeelements/classes/assets/CEAssetManager.php new file mode 100644 index 00000000..070673e3 --- /dev/null +++ b/modules/creativeelements/classes/assets/CEAssetManager.php @@ -0,0 +1,195 @@ +controller = $ctx->controller; + + $managers = [ + 'stylesheetManager' => 'CEStylesheetManager', + 'javascriptManager' => 'CEJavascriptManager', + ]; + foreach ($managers as $prop => $class) { + $managerRef = new ReflectionProperty($this->controller, $prop); + $managerRef->setAccessible(true); + $manager = $managerRef->getValue($this->controller); + + $listRef = new ReflectionProperty($manager, 'list'); + $listRef->setAccessible(true); + + $this->$prop = new $class([ + _PS_THEME_URI_, + _PS_PARENT_THEME_URI_, + __PS_BASE_URI__, + ], $config, $listRef->getValue($manager)); + + $managerRef->setValue($this->controller, $this->$prop); + } + + $reducerRef = new ReflectionProperty($this->controller, 'cccReducer'); + $reducerRef->setAccessible(true); + $this->cccReducer = new CECccReducer( + _PS_THEME_DIR_ . 'assets/cache/', + $config, + new Filesystem() + ); + $reducerRef->setValue($this->controller, $this->cccReducer); + + $this->template = &Closure::bind(function &() { + return ${'this'}->template; + }, $this->controller, $this->controller)->__invoke(); + + $ctx->smarty->registerPlugin('modifier', 'ce' . 'filter', [$this, 'modifierFilter']); + $ctx->smarty->registerFilter('output', [$this, 'outputFilter']); + } + + public function registerStylesheet($id, $path, array $params = []) + { + $params = array_merge([ + 'media' => AbstractAssetManager::DEFAULT_MEDIA, + 'priority' => AbstractAssetManager::DEFAULT_PRIORITY, + 'inline' => false, + 'server' => 'local', + ], $params); + + if (_MEDIA_SERVER_1_ && 'remote' !== $params['server'] && !Configuration::get('PS_CSS_THEME_CACHE')) { + $params['server'] = 'remote'; + $path = '//' . Tools::getMediaServer($path) . ($this->stylesheetManager->getFullPath($path) ?: $path); + } + $this->stylesheetManager->register($id, $path, $params['media'], $params['priority'], $params['inline'], $params['server']); + } + + public function registerJavascript($id, $path, array $params = []) + { + $params = array_merge([ + 'position' => AbstractAssetManager::DEFAULT_JS_POSITION, + 'priority' => AbstractAssetManager::DEFAULT_PRIORITY, + 'inline' => false, + 'attributes' => null, + 'server' => 'local', + ], $params); + + if (_MEDIA_SERVER_1_ && 'remote' !== $params['server'] && !Configuration::get('PS_JS_THEME_CACHE')) { + $params['server'] = 'remote'; + $path = '//' . Tools::getMediaServer($path) . ($this->javascriptManager->getFullPath($path) ?: $path); + } + $this->javascriptManager->register($id, $path, $params['position'], $params['priority'], $params['inline'], $params['attributes'], $params['server']); + } + + public function modifierFilter($str) + { + echo $str; + } + + public function outputFilter($out, $tpl) + { + if ($this->template === $tpl->template_resource || 'errors/maintenance.tpl' === $tpl->template_resource) { + $assets = $this->fetchAssets(); + + if (false !== $pos = strpos($out, '')) { + $out = substr_replace($out, $assets->head, $pos, 0); + } + if (false !== $pos = strrpos($out, '')) { + $out = substr_replace($out, $assets->bottom, $pos, 0); + } + } + return $out; + } + + public function fetchAssets() + { + $smarty = Context::getContext()->smarty; + $assets = new stdClass(); + + ob_start(); + CE\do_action('wp_head'); + $assets->head = ob_get_clean(); + + ob_start(); + CE\do_action('wp_footer'); + $assets->bottom = ob_get_clean(); + + $styles = $this->stylesheetManager->listAll(); + + foreach ($styles['external'] as $id => &$style) { + if (isset(CE\Helper::$inline_styles[$id])) { + $styles['inline'][$id] = [ + 'content' => implode("\n", CE\Helper::$inline_styles[$id]) + ]; + } + } + + $scripts = $this->javascriptManager->listAll(); + $js_defs = Media::getJsDef(); + + if (!empty($smarty->tpl_vars['js_custom_vars'])) { + foreach ($smarty->tpl_vars['js_custom_vars']->value as $key => &$val) { + unset($js_defs[$key]); + } + } + + Configuration::get('PS_CSS_THEME_CACHE') && $styles = $this->cccReducer->reduceCss($styles); + Configuration::get('PS_JS_THEME_CACHE') && $scripts = $this->cccReducer->reduceJs($scripts); + + $smarty->assign([ + 'stylesheets' => &$styles, + 'javascript' => &$scripts['head'], + 'js_custom_vars' => &$js_defs, + ]); + $assets->head = $smarty->fetch(_CE_TEMPLATES_ . 'front/theme/_partials/assets.tpl') . $assets->head; + + $smarty->assign([ + 'stylesheets' => [], + 'javascript' => &$scripts['bottom'], + 'js_custom_vars' => [], + ]); + $assets->bottom = $smarty->fetch(_CE_TEMPLATES_ . 'front/theme/_partials/assets.tpl') . $assets->bottom; + + return $assets; + } +} diff --git a/modules/creativeelements/classes/assets/CECccReducer.php b/modules/creativeelements/classes/assets/CECccReducer.php new file mode 100644 index 00000000..17d59251 --- /dev/null +++ b/modules/creativeelements/classes/assets/CECccReducer.php @@ -0,0 +1,28 @@ +list = $list; + } + + public function getFullPath(string $relativePath) + { + if (strrpos($relativePath, '?') !== false) { + $path = explode('?', $relativePath, 2); + $fullPath = parent::getFullPath($path[0]); + + return $fullPath ? "$fullPath?$path[1]" : false; + } + return parent::getFullPath($relativePath); + } + + public function getList() + { + return parent::getDefaultList(); + } + + public function listAll() + { + return parent::getList(); + } +} diff --git a/modules/creativeelements/classes/assets/CEJavascriptManager5.php b/modules/creativeelements/classes/assets/CEJavascriptManager5.php new file mode 100644 index 00000000..12e1149a --- /dev/null +++ b/modules/creativeelements/classes/assets/CEJavascriptManager5.php @@ -0,0 +1,43 @@ +list = $list; + } + + public function getFullPath($relativePath) + { + if (strrpos($relativePath, '?') !== false) { + $path = explode('?', $relativePath, 2); + $fullPath = parent::getFullPath($path[0]); + + return $fullPath ? "$fullPath?$path[1]" : false; + } + return parent::getFullPath($relativePath); + } + + public function getList() + { + return parent::getDefaultList(); + } + + public function listAll() + { + return parent::getList(); + } +} diff --git a/modules/creativeelements/classes/assets/CEStylesheetManager.php b/modules/creativeelements/classes/assets/CEStylesheetManager.php new file mode 100644 index 00000000..dc07d0c9 --- /dev/null +++ b/modules/creativeelements/classes/assets/CEStylesheetManager.php @@ -0,0 +1,43 @@ +list = $list; + } + + public function getFullPath(string $relativePath) + { + if (strrpos($relativePath, '?') !== false) { + $path = explode('?', $relativePath, 2); + $fullPath = parent::getFullPath($path[0]); + + return $fullPath ? "$fullPath?$path[1]" : false; + } + return parent::getFullPath($relativePath); + } + + public function getList() + { + return parent::getDefaultList(); + } + + public function listAll() + { + return parent::getList(); + } +} diff --git a/modules/creativeelements/classes/assets/CEStylesheetManager5.php b/modules/creativeelements/classes/assets/CEStylesheetManager5.php new file mode 100644 index 00000000..ee5227ec --- /dev/null +++ b/modules/creativeelements/classes/assets/CEStylesheetManager5.php @@ -0,0 +1,43 @@ +list = $list; + } + + public function getFullPath($relativePath) + { + if (strrpos($relativePath, '?') !== false) { + $path = explode('?', $relativePath, 2); + $fullPath = parent::getFullPath($path[0]); + + return $fullPath ? "$fullPath?$path[1]" : false; + } + return parent::getFullPath($relativePath); + } + + public function getList() + { + return parent::getDefaultList(); + } + + public function listAll() + { + return parent::getList(); + } +} diff --git a/modules/creativeelements/classes/assets/index.php b/modules/creativeelements/classes/assets/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/classes/assets/index.php @@ -0,0 +1,8 @@ +code = $code; + $this->message = $message; + } + + public function getErrorMessage($code = '') + { + if (!$this->code) { + return ''; + } + if ($code) { + throw new \RuntimeException('todo'); + } + return $this->code . ($this->message ? " - {$this->message}" : ''); + } +} + +function is_wp_error($error) +{ + return $error instanceof WPError; +} + +function _doing_it_wrong($function, $message = '', $version = '') +{ + die(\Tools::displayError($function . ' was called incorrectly. ' . $message . ' ' . $version)); +} diff --git a/modules/creativeelements/classes/wrappers/Helper.php b/modules/creativeelements/classes/wrappers/Helper.php new file mode 100644 index 00000000..75508701 --- /dev/null +++ b/modules/creativeelements/classes/wrappers/Helper.php @@ -0,0 +1,1117 @@ +render_tabs as $index => $should_render) { + if ($should_render) { + return $index; + } + } + return 0; + } + + public static function getAjaxLink() + { + return preg_replace('/\buid=\d+(&footerProduct=\d+)?/', 'ajax=1', $_SERVER['REQUEST_URI']); + } + + public static function getAjaxProductsListLink() + { + if (!is_admin()) { + return ''; + } + + if (version_compare(_PS_VERSION_, '1.7.6', '<')) { + $link = 'ajax_products_list.php?'; + $args = []; + } else { + $link = 'index.php?'; + $args = [ + 'controller' => 'AdminProducts', + 'token' => \Tools::getAdminTokenLite('AdminProducts'), + 'ajax' => 1, + 'action' => 'productsList', + ]; + } + return $link . http_build_query($args + [ + 'forceJson' => 1, + 'disableCombination' => 1, + 'excludeVirtuals' => 0, + 'exclude_packs' => 0, + 'limit' => 20, + ]); + } + + public static function getWrapfix() + { + $wrapfix = [ + 'classic' => version_compare(_PS_VERSION_, '1.7.6', '<') ? 'featured-products wrapfix' : 'products', + 'classic-rocket' => 'wrapfix', + ]; + return isset($wrapfix[_THEME_NAME_]) ? $wrapfix[_THEME_NAME_] : ''; + } + + public static function getMediaLink($url, $full = false) + { + if ($url && strrpos($url, '://') === false) { + $url = __PS_BASE_URI__ . $url; + + if (_MEDIA_SERVER_1_ || $full) { + $url = \Context::getContext()->link->getMediaLink($url); + } + } + return $url; + } + + public static function getProductImageLink($image) + { + $id = (int) $image['id_image']; + $url = reset($image['bySize'])['url']; + $ext = \Tools::substr($url, strrpos($url, '.') + 1); + + return self::getMediaLink('img/p/' . implode('/', str_split("$id")) . "/$id.$ext"); + } + + public static function getNoImage() + { + static $image; + + if (null === $image) { + $context = \Context::getContext(); + $imageRetriever = new \PrestaShop\PrestaShop\Adapter\Image\ImageRetriever($context->link); + + $image = method_exists($imageRetriever, 'getNoPictureImage') + ? $imageRetriever->getNoPictureImage($context->language) + : $imageRetriever->getImage( + new \Product(0, false, $context->language->id), + $context->language->iso_code . '-default' + ); + } + return $image; + } + + public static function getSettingsLink() + { + return is_admin() ? \Context::getContext()->link->getAdminLink('AdminCESettings') : ''; + } + + public static function transError($error) + { + return \Context::getContext()->getTranslator()->trans($error, [], 'Admin.Notifications.Error'); + } +} + +function callback_hash($callback) +{ + $tolower = 'strtolower'; + + if (is_array($callback) && count($callback) === 2) { + if (is_string($callback[0])) { + return $tolower(implode('::', $callback)); + } + if (is_object($callback[0])) { + return spl_object_hash($callback[0]) . '->' . $tolower($callback[1]); + } + } + if (is_string($callback)) { + return $tolower($callback); + } + if (is_object($callback)) { + return spl_object_hash($callback); + } + throw new \RuntimeException('Callback is not callable'); +} + +function add_action($tag, $callback, $priority = 10) +{ + $p = (int) $priority; + + isset(Helper::$actions[$tag]) or Helper::$actions[$tag] = [10 => []]; + isset(Helper::$actions[$tag][$p]) or Helper::$actions[$tag][$p] = []; + + if (is_string($callback) && '\\' !== $callback[0]) { + $callback = '\\' . __NAMESPACE__ . '\\' . $callback; + } + if (is_array($callback) && isset($callback[1]) && strrpos($callback[1], '_')) { + $callback[1] = \Tools::toCamelCase($callback[1]); + } + Helper::$actions[$tag][$p][callback_hash($callback)] = $callback; +} + +function do_action($tag, $arg = '') +{ + isset(Helper::$actions_fired[$tag]) or Helper::$actions_fired[$tag] = 0; + Helper::$actions_fired[$tag]++; + + if (isset(Helper::$actions[$tag])) { + $actions = &Helper::$actions[$tag]; + + $args = func_get_args(); + array_shift($args); + + $priorities = array_keys($actions); + sort($priorities, SORT_NUMERIC); + + foreach ($priorities as $p) { + foreach ($actions[$p] as $callback) { + call_user_func_array($callback, $args); + } + } + } +} + +function do_action_ref_array($tag, array $args = []) +{ + array_unshift($args, $tag); + call_user_func_array(__NAMESPACE__ . '\do_action', $args); +} + +function did_action($tag) +{ + return isset(Helper::$actions_fired[$tag]) ? Helper::$actions_fired[$tag] : 0; +} + +function add_filter($tag, $callback, $priority = 10) +{ + $p = (int) $priority; + + isset(Helper::$filters[$tag]) or Helper::$filters[$tag] = [10 => []]; + isset(Helper::$filters[$tag][$p]) or Helper::$filters[$tag][$p] = []; + + if (is_string($callback) && '\\' !== $callback[0]) { + $callback = '\\' . __NAMESPACE__ . '\\' . $callback; + } + if (is_array($callback) && isset($callback[1]) && strrpos($callback[1], '_')) { + $callback[1] = \Tools::toCamelCase($callback[1]); + } + Helper::$filters[$tag][$p][callback_hash($callback)] = $callback; +} + +function has_filter($tag, $function_to_check = false) +{ + if ($function_to_check) { + throw new \RuntimeException('TODO'); + } + return isset(Helper::$filters[$tag]); +} + +function apply_filters($tag, $value) +{ + if (isset(Helper::$filters[$tag])) { + $filters = &Helper::$filters[$tag]; + + $args = func_get_args(); + array_shift($args); + + $priorities = array_keys($filters); + sort($priorities, SORT_NUMERIC); + + foreach ($priorities as $p) { + foreach ($filters[$p] as $callback) { + $args[0] = call_user_func_array($callback, $args); + } + } + return $args[0]; + } + return $value; +} + +function remove_filter($tag, $callback, $priority = 10) +{ + if (is_string($callback) && '\\' !== $callback[0]) { + $callback = '\\' . __NAMESPACE__ . '\\' . $callback; + } + if (is_array($callback) && isset($callback[1]) && strrpos($callback[1], '_')) { + $callback[1] = \Tools::toCamelCase($callback[1]); + } + unset(Helper::$filters[$tag][$priority][callback_hash($callback)]); + return true; +} + +function remove_all_filters($tag, $priority = false) +{ + if ($priority) { + unset(Helper::$filters[$tag][$priority]); + } else { + unset(Helper::$filters[$tag]); + } + return true; +} + +function wp_add_inline_style($handle, $data) +{ + isset(Helper::$inline_styles[$handle]) or Helper::$inline_styles[$handle] = []; + + Helper::$inline_styles[$handle][] = $data; + + return true; +} + +function wp_register_style($handle, $src, array $deps = [], $ver = false, $media = 'all') +{ + if (!isset(Helper::$styles[$handle])) { + Helper::$styles[$handle] = [ + 'hndl' => $handle, + 'src' => $src, + 'deps' => $deps, + 'ver' => $ver, + 'media' => $media, + ]; + } + return true; +} + +function wp_register_script($handle, $src, array $deps = [], $ver = false, $in_footer = false) +{ + if (!isset(Helper::$scripts[$handle])) { + Helper::$scripts[$handle] = [ + 'hndl' => $handle, + 'src' => $src, + 'deps' => $deps, + 'ver' => $ver, + 'head' => !$in_footer, + 'l10n' => [], + ]; + } + return true; +} + +if (is_admin() || \Tools::getValue('render') === 'widget') { + function wp_enqueue_style($handle, $src = '', array $deps = [], $ver = false, $media = 'all') + { + empty($src) or wp_register_style($handle, $src, $deps, $ver, $media); + + if (!empty(Helper::$styles[$handle]) && empty(Helper::$head_styles[$handle])) { + foreach (Helper::$styles[$handle]['deps'] as $dep) { + wp_enqueue_style($dep); + } + + Helper::$head_styles[$handle] = &Helper::$styles[$handle]; + unset(Helper::$styles[$handle]); + } + } + + function wp_enqueue_script($handle, $src = '', array $deps = [], $ver = false, $in_footer = false) + { + empty($src) or wp_register_script($handle, $src, $deps, $ver, $in_footer); + + if (!empty(Helper::$scripts[$handle]) && empty(Helper::$head_scripts[$handle]) && empty(Helper::$body_scripts[$handle])) { + foreach (Helper::$scripts[$handle]['deps'] as $dep) { + wp_enqueue_script($dep); + } + + if (Helper::$scripts[$handle]['head']) { + Helper::$head_scripts[$handle] = &Helper::$scripts[$handle]; + } else { + Helper::$body_scripts[$handle] = &Helper::$scripts[$handle]; + } + unset(Helper::$scripts[$handle]); + } + } +} else { + function wp_enqueue_style($handle, $src = '', array $deps = [], $ver = false, $media = 'all') + { + empty($src) or wp_register_style($handle, $src, $deps, $ver, $media); + + if (!empty(Helper::$styles[$handle])) { + $args = &Helper::$styles[$handle]; + $path = $args['src']; + $params = [ + 'server' => strrpos($path, '://') === false ? 'local' : 'remote', + 'media' => $args['media'], + ]; + + foreach ($args['deps'] as $dep) { + wp_enqueue_style($dep); + } + empty($args['ver']) or $path .= (strrpos($path, '?') === false ? '?v=' : '&v=') . $args['ver']; + + \CEAssetManager::instance()->registerStylesheet($handle, $path, $params); + + unset(Helper::$styles[$handle]); + } + } + function wp_enqueue_script($handle, $src = '', array $deps = [], $ver = false, $in_footer = false) + { + empty($src) or wp_register_script($handle, $src, $deps, $ver, $in_footer); + + if (!empty(Helper::$scripts[$handle])) { + $args = &Helper::$scripts[$handle]; + $path = $args['src']; + $params = [ + 'server' => strrpos($path, '://') === false ? 'local' : 'remote', + 'position' => $args['head'] ? 'head' : 'bottom', + ]; + + foreach ($args['deps'] as $dep) { + wp_enqueue_script($dep); + } + empty($args['ver']) or $path .= (strrpos($path, '?') === false ? '?v=' : '&v=') . $args['ver']; + + \CEAssetManager::instance()->registerJavascript($handle, $args['src'], $params); + + empty($args['l10n']) or \Media::addJsDef($args['l10n']); + + unset(Helper::$scripts[$handle]); + } + } +} + +function wp_localize_script($handle, $object_name, $l10n) +{ + if (isset(Helper::$scripts[$handle])) { + Helper::$scripts[$handle]['l10n'][$object_name] = $l10n; + } else { + throw new \PrestaShopException('Missing script handle: ' . $handle); + } +} + +function wp_enqueue_scripts() +{ + if (is_admin()) { + wp_enqueue_script('jquery', _CE_ASSETS_URL_ . 'lib/jquery/jquery.js', [], '1.12.4'); + wp_enqueue_script('jquery-ui', _CE_ASSETS_URL_ . 'lib/jquery/jquery-ui.min.js', ['jquery'], '1.11.4.custom', true); + + wp_register_style('wp-color-picker', _CE_ASSETS_URL_ . 'lib/wp-color-picker/wp-color-picker.min.css', [], '1.0.7'); + + wp_register_script('iris', _CE_ASSETS_URL_ . 'lib/iris/iris.min.js', ['jquery-ui-draggable', 'jquery-ui-slider'], '1.1.1', true); + wp_register_script('wp-color-picker', _CE_ASSETS_URL_ . 'lib/wp-color-picker/wp-color-picker.min.js', ['iris'], false, true); + + wp_localize_script('wp-color-picker', 'wpColorPickerL10n', [ + 'clear' => __('Clear'), + 'defaultString' => __('Default'), + 'pick' => __('Select Color'), + 'current' => __('Current Color'), + ]); + + wp_register_script('underscore', _CE_ASSETS_URL_ . 'lib/underscore/underscore.min.js', [], '1.8.3', true); + wp_register_script('backbone', _CE_ASSETS_URL_ . 'lib/backbone/backbone.min.js', ['jquery', 'underscore'], '1.4.0', true); + } + do_action('wp_enqueue_scripts'); +} + +function wp_print_styles() +{ + while ($args = array_shift(Helper::$head_styles)) { + $handle = $args['hndl']; + + if ($args['ver']) { + $args['src'] .= (strrpos($args['src'], '?') === false ? '?' : '&') . 'v=' . $args['ver']; + } + echo '' . PHP_EOL; + + if (!empty(Helper::$inline_styles[$handle])) { + $inline_styles = &Helper::$inline_styles[$handle]; + + foreach ($inline_styles as $i => &$style) { + echo '' . PHP_EOL; + unset($inline_styles[$i]); + } + } + } +} + +function wp_print_head_scripts() +{ + while ($args = array_shift(Helper::$head_scripts)) { + _print_script($args); + } +} + +function wp_print_footer_scripts() +{ + while ($args = array_shift(Helper::$body_scripts)) { + _print_script($args); + } +} + +function _print_script(&$args) +{ + if (!empty($args['l10n'])) { + echo '' . PHP_EOL; + } + if (!empty($args['ver'])) { + $args['src'] .= (strrpos($args['src'], '?') === false ? '?' : '&') . 'v=' . $args['ver']; + } + if (!empty($args['src'])) { + echo '' . PHP_EOL; + } +} + +function print_og_image() +{ + if ($og_image = get_post_meta(get_the_ID(), '_og_image', true)) { + $og_image_url = Helper::getMediaLink($og_image, true); + + echo '' . PHP_EOL; + } +} + +function __return_false() +{ + return false; +} + +function set_transient($transient, $value, $expiration = 0) +{ + $expiration = (int) $expiration; + $tr_timeout = '_tr_to_' . $transient; + $tr_option = '_tr_' . $transient; + $id_shop = \Context::getContext()->shop->id; + + if (false === get_post_meta($id_shop, $tr_option, true)) { + if ($expiration) { + update_post_meta($id_shop, $tr_timeout, time() + $expiration); + } + $result = update_post_meta($id_shop, $tr_option, $value); + } else { + $update = true; + if ($expiration) { + if (false === get_post_meta($id_shop, $tr_timeout, true)) { + update_post_meta($id_shop, $tr_timeout, time() + $expiration); + $result = update_post_meta($id_shop, $tr_option, $value); + $update = false; + } else { + update_post_meta($id_shop, $tr_timeout, time() + $expiration); + } + } + if ($update) { + $result = update_post_meta($id_shop, $tr_option, $value); + } + } + + return $result; +} + +function get_transient($transient) +{ + $tr_option = '_tr_' . $transient; + $tr_timeout = '_tr_to_' . $transient; + $id_shop = \Context::getContext()->shop->id; + $timeout = get_post_meta($id_shop, $tr_timeout, true); + + if (false !== $timeout && $timeout < time()) { + delete_option($tr_option); + delete_option($tr_timeout); + return false; + } + return get_post_meta($id_shop, $tr_option, true); +} + +function __($text, $module = 'creativeelements') +{ + return translate($text, $module); +} + +function _x($text, $ctx, $module = 'creativeelements') +{ + return translate($text, $module, $ctx); +} + +function _n($single, $plural, $number, $module = 'creativeelements') +{ + return translate($number > 1 ? $plural : $single, $module); +} + +if (isset(${'_GET'}['en'])) { + function translate($text, $module = 'creativeelements', $ctx = '') + { + return $text; + } + + function esc_attr__($text, $module = 'creativeelements') + { + return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); + } +} else { + function translate($text, $module = 'creativeelements', $ctx = '') + { + $src = $ctx ? str_replace(' ', '_', \Tools::strtolower($ctx)) : ''; + + return call_user_func('stripslashes', \Translate::getModuleTranslation($module, $text, $src, null, true)); + } + + function esc_attr__($text, $module = 'creativeelements') + { + return \Translate::getModuleTranslation($module, $text, ''); + } +} + +function esc_attr($text) +{ + return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); +} + +function esc_html($text) +{ + return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); +} + +function esc_url($url) +{ + if (!$url) { + return $url; + } + $url = str_replace(' ', '%20', $url); + $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', '', $url); + if ('' === $url) { + return $url; + } + $url = str_replace(';//', '://', $url); + if (strpos($url, ':') === false && !in_array($url[0], ['/', '#', '?']) && + !preg_match('/^[a-z0-9-]+?\.php/i', $url)) { + $url = 'http://' . $url; + } + return $url; +} + +function sanitize_html_class($class, $fallback = '') +{ + return ($class = preg_replace('/%[a-f\d]{2}|[^\w\-]/i', '', $class)) ? $class : $fallback; +} + +function home_url() +{ + return __PS_BASE_URI__; +} + +function wp_send_json($response/*, $status_code = null*/) +{ + headers_sent() or header('Content-Type: application/json; charset=utf-8'); + + die(json_encode($response)); +} + +function wp_send_json_success($data = null) +{ + $response = ['success' => true]; + if (isset($data)) { + $response['data'] = $data; + } + wp_send_json($response); +} + +function wp_send_json_error($data = null) +{ + $response = ['success' => false]; + if (isset($data)) { + $response['data'] = $data; + } + wp_send_json($response); +} + +function get_locale() +{ + return \Context::getContext()->language->iso_code; +} + +function is_rtl() +{ + return (bool) \Context::getContext()->language->is_rtl; +} + +function is_admin() +{ + // fix: _PS_ADMIN_DIR_ is defined on frontend by cronjobs module + return defined('_PS_BO_ALL_THEMES_DIR_'); +} + +function is_singular() +{ + // todo: set false when editing theme + return UId::$_ID && UId::$_ID->id_type !== UId::CONTENT; +} + +function wp_get_document_title() +{ + return 'TODO'; +} + +function wp_referer() +{ + $protocol = \Tools::getShopProtocol(); + $id_shop = \Configuration::getGlobalValue('PS_SHOP_DEFAULT'); + return $protocol . ('http://' === $protocol ? \ShopUrl::getMainShopDomain($id_shop) : \ShopUrl::getMainShopDomainSSL($id_shop)); +} + +function wp_http() +{ + $context = \Context::getContext(); + $module_key = $context->controller->module->module_key; + return [ + 'user_agent' => $_SERVER['SERVER_SOFTWARE'], + 'max_redirects' => 5, + 'header' => [ + 'Cache-Control: no-cache', + 'Cookie: ' . md5(\Tools::substr(_COOKIE_KEY_, 0, 24) . $module_key) . + '=' . hash('sha256', _COOKIE_IV_ . date('Y-m-d')), + 'Pragma: no-cache', + 'Referer: ' . wp_referer(), + ], + ]; +} + +function is_preview() +{ + return (bool) \CreativeElements::getPreviewUId(false); +} + +function is_customize_preview() +{ + return \Context::getContext()->controller instanceof \CreativeElementsPreviewModuleFrontController; +} + +function get_option($option, $default = false) +{ + if (false === $res = \Configuration::get($option)) { + return $default; + } + return isset($res[0]) && ('{' == $res[0] || '[' == $res[0]) ? json_decode($res, true) : $res; +} + +function update_option($option, $value) +{ + if (is_array($value) || is_object($value)) { + $value = json_encode($value); + } + $purify = \Configuration::get('PS_USE_HTMLPURIFIER'); + empty($purify) or \Configuration::set('PS_USE_HTMLPURIFIER', 0); + + $res = \Configuration::updateValue($option, [$value], true); + + if (\Shop::CONTEXT_SHOP !== $shop_ctx = \Shop::getContext()) { + $groups = \Shop::CONTEXT_ALL === $shop_ctx ? new \stdClass() : false; + + foreach (\Shop::getContextListShopID() as $id_shop) { + $id_shop_group = \Shop::getGroupFromShop($id_shop); + + if ($groups && empty($groups->$id_shop_group)) { + $groups->$id_shop_group = true; + + $res &= \Configuration::updateValue($option, [$value], true, $id_shop_group); + } + $res &= \Configuration::updateValue($option, [$value], true, $id_shop_group, $id_shop); + } + } + empty($purify) or \Configuration::set('PS_USE_HTMLPURIFIER', 1); + + return $res; +} + +function delete_option($option) +{ + return \Configuration::deleteByName($option); +} + +function get_current_user_id() +{ + static $id_employee; + + if (null === $id_employee) { + if (is_admin()) { + $ctx = \Context::getContext(); + $id_employee = isset($ctx->employee->id) ? (int) $ctx->employee->id : 0; + } else { + $lifetime = max((int) \Configuration::get('PS_COOKIE_LIFETIME_BO'), 1); + $cookie = new \Cookie('psAdmin', '', time() + $lifetime * 3600); + $id_employee = isset($cookie->id_employee) ? (int) $cookie->id_employee : 0; + } + } + return $id_employee; +} + +function get_user_by($field, $value) +{ + if ('id' != $field) { + throw new \RuntimeException('TODO'); + } + if (!\Validate::isLoadedObject($user = new \Employee($value))) { + return false; + } + return (object) [ + 'ID' => $user->id, + 'display_name' => $user->firstname . ' ' . $user->lastname, + 'roles' => [], + ]; +} + +function wp_upload_dir() +{ + return [ + 'basedir' => _CE_PATH_ . 'views', + 'baseurl' => _CE_URL_ . 'views', + ]; +} + +function wp_remote_post($url, array $args = []) +{ + $http = array_merge_recursive(wp_http(), [ + 'method' => 'POST', + 'header' => [ + 'Content-Type: application/x-www-form-urlencoded', + ], + 'content' => empty($args['body']) ? '' : http_build_query($args['body']), + 'timeout' => empty($args['timeout']) ? 5 : $args['timeout'], + ]); + + if (ini_get('allow_url_fopen')) { + $http['header'] = implode("\r\n", $http['header']); + + return \Tools::file_get_contents($url, false, stream_context_create(['http' => $http]), $http['timeout']); + } + + $ch = curl_init($url); + curl_setopt_array($ch, [ + CURLOPT_POST => 1, + CURLOPT_HTTPHEADER => (array) $http['header'], + CURLOPT_USERAGENT => $http['user_agent'], + CURLOPT_POSTFIELDS => $http['content'], + CURLOPT_MAXREDIRS => $http['max_redirects'], + CURLOPT_TIMEOUT => $http['timeout'], + CURLOPT_RETURNTRANSFER => 1, + ]); + $resp = curl_exec($ch); + curl_close($ch); + + return $resp; +} + +function wp_remote_get($url, array $args = []) +{ + $http = array_merge(wp_http(), [ + 'method' => 'GET', + 'timeout' => empty($args['timeout']) ? 5 : $args['timeout'], + ]); + + if (!empty($args['body'])) { + $url .= (strpos($url, '?') === false ? '?' : '&') . http_build_query($args['body']); + } + + if (ini_get('allow_url_fopen')) { + $http['header'] = implode("\r\n", $http['header']); + + return \Tools::file_get_contents($url, false, stream_context_create(['http' => $http]), $http['timeout']); + } + + $ch = curl_init($url); + curl_setopt_array($ch, [ + CURLOPT_HTTPHEADER => (array) $http['header'], + CURLOPT_USERAGENT => $http['user_agent'], + CURLOPT_MAXREDIRS => $http['max_redirects'], + CURLOPT_TIMEOUT => $http['timeout'], + CURLOPT_RETURNTRANSFER => 1, + ]); + $resp = curl_exec($ch); + curl_close($ch); + + return $resp; +} + +const MINUTE_IN_SECONDS = 60; +const HOUR_IN_SECONDS = 3600; +const DAY_IN_SECONDS = 86400; +const WEEK_IN_SECONDS = 604800; +const MONTH_IN_SECONDS = 2592000; +const YEAR_IN_SECONDS = 31536000; + +function human_time_diff($from, $to = '') +{ + empty($to) && $to = time(); + $diff = (int) abs($to - $from); + + if ($diff < MINUTE_IN_SECONDS) { + $secs = $diff; + if ($secs <= 1) { + $secs = 1; + } + $since = sprintf(_n('%s sec', '%s secs', $secs), $secs); + } elseif ($diff < HOUR_IN_SECONDS) { + $mins = round($diff / MINUTE_IN_SECONDS); + if ($mins <= 1) { + $mins = 1; + } + $since = sprintf(_n('%s min', '%s mins', $mins), $mins); + } elseif ($diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS) { + $hours = round($diff / HOUR_IN_SECONDS); + if ($hours <= 1) { + $hours = 1; + } + $since = sprintf(_n('%s hour', '%s hours', $hours), $hours); + } elseif ($diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS) { + $days = round($diff / DAY_IN_SECONDS); + if ($days <= 1) { + $days = 1; + } + $since = sprintf(_n('%s day', '%s days', $days), $days); + } elseif ($diff < MONTH_IN_SECONDS && $diff >= WEEK_IN_SECONDS) { + $weeks = round($diff / WEEK_IN_SECONDS); + if ($weeks <= 1) { + $weeks = 1; + } + $since = sprintf(_n('%s week', '%s weeks', $weeks), $weeks); + } elseif ($diff < YEAR_IN_SECONDS && $diff >= MONTH_IN_SECONDS) { + $months = round($diff / MONTH_IN_SECONDS); + if ($months <= 1) { + $months = 1; + } + $since = sprintf(_n('%s month', '%s months', $months), $months); + } elseif ($diff >= YEAR_IN_SECONDS) { + $years = round($diff / YEAR_IN_SECONDS); + if ($years <= 1) { + $years = 1; + } + $since = sprintf(_n('%s year', '%s years', $years), $years); + } + return $since; +} + +function add_query_arg(array $args, $url) +{ + return $url . (strrpos($url, '?') === false ? '?' : '&') . http_build_query($args); +} + +function do_shortcode($content) +{ + if (false === strrpos($content, '}')) { + return $content; + } + return preg_replace_callback( + '~(

\s*)?\{(hook|\$\w+(?:\.\w+|->\w+)*|widget|include)([^\}]*)\}(\s*

)?~', + 'CE\parse_shortcode', + $content + ); +} + +function parse_shortcode($match) +{ + isset($match[4]) or $match[4] = ''; + + if ('$' === $match[2][0]) { + $result = parse_var($match[2]); + $modifier = trim($match[3]); + + if ($modifier && $modifier !== 'nofilter') { + $result = "Unknown modifier: $modifier"; + } elseif (is_array($result) || $result instanceof \PrestaShop\PrestaShop\Adapter\Presenter\AbstractLazyArray) { + $array = []; + foreach ($result as $key => $value) { + $array[$key] = is_array($value) ? 'Array(…)' : ( + is_object($value) ? get_class($value) . ' Object(…)' : $value + ); + } + $result = '
' . print_r($array, true) . '
'; + } elseif (is_object($result)) { + $object = (object) []; + foreach ($result as $key => $value) { + $object->$key = is_array($value) ? 'Array(…)' : ( + is_object($value) ? get_class($value) . ' Object(…)' : $value + ); + } + $result = '
' . get_class($result) . substr(print_r($object, true), 8) . '
'; + } elseif (!$modifier) { + $result = esc_attr((string) $result); + } + return ($match[1] xor $match[4]) ? $match[1] . $result . $match[4] : $result; + } + if (!preg_match_all('~\s+(\w+)\s*=\s*(\$?\w+|".*?"|\'.*?\'|\[.*?\])~', $match[3], $args, PREG_SET_ORDER) || + !function_exists($func = 'smarty' . $match[2]) + ) { + return $match[0]; + } + $params = []; + $smarty = null; + + foreach ($args as $arg) { + if ('[' === $arg[2][0]) { + $array = []; + $count = preg_match_all( + '~\s*,\s*(?:(\w+|".*?"|\'.*?\')\s*=>\s*)?(\w+|".*?"|\'.*?\')~', + ',' . trim($arg[2], '[]'), + $elems, + PREG_SET_ORDER + ); + if ($count) { + foreach ($elems as $elem) { + $val = parse_native($elem[2]); + + if ($elem[1]) { + $key = parse_native($elem[1]); + + $array[$key] = $val; + } else { + $array[] = $val; + } + } + } + $params[$arg[1]] = $array; + } else { + $params[$arg[1]] = parse_native($arg[2]); + } + } + $ajax = \Tools::getIsset('ajax'); + $edit = Plugin::$instance->editor->isEditMode(); + + if ($edit && !$ajax) { + ${'_GET'}['ajax'] = 1; + } + $result = $func($params, $smarty); + + if ($edit && !$ajax) { + unset(${'_GET'}['ajax']); + } + return ($match[1] xor $match[4]) ? $match[1] . $result . $match[4] : $result; +} + +function parse_native($native) +{ + if ('$' === $native[0]) { + return parse_var($native); + } + if ("'" === $native[0]) { + return str_replace('\\\\', '\\', trim($native, "'")); + } + $result = json_decode($native); + + return json_last_error() === JSON_ERROR_NONE ? $result : $native; +} + +function parse_var($var) +{ + preg_match_all('/(^\$|\.|->)(\w+)/', $var, $matches); + + $vars = &\Context::getContext()->smarty->tpl_vars; + $count = count($matches[0]); + $prefixes = &$matches[1]; + $keys = &$matches[2]; + $key = $count ? $keys[0] : ''; + + if (isset($vars[$key]->value)) { + $result = $vars[$key]->value; + } else { + return null; + } + + for ($i = 1; $i < $count; $i++) { + $key = $keys[$i]; + $prefix = $prefixes[$i]; + + if ('.' === $prefix && is_array($result) && isset($result[$key])) { + $result = $result[$key]; + } elseif ('->' === $prefix && isset($result->$key)) { + $result = $result->$key; + } else { + return null; + } + } + return $result; +} + +function wp_nonce_tick() +{ + return ceil(time() / (DAY_IN_SECONDS / 2)); +} + +function wp_create_nonce($action = -1) +{ + $employee = \Context::getContext()->employee; + $id = isset($employee->id) ? (int) $employee->id : 0; + $tick = wp_nonce_tick(); + $salt = \Tools::hashIV('nonce'); + + return \Tools::substr(call_user_func('hash_hmac', 'md5', "$tick|$action|$id|" . _COOKIE_KEY_, $salt), -12, 10); +} + +function wp_verify_nonce($nonce, $action = -1) +{ + return wp_create_nonce($action) === $nonce; +} + +function wp_kses_post($html) +{ + static $purifier; + + if (null === $purifier) { + $config = \HTMLPurifier_Config::createDefault(); + $config->set('Attr.EnableID', true); + $config->set('Attr.AllowedRel', ['nofollow']); + $config->set('HTML.Trusted', true); + $config->set('Cache.SerializerPath', _PS_CACHE_DIR_ . 'purifier'); + $config->set('Attr.AllowedFrameTargets', ['_blank', '_self', '_parent', '_top']); + + // http://developers.whatwg.org/the-video-element.html#the-video-element + if ($def = $config->getHTMLDefinition(true)) { + $def->addElement('video', 'Block', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', [ + 'src' => 'URI', + 'type' => 'Text', + 'width' => 'Length', + 'height' => 'Length', + 'poster' => 'URI', + 'preload' => 'Enum#auto,metadata,none', + 'controls' => 'Bool', + ]); + $def->addElement('source', 'Block', 'Flow', 'Common', [ + 'src' => 'URI', + 'type' => 'Text', + ]); + $def->addElement('style', 'Block', 'Flow', 'Common', ['type' => 'Text']); + } + $purifier = new \HTMLPurifier($config); + } + return $purifier->purify($html); +} diff --git a/modules/creativeelements/classes/wrappers/Post.php b/modules/creativeelements/classes/wrappers/Post.php new file mode 100644 index 00000000..bb525791 --- /dev/null +++ b/modules/creativeelements/classes/wrappers/Post.php @@ -0,0 +1,625 @@ +uid; + break; + case 'ID': + case 'post_ID': + $val = $this->id; + break; + case 'post_type': + $val = $this->model; + break; + case 'post_status': + $active = property_exists($this->_obj, 'active') ? 'active' : ( + property_exists($this->_obj, 'enabled') ? 'enabled' : 'actif' + ); + $val = $this->_obj->$active ? 'publish' : 'private'; + break; + default: + throw new \RuntimeException('Unknown property: ' . $prop); + } + return $val; + } + + public function __set($prop, $val) + { + switch ($prop) { + case 'ID': + case 'post_ID': + // allow change only when starts with zero + empty($this->id[0]) && $this->id = "$val"; + break; + case 'post_type': + // readonly + break; + case 'post_status': + $active = property_exists($this->_obj, 'active') ? 'active' : 'actif'; + $this->_obj->$active = 'publish' == $val; + break; + default: + throw new \RuntimeException('Unknown property: ' . $prop); + } + } + + public function getLangId() + { + return (int) \Tools::substr($this->id, -4, 2); + } + + public static function getInstance(UId $uid, array &$postarr = null) + { + $self = new self(); + $self->id = "$uid"; + $self->uid = $uid; + $self->model = $uid->getModel(); + $objectModel = '\\' . $self->model; + + if ($postarr) { + $obj = (object) $postarr; + } elseif ($uid->id_type <= UId::TEMPLATE) { + $obj = new $objectModel($uid->id ? $uid->id : null); + } elseif ($uid->id_type === UId::PRODUCT) { + $obj = new \Product($uid->id, false, $uid->id_lang, $uid->id_shop); + } else { + $obj = new $objectModel($uid->id, $uid->id_lang, $uid->id_shop); + } + $self->_obj = $obj; + + if (in_array($uid->id_type, [UId::REVISION, UId::TEMPLATE, UId::THEME])) { + $self->template_type = &$obj->type; + } elseif ($uid->id_type === UId::CONTENT) { + $self->template_type = 'content'; + } + + property_exists($obj, 'id_employee') && $self->post_author = &$obj->id_employee; + property_exists($obj, 'parent') && $self->post_parent = &$obj->parent; + property_exists($obj, 'date_add') && $self->post_date = &$obj->date_add; + property_exists($obj, 'date_upd') && $self->post_modified = &$obj->date_upd; + + if (property_exists($obj, 'title')) { + $self->post_title = &$obj->title; + } elseif (property_exists($obj, 'name')) { + $self->post_title = &$obj->name; + } elseif (property_exists($obj, 'meta_title')) { + $self->post_title = &$obj->meta_title; + } + + if (property_exists($obj, 'content')) { + $self->post_content = &$obj->content; + } elseif (property_exists($obj, 'description')) { + $self->post_content = &$obj->description; + } elseif (property_exists($obj, 'post_content')) { + $self->post_content = &$obj->post_content; + } + return $self; + } +} + +function get_post($post = null, $output = 'OBJECT', $filter = 'raw') +{ + if (null === $post || 0 === $post) { + $post = get_the_ID(); + } + + if (false === $post || $post instanceof WPPost) { + $_post = $post; + } elseif ($post instanceof UId) { + $_post = WPPost::getInstance($post); + } elseif (is_numeric($post)) { + $_post = WPPost::getInstance(UId::parse($post)); + } else { + _doing_it_wrong(__CLASS__ . '::' . __FUNCTION__, 'Invalid $post argument!'); + } + + if (!$_post) { + return null; + } + if ('OBJECT' !== $output || 'raw' !== $filter) { + throw new \RuntimeException('todo'); + } + return $_post; +} + +function get_post_status($post = null) +{ + if ($_post = get_post($post)) { + return $_post->post_status; + } + return false; +} + +function wp_update_post($postarr = [], $wp_error = false) +{ + if (is_array($postarr)) { + $id_key = isset($postarr['ID']) ? 'ID' : 'post_ID'; + + if (empty($postarr[$id_key])) { + _doing_it_wrong(__FUNCTION__, 'ID is missing!'); + } + $post = get_post($postarr[$id_key]); + + foreach ($postarr as $key => $value) { + $post->$key = $value; + } + } elseif ($postarr instanceof WPPost) { + $post = $postarr; + } + + if (!isset($post) || $wp_error) { + throw new \RuntimeException('TODO'); + } + // Fix for required lang properties must be defined on default language + $id_lang_def = \Configuration::get('PS_LANG_DEFAULT'); + \Configuration::set('PS_LANG_DEFAULT', $post->uid->id_lang); + + try { + // Fix: category groups would lose after save + if ($post->_obj instanceof \Category) { + $post->_obj->groupBox = $post->_obj->getGroups(); + } + $res = @$post->_obj->update(); + } catch (\Exception $ex) { + $res = false; + } + \Configuration::set('PS_LANG_DEFAULT', $id_lang_def); + + return $res ? $post->ID : 0; +} + +function wp_insert_post(array $postarr, $wp_error = false) +{ + $is_revision = 'CERevision' === $postarr['post_type']; + + if ($wp_error || !$is_revision && 'CETemplate' != $postarr['post_type']) { + throw new \RuntimeException('TODO'); + } + $uid = new UId(0, $is_revision ? UId::REVISION : UId::TEMPLATE); + $post = WPPost::getInstance($uid); + $postarr['post_author'] = \Context::getContext()->employee->id; + + foreach ($postarr as $key => &$value) { + $post->$key = $value; + } + if ($post->_obj->add()) { + $uid->id = $post->_obj->id; + $post->ID = "$uid"; + } else { + $post->ID = 0; + } + return $post->ID; +} + +function wp_delete_post($postid, $force_delete = false) +{ + $post = get_post($postid); + + return $post->_obj->delete() || $force_delete ? $post : false; +} + +function get_post_meta($id, $key = '', $single = false) +{ + if (false === $id) { + return $id; + } + $table = _DB_PREFIX_ . 'ce_meta'; + $id = ($uid = UId::parse($id)) ? $uid->toDefault() : preg_replace('/\D+/', '', $id); + + if (!is_numeric($id)) { + _doing_it_wrong(__FUNCTION__, 'Id must be numeric!'); + } + if (!$key) { + $res = []; + $rows = \Db::getInstance()->executeS("SELECT name, value FROM $table WHERE id = $id"); + + if (!empty($rows)) { + foreach ($rows as &$row) { + $key = &$row['name']; + $val = &$row['value']; + + isset($res[$key]) or $res[$key] = []; + $res[$key][] = isset($val[0]) && ('{' == $val[0] || '[' == $val[0] || '"' == $val[0]) ? json_decode($val, true) : $val; + } + } + return $res; + } + $key = preg_replace('/\W+/', '', $key); + + if (!$single) { + throw new \RuntimeException('TODO'); + } + $val = \Db::getInstance()->getValue("SELECT value FROM $table WHERE id = $id AND name = '$key'"); + + return isset($val[0]) && ('{' == $val[0] || '[' == $val[0] || '"' == $val[0]) ? json_decode($val, true) : $val; +} + +function update_post_meta($id, $key, $value, $prev_value = '') +{ + if ($prev_value) { + throw new \RuntimeException('TODO'); + } + $db = \Db::getInstance(); + $table = _DB_PREFIX_ . 'ce_meta'; + $res = true; + $ids = ($uid = UId::parse($id)) ? $uid->getListByShopContext() : (array) $id; + $data = [ + 'name' => preg_replace('/\W+/', '', $key), + 'value' => $db->escape(is_array($value) || is_object($value) ? json_encode($value) : $value, true), + ]; + foreach ($ids as $id) { + $data['id'] = preg_replace('/\D+/', '', $id); + $id_ce_meta = $db->getValue("SELECT id_ce_meta FROM $table WHERE id = {$data['id']} AND name = '{$data['name']}'"); + + if ($id_ce_meta) { + $data['id_ce_meta'] = (int) $id_ce_meta; + $type = \Db::REPLACE; + } else { + unset($data['id_ce_meta']); + $type = \Db::INSERT; + } + $res &= $db->insert($table, $data, false, true, $type, false); + } + return $res; +} + +function delete_post_meta($id, $key, $value = '') +{ + if ($value) { + throw new \RuntimeException('TODO'); + } + $ids = ($uid = UId::parse($id)) ? $uid->getListByShopContext() : (array) $id; + + foreach ($ids as &$id) { + $id = preg_replace('/\D+/', '', $id); + } + if (count($ids) > 1) { + $in = 'IN'; + $ids = '(' . implode(', ', $ids) . ')'; + } else { + $in = '='; + $ids = $ids[0]; + } + $key = preg_replace('/[^\w\%]+/', '', $key); + $like = strrpos($key, '%') === false ? '=' : 'LIKE'; + + return \Db::getInstance()->delete('ce_meta', "id $in $ids AND name $like '$key'"); +} + +function get_post_type($post = null) +{ + $uid = uidval($post, null); + + return $uid ? $uid->getModel() : false; +} + +function get_post_type_object($post_type) +{ + // todo + return !$post_type ? null : (object) [ + 'cap' => (object) [ + 'edit_post' => 'edit', + 'edit_posts' => 'edit', + 'publish_posts' => 'edit', + ], + ]; +} + +function current_user_can($capability, $args = null) +{ + if (is_admin()) { + $employee = \Context::getContext()->employee; + } elseif ($id_employee = get_current_user_id()) { + $employee = new \Employee($id_employee); + } + + if (empty($employee->id_profile)) { + return false; + } + if ('manage_options' === $capability) { + return true; + } + if ($uid = uidval($args, false)) { + $controller = $uid->getAdminController(); + } elseif (stripos($args, 'Admin') === 0) { + $controller = $args; + } else { + return false; + } + + if ('AdminModules' === $controller) { + $id_module = \Module::getModuleIdByName($uid->getModule()); + $action = 'view' === $capability ?: 'configure'; + $result = \Module::getPermissionStatic($id_module, $action, $employee); + } else { + $id_tab = \Tab::getIdFromClassName($controller); + $access = \Profile::getProfileAccess($employee->id_profile, $id_tab); + $result = '1' === $access[$capability]; + } + return $result; +} + +function wp_set_post_lock($post_id) +{ + if (!$user_id = get_current_user_id()) { + return false; + } + $now = time(); + + update_post_meta($post_id, '_edit_lock', "$now:$user_id"); + + return [$now, $user_id]; +} + +function wp_check_post_lock($post_id) +{ + if (!$lock = get_post_meta($post_id, '_edit_lock', true)) { + return false; + } + list($time, $user) = explode(':', $lock); + + if (empty($user)) { + return false; + } + $time_window = apply_filters('wp_check_post_lock_window', 150); + + if ($time && $time > time() - $time_window && $user != get_current_user_id()) { + return (int) $user; + } + return false; +} + +function wp_create_post_autosave(array $post_data) +{ + $post_id = isset($post_data['ID']) ? $post_data['ID'] : $post_data['post_ID']; + + unset($post_data['ID'], $post_data['post_ID']); + + // Autosave already deleted in saveEditor method + $autosave = wp_get_post_autosave($post_id, get_current_user_id()); + + if ($autosave) { + foreach ($post_data as $key => $value) { + $autosave->$key = $value; + } + return $autosave->_obj->update() ? $autosave->ID : 0; + } + $post_data['post_type'] = 'CERevision'; + $post_data['post_status'] = 'private'; + $post_data['post_parent'] = $post_id; + + $autosave_id = wp_insert_post($post_data); + + if ($autosave_id) { + do_action('_wp_put_post_revision', $autosave_id); + + return $autosave_id; + } + return 0; +} + +function wp_is_post_autosave($post) +{ + $uid = uidval($post); + + if (UId::REVISION !== $uid->id_type) { + return false; + } + $table = _DB_PREFIX_ . 'ce_revision'; + + return \Db::getInstance()->getValue( + "SELECT parent FROM $table WHERE id_ce_revision = {$uid->id} AND active = 0" + ); +} + +function wp_get_post_autosave($post_id, $user_id = 0) +{ + $uid = uidval($post_id); + + if (UId::REVISION === $uid->id_type) { + return false; + } + $table = _DB_PREFIX_ . 'ce_revision'; + $parent = $uid->toDefault(); + $id_employee = (int) ($user_id ? $user_id : get_current_user_id()); + + $id = \Db::getInstance()->getValue( + "SELECT id_ce_revision FROM $table WHERE parent = $parent AND active = 0 AND id_employee = $id_employee" + ); + return $id ? WPPost::getInstance(new UId($id, UId::REVISION)) : false; +} + +function wp_get_post_parent_id($post_id) +{ + if (!$post = get_post($post_id)) { + return false; + } + return !empty($post->_obj->parent) ? $post->_obj->parent : 0; +} + +function wp_get_post_revisions($post_id, $args = null) +{ + $uid = uidval($post_id); + $parent = $uid->toDefault(); + $revisions = []; + $table = _DB_PREFIX_ . 'ce_revision'; + $fields = !empty($args['fields']) && 'ids' === $args['fields'] ? 'id_ce_revision' : '*'; + $id_employee = (int) \Context::getContext()->employee->id; + $limit = !empty($args['posts_per_page']) ? 'LIMIT 1, ' . (int) $args['posts_per_page'] : ''; + + $rows = \Db::getInstance()->executeS( + "SELECT $fields FROM $table + WHERE parent = $parent AND (active = 1 OR id_employee = $id_employee) + ORDER BY date_upd DESC $limit" + ); + if ($rows) { + foreach ($rows as &$row) { + $uid = new UId($row['id_ce_revision'], UId::REVISION); + + if ('*' === $fields) { + $row['id'] = $row['id_ce_revision']; + $revisions[] = WPPost::getInstance($uid, $row); + } else { + $revisions[] = "$uid"; + } + } + } + return $revisions; +} + +function wp_is_post_revision($post) +{ + $revision = get_post($post); + + return !empty($revision->_obj->parent) ? $revision->_obj->parent : false; +} + +function wp_save_post_revision(WPPost $post) +{ + if (UId::REVISION === $post->uid->id_type) { + return; + } + + $revisions_to_keep = (int) \Configuration::get('elementor_max_revisions'); + + if (!$revisions_to_keep) { + return; + } + + $db = \Db::getInstance(); + $table = _DB_PREFIX_ . 'ce_revision'; + $id_employee = \Context::getContext()->employee->id; + + foreach (array_reverse($post->uid->getListByShopContext(true)) as $parent) { + $revisions = $db->executeS( + "SELECT id_ce_revision AS id FROM $table WHERE parent = $parent AND active = 1 ORDER BY date_upd DESC" + ); + $return = wp_insert_post([ + 'post_type' => 'CERevision', + 'post_status' => 'publish', + 'post_author' => $id_employee, + 'post_parent' => "$parent", + 'post_title' => $post->post_title, + 'post_content' => $post->post_content, + 'template_type' => $post->template_type, + ]); + if (!$return) { + $return = 0; + continue; + } + do_action('_wp_put_post_revision', $return); + + for ($i = $revisions_to_keep - 1; isset($revisions[$i]); $i++) { + wp_delete_post_revision(new UId($revisions[$i]['id'], UId::REVISION)); + } + } + return $return; +} + +function wp_delete_post_revision($revision_id) +{ + $revision = get_post($revision_id); + + if ('CERevision' !== $revision->post_type) { + return false; + } + return $revision->_obj->delete(); +} + +function get_post_statuses() +{ + return [ + 'private' => __('Disabled'), + 'publish' => __('Enabled'), + ]; +} + +function get_page_templates(WPPost $post = null, $post_type = 'CMS') +{ + $templates = []; + + foreach (\Context::getContext()->shop->theme->get('meta.available_layouts') as $name => &$layout) { + $templates[$name] = 'layout-full-width' === $name ? __('One Column') : $layout['name']; + } + $post_type = $post ? $post->post_type : $post_type; + + if ('Product' === $post_type && \Configuration::get('CE_PRODUCT')) { + $templates = []; + } + + return apply_filters("theme_{$post_type}_templates", $templates, $post); +} + +function current_theme_supports() +{ + // todo + return false; +} + +function get_post_types_by_support($feature, $operator = 'and') +{ + if ('elementor' !== $feature || 'and' !== $operator) { + throw new \RuntimeException('TODO'); + } + return [ + 'CETemplate', + 'CETheme', + 'CMS', + 'CMSCategory', + ]; +} + +function post_type_supports($post_type, $feature) +{ + if ('elementor' === $feature) { + return true; + } + if ('excerpt' === $feature) { + return false; + } + throw new \RuntimeException('TODO: ' . $feature); +} + +function post_type_exists($post_type) +{ + return UId::getTypeId($post_type) >= 0 ? true : false; +} + +function setup_postdata($uid) +{ + UId::$_ID = uidval($uid); +} diff --git a/modules/creativeelements/classes/wrappers/UId.php b/modules/creativeelements/classes/wrappers/UId.php new file mode 100644 index 00000000..3f6c032b --- /dev/null +++ b/modules/creativeelements/classes/wrappers/UId.php @@ -0,0 +1,574 @@ + 'ybc_blog', + self::XIPBLOG_POST => 'xipblog', + self::STBLOG_POST => 'stblog', + self::ADVANCEBLOG_POST => 'advanceblog', + self::PRESTABLOG_POST => 'prestablog', + self::SIMPLEBLOG_POST => 'ph_simpleblog', + self::PSBLOG_POST => 'psblog', + self::HIBLOG_POST => 'hiblog', + self::TVCMSBLOG_POST => 'tvcmsblog', + ]; + private static $shop_ids = []; + + public static $_ID; + + public function __construct($id, $id_type, $id_lang = null, $id_shop = null) + { + $this->id = abs((int) $id); + $this->id_type = abs($id_type % 100); + + if ($this->id_type <= self::TEMPLATE) { + $this->id_lang = 0; + $this->id_shop = 0; + } else { + is_null($id_lang) && $id_lang = \Context::getContext()->language->id; + + $this->id_lang = abs($id_lang % 100); + $this->id_shop = $id_shop ? abs($id_shop % 100) : 0; + } + } + + public function getModel() + { + if (empty(self::$models[$this->id_type])) { + throw new \RuntimeException('Unknown ObjectModel'); + } + return self::$models[$this->id_type]; + } + + public function getAdminController() + { + if (empty(self::$admins[$this->id_type])) { + throw new \RuntimeException('Unknown AdminController'); + } + if ((int) \Tools::getValue('footerProduct')) { + return self::$admins[self::PRODUCT]; + } + return self::$admins[$this->id_type]; + } + + public function getModule() + { + return isset(self::$modules[$this->id_type]) ? self::$modules[$this->id_type] : ''; + } + + /** + * Get shop ID list where the object is allowed + * + * @param bool $all Get all or just by shop context + * + * @return array + */ + public function getShopIdList($all = false) + { + if ($this->id_type <= self::TEMPLATE) { + return [0]; + } + if (isset(self::$shop_ids[$this->id_type][$this->id])) { + return self::$shop_ids[$this->id_type][$this->id]; + } + isset(self::$shop_ids[$this->id_type]) or self::$shop_ids[$this->id_type] = []; + + $ids = []; + $model = $this->getModel(); + $def = &$model::${'definition'}; + $db = \Db::getInstance(); + $table = $db->escape(_DB_PREFIX_ . $def['table'] . '_shop'); + $primary = $db->escape($def['primary']); + $id = (int) $this->id; + $ctx_ids = implode(', ', $all ? \Shop::getShops(true, null, true) : \Shop::getContextListShopID()); + $rows = $db->executeS( + "SELECT id_shop FROM $table WHERE $primary = $id AND id_shop IN ($ctx_ids)" + ); + if ($rows) { + foreach ($rows as &$row) { + $ids[] = $row['id_shop']; + } + } + return self::$shop_ids[$this->id_type][$this->id] = $ids; + } + + public function getDefaultShopId() + { + return ($ids = $this->getShopIdList()) ? $ids[0] : 0; + } + + /** + * Get UId list by shop context + * + * @param bool $strict Collect only from allowed shops + * + * @return array + */ + public function getListByShopContext($strict = false) + { + if ($this->id_shop || $this->id_type <= self::TEMPLATE) { + return ["$this"]; + } + $list = []; + $ids = $strict ? $this->getShopIdList() : \Shop::getContextListShopID(); + + foreach ($ids as $id_shop) { + $this->id_shop = $id_shop; + $list[] = "$this"; + } + $this->id_shop = 0; + + return $list; + } + + /** + * Get Language ID list of CE built contents + * + * @return array + */ + public function getBuiltLangIdList() + { + $ids = []; + + if (self::TEMPLATE === $this->id_type) { + $ids[] = 0; + } elseif (self::CONTENT === $this->id_type || self::THEME === $this->id_type) { + foreach (\Language::getLanguages(false) as $lang) { + $ids[] = (int) $lang['id_lang']; + } + } else { + $id_shop = $this->id_shop ?: $this->getDefaultShopId(); + $uids = self::getBuiltList($this->id, $this->id_type, $id_shop); + + empty($uids[$id_shop]) or $ids = array_keys($uids[$id_shop]); + } + return $ids; + } + + public function toDefault() + { + $id_shop = $this->id_shop ?: $this->getDefaultShopId(); + + return sprintf('%d%02d%02d%02d', $this->id, $this->id_type, $this->id_lang, $id_shop); + } + + public function __toString() + { + return sprintf('%d%02d%02d%02d', $this->id, $this->id_type, $this->id_lang, $this->id_shop); + } + + public static function parse($id) + { + if ($id instanceof UId) { + return $id; + } + if (!is_numeric($id) || \Tools::strlen($id) <= 6) { + return false; + } + return new self( + \Tools::substr($id, 0, -6), + \Tools::substr($id, -6, 2), + \Tools::substr($id, -4, 2), + \Tools::substr($id, -2) + ); + } + + public static function getTypeId($model) + { + $model = \Tools::strtolower($model); + return 'cms_category' === $model + ? self::CMS_CATEGORY + : array_search($model, array_map('strtolower', self::$models)) + ; + } + + /** + * Get UId list of CE built contents grouped by shop(s) + * + * @param int $id + * @param int $id_type + * @param int|null $id_shop + * + * @return array [ + * id_shop => [ + * id_lang => UId, + * ], + * ] + */ + public static function getBuiltList($id, $id_type, $id_shop = null) + { + $uids = []; + $table = _DB_PREFIX_ . 'ce_meta'; + $shop = null === $id_shop ? '__' : '%02d'; + $__id = sprintf("%d%02d__$shop", $id, $id_type, $id_shop); + $rows = \Db::getInstance()->executeS( + "SELECT id FROM $table WHERE id LIKE '$__id' AND name = '_elementor_edit_mode'" + ); + if ($rows) { + foreach ($rows as &$row) { + $uid = self::parse($row['id']); + isset($uids[$uid->id_shop]) or $uids[$uid->id_shop] = []; + $uids[$uid->id_shop][$uid->id_lang] = $uid; + } + } + return $uids; + } +} + +function absint($num) +{ + if ($num instanceof UId) { + return $num; + } + $absint = preg_replace('/\D+/', '', $num); + + return $absint ?: 0; +} + +function get_user_meta($user_id, $key = '', $single = false) +{ + return get_post_meta($user_id, '_u_' . $key, $single); +} + +function update_user_meta($user_id, $key, $value, $prev_value = '') +{ + return update_post_meta($user_id, '_u_' . $key, $value, $prev_value); +} + +function get_the_ID() +{ + if (!UId::$_ID && $uid_preview = \CreativeElements::getPreviewUId(false)) { + UId::$_ID = $uid_preview; + } + if (UId::$_ID) { + return UId::$_ID; + } + $controller = \Context::getContext()->controller; + + if ($controller instanceof \AdminCEEditorController || + $controller instanceof \CreativeElementsPreviewModuleFrontController + ) { + $id_key = \Tools::getIsset('editor_post_id') ? 'editor_post_id' : 'template_id'; + + return UId::parse(\Tools::getValue('uid', \Tools::getValue($id_key))); + } + return false; +} + +function get_preview_post_link($post = null, array $args = [], $relative = true) +{ + $uid = uidval($post); + $ctx = \Context::getContext(); + $id_shop = $uid->id_shop ?: $uid->getDefaultShopId(); + $args['id_employee'] = $ctx->employee->id; + $args['adtoken'] = \Tools::getAdminTokenLite($uid->getAdminController()); + $args['preview_id'] = $uid->toDefault(); + + switch ($uid->id_type) { + case UId::REVISION: + throw new \RuntimeException('TODO'); + case UId::TEMPLATE: + $type = \CETemplate::getTypeById($uid->id); + $id_shop = $ctx->shop->id; + // continue + case UId::THEME: + isset($type) or $type = \CETheme::getTypeById($uid->id); + $id_lang = $uid->id_lang ?: $ctx->language->id; + + if ('product' === $type || 'product-quick-view' === $type || 'product-miniature' === $type) { + $document = Plugin::$instance->documents->getDocOrAutoSave($uid, get_current_user_id()); + $settings = $document->getData('settings'); + + empty($settings['preview_id']) or $prod = new \Product($settings['preview_id'], false, $id_lang); + + if (empty($prod->id)) { + $prods = \Product::getProducts($id_lang, 0, 1, 'date_upd', 'DESC', false, true); + $prod = new \Product(!empty($prods[0]['id_product']) ? $prods[0]['id_product'] : null, false, $id_lang); + } + $prod_attr = empty($prod->cache_default_attribute) ? 0 : $prod->cache_default_attribute; + empty($prod->active) && empty($args['preview']) && $args['preview'] = 1; + + $link = $ctx->link->getProductLink($prod, null, null, null, $id_lang, $id_shop, $prod_attr, false, $relative); + } elseif ('page-contact' === $type) { + $link = $ctx->link->getPageLink('contact', null, $id_lang, null, false, $id_shop, $relative); + } elseif ('page-not-found' === $type) { + $link = $ctx->link->getPageLink('pagenotfound', null, $id_lang, null, false, $id_shop, $relative); + } elseif ('page-index' === $type || 'header' === $type || 'footer' === $type) { + $link = $ctx->link->getPageLink('index', null, $id_lang, null, false, $id_shop, $relative); + + \Configuration::get('PS_REWRITING_SETTINGS') && $link = preg_replace('~[^/]+$~', '', $link); + } else { + $link = $ctx->link->getModuleLink('creativeelements', 'preview', [], null, null, null, $relative); + } + break; + case UId::CONTENT: + $hook = \Tools::strtolower(\CEContent::getHookById($uid->id)); + + if (in_array($hook, Helper::$productHooks)) { + if ($id_product = (int) \Tools::getValue('footerProduct')) { + $args['footerProduct'] = $id_product; + $prod = new \Product($id_product, false, $uid->id_lang, $id_shop); + } else { + $prods = \Product::getProducts($uid->id_lang, 0, 1, 'date_upd', 'DESC', false, true); + $prod = new \Product(!empty($prods[0]['id_product']) ? $prods[0]['id_product'] : null, false, $uid->id_lang); + } + $prod_attr = empty($prod->cache_default_attribute) ? 0 : $prod->cache_default_attribute; + empty($prod->active) && empty($args['preview']) && $args['preview'] = 1; + + $link = $ctx->link->getProductLink($prod, null, null, null, $uid->id_lang, $id_shop, $prod_attr, false, $relative); + break; + } + $page = 'index'; + + if (stripos($hook, 'shoppingcart') !== false) { + $page = 'cart'; + $args['action'] = 'show'; + } elseif ('displayleftcolumn' === $hook || 'displayrightcolumn' === $hook) { + $layout = 'r' != $hook[7] ? 'layout-left-column' : 'layout-right-column'; + $layouts = $ctx->shop->theme->get('theme_settings')['layouts']; + unset($layouts['category']); + + if ($key = array_search($layout, $layouts)) { + $page = $key; + } elseif ($key = array_search('layout-both-columns', $layouts)) { + $page = $key; + } + } elseif ('displaynotfound' === $hook) { + $page = 'search'; + } elseif ('displaymaintenance' === $hook) { + $args['maintenance'] = 1; + } + $link = $ctx->link->getPageLink($page, null, $uid->id_lang, null, false, $id_shop, $relative); + + if ('index' === $page && \Configuration::get('PS_REWRITING_SETTINGS')) { + // Remove rewritten URL if exists + $link = preg_replace('~[^/]+$~', '', $link); + } + break; + case UId::PRODUCT: + $prod = new \Product($uid->id, false, $uid->id_lang, $id_shop); + $prod_attr = !empty($prod->cache_default_attribute) ? $prod->cache_default_attribute : 0; + empty($prod->active) && empty($args['preview']) && $args['preview'] = 1; + + $link = $ctx->link->getProductLink($prod, null, null, null, $uid->id_lang, $id_shop, $prod_attr, false, $relative); + break; + case UId::CATEGORY: + $link = $ctx->link->getCategoryLink($uid->id, null, $uid->id_lang, null, $id_shop, $relative); + break; + case UId::CMS: + $link = $ctx->link->getCmsLink($uid->id, null, null, $uid->id_lang, $id_shop, $relative); + break; + case UId::YBC_BLOG_POST: + $link = \Module::getInstanceByName('ybc_blog')->getLink('blog', ['id_post' => $uid->id], $uid->id_lang); + break; + case UID::XIPBLOG_POST: + $link = call_user_func('XipBlog::xipBlogPostLink', ['id' => $uid->id]); + break; + case UId::STBLOG_POST: + $post = new \StBlogClass($uid->id, $uid->id_lang); + + $link = $ctx->link->getModuleLink('stblog', 'article', [ + 'id_st_blog' => $uid->id, + 'id_blog' => $uid->id, + 'rewrite' => $post->link_rewrite, + ], null, $uid->id_lang, null, $relative); + break; + case UId::ADVANCEBLOG_POST: + $post = new \BlogPosts($uid->id, $uid->id_lang); + $args['blogtoken'] = $args['adtoken']; + unset($args['adtoken']); + + $link = $ctx->link->getModuleLink('advanceblog', 'detail', [ + 'id' => $uid->id, + 'post' => $post->link_rewrite, + ], null, $uid->id_lang, null, $relative); + break; + case UId::PRESTABLOG_POST: + $post = new \NewsClass($uid->id, $uid->id_lang); + empty($post->actif) && $args['preview'] = \Module::getInstanceByName('prestablog')->generateToken($uid->id); + + $link = call_user_func('PrestaBlog::prestablogUrl', [ + 'id' => $uid->id, + 'seo' => $post->link_rewrite, + 'titre' => $post->title, + 'id_lang' => $uid->id_lang, + ]); + break; + case UId::SIMPLEBLOG_POST: + $post = new \SimpleBlogPost($uid->id, $uid->id_lang, $uid->id_shop); + $cat = new \SimpleBlogCategory($post->id_simpleblog_category, $uid->id_lang, $uid->id_shop); + + $link = call_user_func('SimpleBlogPost::getLink', $post->link_rewrite, $cat->link_rewrite); + break; + case UId::PSBLOG_POST: + $post = new \PsBlogBlog($uid->id, $uid->id_lang, $uid->id_shop); + + $link = call_user_func('PsBlogHelper::getInstance')->getBlogLink([ + 'id_psblog_blog' => $post->id, + 'link_rewrite' => $post->link_rewrite, + ]); + break; + case UId::HIBLOG_POST: + $post = new \HiBlogPost($uid->id, $uid->id_lang, $uid->id_shop); + + $link = \Module::getInstanceByName('hiblog')->returnBlogFrontUrl($post->id, $post->friendly_url, 'post'); + break; + case UID::TVCMSBLOG_POST: + $link = call_user_func('TvcmsBlog::tvcmsBlogPostLink', [ + 'id' => $uid->id, + 'rewrite' => call_user_func('TvcmsPostsClass::getTheRewrite', $uid->id), + ]); + break; + default: + $method = "get{$uid->getModel()}Link"; + + $link = $ctx->link->$method($uid->id, null, $uid->id_lang, $id_shop, $relative); + break; + } + return explode('#', $link)[0] . (strrpos($link, '?') === false ? '?' : '&') . http_build_query($args); +} + +function uidval($var, $fallback = -1) +{ + if (null === $var) { + return get_the_ID(); + } + if ($var instanceof UId) { + return $var; + } + if ($var instanceof WPPost) { + return $var->uid; + } + if (is_numeric($var)) { + return UId::parse($var); + } + if ($fallback !== -1) { + return $fallback; + } + throw new \RuntimeException('Can not convert to UId'); +} + +function get_edit_post_link($post_id) +{ + $uid = uidval($post_id); + $ctx = \Context::getContext(); + $id = $uid->id; + $model = $uid->getModel(); + $admin = $uid->getAdminController(); + + switch ($uid->id_type) { + case UId::REVISION: + throw new \RuntimeException('TODO'); + case UId::YBC_BLOG_POST: + $link = $ctx->link->getAdminLink($admin) . '&' . http_build_query([ + 'configure' => 'ybc_blog', + 'tab_module' => 'front_office_features', + 'module_name' => 'ybc_blog', + 'control' => 'post', + 'id_post' => $id, + ]); + break; + case UId::PRESTABLOG_POST: + $link = $ctx->link->getAdminLink($admin) . "&configure=prestablog&editNews&idN=$id"; + break; + case UId::CONTENT: + if (\Tools::getIsset('footerProduct')) { + $id = (int) \Tools::getValue('footerProduct'); + $model = 'Product'; + $admin = 'AdminProducts'; + } + // Continue default case + default: + $def = &$model::${'definition'}; + $args = [ + $def['primary'] => $id, + "update{$def['table']}" => 1, + ]; + $link = $ctx->link->getAdminLink($admin, true, $args) . '&' . http_build_query($args); + break; + } + return $link; +} diff --git a/modules/creativeelements/classes/wrappers/index.php b/modules/creativeelements/classes/wrappers/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/classes/wrappers/index.php @@ -0,0 +1,8 @@ + + + creativeelements + + + + + + 1 + 1 + + \ No newline at end of file diff --git a/modules/creativeelements/config_pl.xml b/modules/creativeelements/config_pl.xml new file mode 100644 index 00000000..ecf93774 --- /dev/null +++ b/modules/creativeelements/config_pl.xml @@ -0,0 +1,12 @@ + + + creativeelements + + + + + + 1 + 1 + + \ No newline at end of file diff --git a/modules/creativeelements/controllers/admin/AdminCEContentController.php b/modules/creativeelements/controllers/admin/AdminCEContentController.php new file mode 100644 index 00000000..b74d1d42 --- /dev/null +++ b/modules/creativeelements/controllers/admin/AdminCEContentController.php @@ -0,0 +1,309 @@ +displayWarning( + $this->trans('You are in a multistore context: any modification will impact all your shops, or each shop of the active group.', [], 'Admin.Catalog.Notification') + ); + } + + $table_shop = _DB_PREFIX_ . $this->table . '_shop'; + $this->_select = 'sa.*'; + $this->_join = "LEFT JOIN $table_shop sa ON sa.id_ce_content = a.id_ce_content AND b.id_shop = sa.id_shop"; + $this->_where = "AND sa.id_shop = " . (int) $this->context->shop->id . " AND a.id_product = 0"; + + $this->fields_list = [ + 'id_ce_content' => [ + 'title' => $this->trans('ID', [], 'Admin.Global'), + 'class' => 'fixed-width-xs', + 'align' => 'center', + ], + 'title' => [ + 'title' => $this->trans('Title', [], 'Admin.Global'), + ], + 'hook' => [ + 'title' => $this->trans('Position', [], 'Admin.Global'), + 'class' => 'fixed-width-xl', + ], + 'date_add' => [ + 'title' => $this->trans('Created on', [], 'Modules.Facetedsearch.Admin'), + 'filter_key' => 'sa!date_add', + 'class' => 'fixed-width-lg', + 'type' => 'datetime', + ], + 'date_upd' => [ + 'title' => $this->l('Modified on'), + 'filter_key' => 'sa!date_upd', + 'class' => 'fixed-width-lg', + 'type' => 'datetime', + ], + 'active' => [ + 'title' => $this->trans('Displayed', [], 'Admin.Global'), + 'filter_key' => 'sa!active', + 'class' => 'fixed-width-xs', + 'align' => 'center', + 'active' => 'status', + 'type' => 'bool', + ], + ]; + + $this->bulk_actions = [ + 'delete' => [ + 'text' => $this->trans('Delete selected', [], 'Admin.Notifications.Info'), + 'icon' => 'fa fa-icon-trash', + 'confirm' => $this->trans('Delete selected items?', [], 'Admin.Notifications.Info'), + ], + ]; + } + + public function ajaxProcessHideEditor() + { + $id = (int) Tools::getValue('id'); + $id_type = (int) Tools::getValue('idType'); + + $uids = CE\UId::getBuiltList($id, $id_type, $this->context->shop->id); + $res = empty($uids) ? $uids : array_keys($uids[$this->context->shop->id]); + + die(json_encode($res)); + } + + public function ajaxProcessMigrate() + { + if ($ids = Tools::getValue('ids')) { + require_once _CE_PATH_ . 'classes/CEMigrate.php'; + + $done = []; + + foreach ($ids as $id) { + CEMigrate::moveContent($id, $this->module) && $done[] = (int) $id; + } + $res = CEMigrate::removeIds('content', $done); + + die(json_encode($res)); + } + } + + public function setMedia($isNewTheme = false) + { + parent::setMedia($isNewTheme); + + $this->addJquery(); + $this->js_files[] = _MODULE_DIR_ . 'creativeelements/views/lib/e-select2/js/e-select2.full.min.js?v=4.0.6-rc1'; + $this->css_files[_MODULE_DIR_ . 'creativeelements/views/lib/e-select2/css/e-select2.min.css?v=4.0.6-rc1'] = 'all'; + } + + public function initHeader() + { + parent::initHeader(); + + $display_suppliers = Configuration::get('PS_DISPLAY_SUPPLIERS'); + $display_manufacturers = version_compare(_PS_VERSION_, '1.7.7', '<') + ? $display_suppliers + : Configuration::get('PS_DISPLAY_MANUFACTURERS'); + $id_lang = $this->context->language->id; + $link = $this->context->link; + $tabs = &$this->context->smarty->tpl_vars['tabs']->value; + + foreach ($tabs as &$tab0) { + foreach ($tab0['sub_tabs'] as &$tab1) { + if ('AdminParentCEContent' === $tab1['class_name']) { + foreach ($tab1['sub_tabs'] as &$tab2) { + if ('AdminCEContent' === $tab2['class_name']) { + $sub_tabs = &$tab2['sub_tabs']; + + $tab = Tab::getTab($id_lang, Tab::getIdFromClassName('AdminCEContent')); + $tab['current'] = true; + $tab['href'] = $link->getAdminLink('AdminCEContent'); + $sub_tabs[] = $tab; + + $tab = Tab::getTab($id_lang, Tab::getIdFromClassName('AdminCmsContent')); + $tab['current'] = ''; + $tab['href'] = $link->getAdminLink('AdminCmsContent'); + $sub_tabs[] = $tab; + + $tab = Tab::getTab($id_lang, Tab::getIdFromClassName('AdminProducts')); + $tab['current'] = ''; + $tab['href'] = $link->getAdminLink('AdminProducts'); + $sub_tabs[] = $tab; + + $tab = Tab::getTab($id_lang, Tab::getIdFromClassName('AdminCategories')); + $tab['current'] = ''; + $tab['href'] = $link->getAdminLink('AdminCategories'); + $sub_tabs[] = $tab; + + if ($display_manufacturers) { + $tab = Tab::getTab($id_lang, Tab::getIdFromClassName('AdminManufacturers')); + $tab['current'] = ''; + $tab['href'] = $link->getAdminLink('AdminManufacturers'); + $sub_tabs[] = $tab; + } + + if ($display_suppliers) { + $tab = Tab::getTab($id_lang, Tab::getIdFromClassName('AdminSuppliers')); + $tab['current'] = ''; + $tab['href'] = $link->getAdminLink('AdminSuppliers'); + $sub_tabs[] = $tab; + } + + return; + } + } + } + } + } + } + + public function initToolBarTitle() + { + $this->page_header_toolbar_title = $this->l('Place Content Anywhere'); + + $this->context->smarty->assign('icon', 'icon-list'); + + $this->toolbar_title[] = $this->l('Contents List'); + } + + public function initPageHeaderToolbar() + { + if (empty($this->display)) { + $this->page_header_toolbar_btn['addce_content'] = [ + 'href' => self::$currentIndex . '&addce_content&token=' . $this->token, + 'desc' => $this->trans('Add new', [], 'Admin.Actions'), + 'icon' => 'process-icon-new', + ]; + } + parent::initPageHeaderToolbar(); + } + + public function initContent() + { + $this->context->smarty->assign('current_tab_level', 3); + + return parent::initContent(); + } + + public function renderList() + { + $this->addRowAction('edit'); + $this->addRowAction('delete'); + + return parent::renderList(); + } + + public function renderForm() + { + $col = count(Language::getLanguages(false, false, true)) > 1 ? 9 : 7; + + version_compare(_PS_VERSION_, '1.7.8', '<') or $col--; + + $this->fields_form = [ + 'legend' => [ + 'title' => $this->l('Content'), + 'icon' => 'icon-edit', + ], + 'input' => [ + [ + 'type' => 'text', + 'label' => $this->trans('Title', [], 'Admin.Global'), + 'name' => 'title', + 'lang' => true, + 'col' => $col, + ], + [ + 'type' => 'text', + 'label' => $this->trans('Position', [], 'Admin.Global'), + 'name' => 'hook', + 'required' => true, + 'col' => 3, + ], + [ + 'type' => 'textarea', + 'label' => $this->l('Content'), + 'name' => 'content', + 'lang' => true, + 'col' => $col, + ], + [ + 'type' => 'switch', + 'label' => $this->trans('Displayed', [], 'Admin.Global'), + 'name' => 'active', + 'required' => false, + 'is_bool' => true, + 'values' => [ + [ + 'id' => 'active_on', + 'value' => 1, + 'label' => $this->trans('Enabled', [], 'Admin.Global'), + ], + [ + 'id' => 'active_off', + 'value' => 0, + 'label' => $this->trans('Disabled', [], 'Admin.Global'), + ], + ], + ], + ], + 'submit' => [ + 'title' => $this->trans('Save', [], 'Admin.Actions'), + ], + 'buttons' => [ + 'save_and_stay' => [ + 'type' => 'submit', + 'title' => $this->trans('Save and stay', [], 'Admin.Actions'), + 'icon' => 'process-icon-save', + 'name' => 'submitAddce_contentAndStay', + 'class' => 'btn btn-default pull-right', + ], + ], + ]; + + if (Shop::isFeatureActive()) { + $this->fields_form['input'][] = [ + 'type' => 'shop', + 'label' => $this->trans('Shop association', [], 'Admin.Global'), + 'name' => 'checkBoxShopAsso', + ]; + } + + return parent::renderForm(); + } + + protected function trans($id, array $parameters = [], $domain = null, $locale = null) + { + return empty($this->translator) ? $this->l($id) : parent::trans($id, $parameters, $domain, $locale); + } + + protected function l($string, $module = 'creativeelements', $addslashes = false, $htmlentities = true) + { + $str = Translate::getModuleTranslation($module, $string, '', null, $addslashes || !$htmlentities); + + return $htmlentities ? $str : call_user_func('stripslashes', $str); + } +} diff --git a/modules/creativeelements/controllers/admin/AdminCEEditorController.php b/modules/creativeelements/controllers/admin/AdminCEEditorController.php new file mode 100644 index 00000000..d77d5667 --- /dev/null +++ b/modules/creativeelements/controllers/admin/AdminCEEditorController.php @@ -0,0 +1,378 @@ +uid = CE\UId::parse(Tools::getValue('uid')); + + if (!empty($this->uid->id_shop) && $this->uid->id_type > CE\UId::TEMPLATE && Shop::getContext() > 1) { + ${'_POST'}['setShopContext'] = 's-' . $this->uid->id_shop; + } + parent::initShopContext(); + } + + public function init() + { + if (isset($this->context->cookie->last_activity)) { + if ($this->context->cookie->last_activity + 900 < time()) { + $this->context->employee->logout(); + } else { + $this->context->cookie->last_activity = time(); + } + } + + if (!isset($this->context->employee) || !$this->context->employee->isLoggedBack()) { + if (isset($this->context->employee)) { + $this->context->employee->logout(); + } + Tools::redirectAdmin($this->context->link->getAdminLink('AdminLogin') . '&redirect=' . $this->controller_name); + } + + $this->initProcess(); + } + + public function initCursedPage() + { + if ($this->ajax) { + CE\wp_send_json_error('token_expired'); + } + parent::initCursedPage(); + } + + public function initProcess() + { + header('Cache-Control: no-store, no-cache'); + + $this->ajax = Tools::getIsset('ajax'); + $this->action = Tools::getValue('action', ''); + $this->tabAccess = Profile::getProfileAccess($this->context->employee->id_profile, $this->id); + + if (Shop::isFeatureActive() && $this->uid && !$this->ajax) { + $domain = Tools::getShopProtocol() === 'http://' ? 'domain' : 'domain_ssl'; + + if ($this->context->shop->$domain != $_SERVER['HTTP_HOST'] && $this->viewAccess()) { + CE\update_post_meta(0, 'cookie', $this->context->cookie->getAll()); + + $id_shop = $this->uid->id_shop ?: $this->uid->getDefaultShopId(); + + Tools::redirectAdmin( + $this->context->link->getModuleLink('creativeelements', 'preview', [ + 'id_employee' => $this->context->employee->id, + 'adtoken' => Tools::getAdminTokenLite('AdminCEEditor'), + 'redirect' => urlencode($_SERVER['REQUEST_URI']), + ], true, $this->uid->id_lang, $id_shop) + ); + } + } + CE\Plugin::instance(); + } + + public function postProcess() + { + $process = 'process' . Tools::toCamelCase($this->action, true); + + if ($this->ajax) { + method_exists($this, "ajax$process") && $this->{"ajax$process"}(); + + if ('elementor_ajax' === $this->action) { + CE\add_action('elementor/ajax/register_actions', [$this, 'registerAjaxActions']); + } + CE\do_action('wp_ajax_' . $this->action); + } elseif ($this->action && method_exists($this, $process)) { + // Call process + return $this->$process(); + } + + return false; + } + + public function initContent() + { + $this->viewAccess() or die(CE\Helper::transError('You do not have permission to view this.')); + + empty($this->uid) && Tools::redirectAdmin($this->context->link->getAdminLink('AdminCEContent')); + + CE\add_action('elementor/editor/before_enqueue_scripts', [$this, 'beforeEnqueueScripts']); + + CE\Plugin::instance()->editor->init(); + } + + public function beforeEnqueueScripts() + { + $suffix = _PS_MODE_DEV_ ? '' : '.min'; + + // Enqueue CE assets + CE\wp_enqueue_style('ce-editor', _CE_ASSETS_URL_ . 'css/editor-ce.css', [], _CE_VERSION_); + CE\wp_register_script('ce-editor', _CE_ASSETS_URL_ . 'js/editor-ce.js', [], _CE_VERSION_, true); + CE\wp_localize_script('ce-editor', 'baseDir', __PS_BASE_URI__); + CE\wp_enqueue_script('ce-editor'); + + // Enqueue TinyMCE assets + CE\wp_enqueue_style('material-icons', _CE_ASSETS_URL_ . 'lib/material-icons/material-icons.css', [], '1.012'); + CE\wp_enqueue_style('tinymce-theme', _CE_ASSETS_URL_ . "lib/tinymce/ps-theme{$suffix}.css", [], _CE_VERSION_); + + CE\wp_register_script('tinymce', _PS_JS_DIR_ . 'tiny_mce/tinymce.min.js', ['jquery'], false, true); + CE\wp_register_script('tinymce-inc', _CE_ASSETS_URL_ . 'lib/tinymce/tinymce.inc.js', ['tinymce'], _CE_VERSION_, true); + + CE\wp_localize_script('tinymce', 'baseAdminDir', __PS_BASE_URI__ . basename(_PS_ADMIN_DIR_) . '/'); + CE\wp_localize_script('tinymce', 'iso_user', CE\get_locale()); + + CE\wp_enqueue_script('tinymce-inc'); + } + + public function processBackToPsEditor() + { + if (CE\current_user_can('edit', $this->uid)) { + CE\Plugin::instance()->db->setIsElementorPage($this->uid, false); + } + Tools::redirectAdmin($_SERVER['HTTP_REFERER']); + } + + public function processAddFooterProduct() + { + if (!$this->uid->id || $this->uid->id_type != CE\UId::PRODUCT) { + Tools::redirectAdmin($_SERVER['HTTP_REFERER']); + } + + $content = new CEContent(); + $content->hook = 'displayFooterProduct'; + $content->id_product = $this->uid->id; + $content->active = true; + $content->title = []; + $content->content = []; + + foreach (Language::getLanguages(false) as $lang) { + $content->title[$lang['id_lang']] = 'Product Footer #' . $this->uid->id; + } + $content->save(); + + $uid = new CE\UId($content->id, CE\UId::CONTENT, $this->uid->id_lang, $this->uid->id_shop); + + Tools::redirectAdmin( + $this->context->link->getAdminLink('AdminCEEditor') . "&uid=$uid&footerProduct={$content->id_product}" + ); + } + + public function processAddMaintenance() + { + if (!$uid = Tools::getValue('uid')) { + Tools::redirectAdmin($_SERVER['HTTP_REFERER']); + } + + $content = new CEContent(); + $content->hook = 'displayMaintenance'; + $content->active = true; + $content->title = []; + $content->content = []; + + foreach (Language::getLanguages(false) as $lang) { + $id_lang = $lang['id_lang']; + + $content->title[$id_lang] = 'Maintenance'; + $content->content[$id_lang] = (string) Configuration::get('PS_MAINTENANCE_TEXT', $id_lang); + } + $content->save(); + + $id_lang = Tools::substr($uid, -4, 2); + $id_shop = Tools::substr($uid, -2); + $uid = new CE\UId($content->id, CE\UId::CONTENT, $id_lang, $id_shop); + + Tools::redirectAdmin($this->context->link->getAdminLink('AdminCEEditor') . "&uid=$uid"); + } + + public function ajaxProcessHeartbeat() + { + $response = []; + $data = isset(${'_POST'}['data']) ? (array) ${'_POST'}['data'] : []; + $screen_id = Tools::getValue('screen_id', 'front'); + + empty($data) or $response = CE\apply_filters('heartbeat_received', $response, $data, $screen_id); + + $response = CE\apply_filters('heartbeat_send', $response, $screen_id); + + CE\do_action('heartbeat_tick', $response, $screen_id); + + $response['server_time'] = time(); + + CE\wp_send_json($response); + } + + public function ajaxProcessAutocompleteLink() + { + $context = Context::getContext(); + $db = Db::getInstance(); + $ps = _DB_PREFIX_; + $search = $db->escape(Tools::getValue('search')); + $id_lang = (int) $context->language->id; + $id_shop = (int) $context->shop->id; + $limit = 10; + + $rows = $db->executeS("( + SELECT m.`id_meta` AS `ID`, ml.`title`, m.`page` AS `permalink`, 'Page' AS `info` FROM `{$ps}meta` AS m + LEFT JOIN `{$ps}meta_lang` AS ml ON m.`id_meta` = ml.`id_meta` + WHERE ml.`id_lang` = $id_lang AND ml.`id_shop` = $id_shop AND ml.`title` LIKE '%$search%' LIMIT $limit + ) UNION ( + SELECT `id_cms` AS `ID`, `meta_title` AS `title`, `link_rewrite` AS `permalink`, 'CMS' AS `info` FROM `{$ps}cms_lang` + WHERE `id_lang` = $id_lang AND `id_shop` = $id_shop AND `meta_title` LIKE '%$search%' LIMIT $limit + ) UNION ( + SELECT `id_cms_category` AS `ID`, `name` AS `title`, `link_rewrite` AS `permalink`, 'CMS Category' AS `info` FROM `{$ps}cms_category_lang` + WHERE `id_lang` = $id_lang AND `id_shop` = $id_shop AND `name` LIKE '%$search%' LIMIT $limit + ) UNION ( + SELECT `id_product` AS `ID`, `name` AS `title`, '' AS `permalink`, 'Product' AS `info` FROM `{$ps}product_lang` + WHERE `id_lang` = $id_lang AND `id_shop` = $id_shop AND `name` LIKE '%$search%' LIMIT $limit + ) UNION ( + SELECT `id_category` AS `ID`, `name` AS `title`, `link_rewrite` AS `permalink`, 'Category' AS `info` FROM `{$ps}category_lang` + WHERE `id_lang` = $id_lang AND `id_shop` = $id_shop AND `name` LIKE '%$search%' LIMIT $limit + ) UNION ( + SELECT `id_manufacturer` AS `ID`, `name` AS `title`, '' AS `permalink`, 'Brand' AS `info` FROM `{$ps}manufacturer` + WHERE `active` = 1 AND `name` LIKE '%$search%' LIMIT $limit + ) UNION ( + SELECT `id_supplier` AS `ID`, `name` AS `title`, '' AS `permalink`, 'Supplier' AS `info` FROM `{$ps}supplier` + WHERE `active` = 1 AND `name` LIKE '%$search%' LIMIT $limit + )"); + + if ($rows) { + foreach ($rows as &$row) { + switch ($row['info']) { + case 'CMS': + $row['permalink'] = $context->link->getCMSLink($row['ID'], $row['permalink'], null, $id_lang, $id_shop); + break; + case 'CMS Category': + $row['permalink'] = $context->link->getCMSCategoryLink($row['ID'], $row['permalink'], $id_lang, $id_shop); + break; + case 'Product': + $product = new Product($row['ID'], false, $id_lang, $id_shop); + $row['permalink'] = $context->link->getProductLink($product); + break; + case 'Category': + $row['permalink'] = $context->link->getCategoryLink($row['ID'], $row['permalink'], $id_lang, null, $id_shop); + break; + case 'Brand': + $row['permalink'] = $context->link->getManufacturerLink($row['ID'], Tools::link_rewrite($row['title']), $id_lang, $id_shop); + break; + case 'Supplier': + $row['permalink'] = $context->link->getSupplierLink($row['ID'], Tools::link_rewrite($row['title']), $id_lang, $id_shop); + break; + default: + $row['permalink'] = $context->link->getPageLink($row['permalink'], null, $id_lang, null, false, $id_shop); + break; + } + $row['info'] = CE\__($row['info']); + } + } + die(json_encode($rows)); + } + + public function registerAjaxActions($ajax_manager) + { + $ajax_manager->registerAjaxAction('get_language_content', [$this, 'ajaxGetLanguageContent']); + $ajax_manager->registerAjaxAction('get_products_by_id', [$this, 'ajaxGetProductsById']); + + CE\add_filter('elementor/api/get_templates/body_args', [$this, 'filterApiGetTemplateArgs']); + CE\add_filter('elementor/api/get_templates/content', [$this, 'filterApiGetTemplateContent']); + CE\add_action('elementor/document/after_save', [$this, 'onAfterSaveDocument']); + } + + public function ajaxGetLanguageContent($request) + { + $data = null; + + if (!empty($request['uid']) && $data = CE\get_post_meta($request['uid'], '_elementor_data', true)) { + CE\Plugin::$instance->db->iterateData($data, function ($element) { + $element['id'] = CE\Utils::generateRandomString(); + + return $element; + }); + } + return is_array($data) ? $data : []; + } + + public function ajaxGetProductsById($request) + { + if (empty($request['ids'])) { + return []; + } + $context = Context::getContext(); + $results = []; + $ids = implode(',', array_map('intval', $request['ids'])); + + $items = Db::getInstance()->executeS(' + SELECT p.`id_product`, pl.`link_rewrite`, p.`reference`, pl.`name`, image_shop.`id_image` id_image FROM `' . _DB_PREFIX_ . 'product` p + ' . Shop::addSqlAssociation('product', 'p') . ' + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (pl.id_product = p.id_product AND pl.id_lang = ' . (int) $context->language->id . Shop::addSqlRestrictionOnLang('pl') . ') + LEFT JOIN `' . _DB_PREFIX_ . 'image_shop` image_shop + ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop=' . (int) $context->shop->id . ') + LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) $context->language->id . ') + WHERE p.id_product IN (' . $ids . ') GROUP BY p.id_product + '); + + if ($items) { + $protocol = Tools::getShopProtocol(); + $image_size = ImageType::getFormattedName('home'); + + foreach ($items as &$item) { + $results[] = [ + 'id' => $item['id_product'], + 'name' => $item['name'] . (!empty($item['reference']) ? ' (ref: ' . $item['reference'] . ')' : ''), + 'ref' => (!empty($item['reference']) ? $item['reference'] : ''), + 'image' => str_replace('http://', $protocol, $context->link->getImageLink($item['link_rewrite'], $item['id_image'], $image_size)), + ]; + } + } + return $results; + } + + public function filterApiGetTemplateArgs($body_args) + { + $id_shop = Configuration::getGlobalValue('PS_SHOP_DEFAULT'); + $license_key = Configuration::getGlobalValue('CE_LICENSE'); + + if ($license_key) { + $body_args['license'] = $license_key; + $body_args['domain'] = Tools::getShopProtocol() === 'http://' + ? ShopUrl::getMainShopDomain($id_shop) + : ShopUrl::getMainShopDomainSSL($id_shop) + ; + } + + return $body_args; + } + + public function filterApiGetTemplateContent($content) + { + if (isset($content['error'])) { + if (isset($content['code']) && 419 == $content['code']) { + Configuration::updateGlobalValue('CE_LICENSE', ''); + } + CE\wp_send_json_error($content['error']); + } + return $content; + } + + public function onAfterSaveDocument($document) + { + // Set edit mode to builder only at save + CE\Plugin::$instance->db->setIsElementorPage($document->getPost()->uid); + } +} diff --git a/modules/creativeelements/controllers/admin/AdminCEFontsController.php b/modules/creativeelements/controllers/admin/AdminCEFontsController.php new file mode 100644 index 00000000..48ae5299 --- /dev/null +++ b/modules/creativeelements/controllers/admin/AdminCEFontsController.php @@ -0,0 +1,234 @@ +fields_list = [ + 'id_ce_font' => [ + 'title' => $this->trans('ID', [], 'Admin.Global'), + 'class' => 'fixed-width-xs', + 'align' => 'center', + ], + 'family' => [ + 'title' => $this->l('Font Name'), + ], + 'preview' => [ + 'title' => $this->l('Preview'), + 'class' => 'ce-font-preview', + 'orderby' => false, + 'search' => false, + ], + ]; + + $this->bulk_actions = [ + 'delete' => [ + 'text' => $this->l('Delete'), + 'icon' => 'icon-trash text-danger', + 'confirm' => $this->trans('Delete selected items?', [], 'Admin.Notifications.Info'), + ], + ]; + } + + public function init() + { + if ($id_ce_font = (int) Tools::getValue('id_ce_font')) { + $this->ce_font = new CEFont($id_ce_font); + } + parent::init(); + } + + public function initToolBarTitle() + { + $this->context->smarty->assign('icon', 'icon-list'); + + $this->toolbar_title[] = $this->l( + 'add' === $this->display ? 'Add New Font' : ('edit' === $this->display ? 'Edit Font' : 'Fonts List') + ); + } + + public function initPageHeaderToolbar() + { + if ('add' !== $this->display && 'edit' !== $this->display) { + $this->page_header_toolbar_btn['addce_font'] = [ + 'icon' => 'process-icon-new', + 'desc' => $this->trans('Add new', [], 'Admin.Actions'), + 'href' => self::$currentIndex . '&addce_font&token=' . $this->token, + ]; + } + parent::initPageHeaderToolbar(); + } + + public function initModal() + { + // Prevent modals + } + + protected function _childValidation() + { + if (Validate::isImageTypeName($family = Tools::getValue('family')) && + CEFont::familyAlreadyExists($family, Tools::getValue('id_ce_font')) + ) { + $this->errors[] = $this->trans('This name already exists.', [], 'Admin.Design.Notification'); + } + } + + public function validateRules($class_name = false) + { + parent::validateRules($class_name); + + if (empty($this->errors)) { + $font_face = &${'_POST'}['font_face']; + + if (!empty($_FILES['font_face']['name'])) { + $upload_error = []; + $fonts_url = 'modules/creativeelements/views/fonts/'; + $fonts_dir = _PS_ROOT_DIR_ . '/' . $fonts_url; + + foreach ($_FILES['font_face']['name'] as $i => &$font_name) { + $tmp_name = &$_FILES['font_face']['tmp_name'][$i]; + $error_code = &$_FILES['font_face']['error'][$i]; + + foreach (CEFont::getAllowedExt() as $ext) { + if (empty($font_name[$ext]['file']) || empty($tmp_name[$ext]['file'])) { + continue; + } + + if (empty($error_code[$ext]['file']) && + Tools::strtolower(pathinfo($font_name[$ext]['file'], PATHINFO_EXTENSION)) === $ext && + move_uploaded_file($tmp_name[$ext]['file'], $fonts_dir . $font_name[$ext]['file']) + ) { + $font_face[$i][$ext]['url'] = $fonts_url . $font_name[$ext]['file']; + } else { + $font_face[$i][$ext]['url'] = ''; + $upload_error[] = $font_name[$ext]['file']; + } + } + } + + if ($upload_error) { + $this->errors[] = $this->trans('An error occurred during the file upload process.', [], 'Admin.Notifications.Error') . + ' (' . implode(', ', $upload_error) . ')'; + } + } + ${'_POST'}['files'] = json_encode($font_face); + } + } + + public function setMedia($isNewTheme = false) + { + parent::setMedia($isNewTheme); + + if ($font_face = (string) $this->ce_font) { + $font_face = str_replace('{{BASE}}', $this->context->link->getMediaLink(__PS_BASE_URI__), $font_face); + $font_face = str_replace(["\n", "\t"], '', $font_face); + + $this->css_files['data:text/css,' . $font_face] = 'all'; + } + $this->css_files[_MODULE_DIR_ . 'creativeelements/views/css/custom-fonts.css?v=' . _CE_VERSION_] = 'all'; + $this->js_files[] = _MODULE_DIR_ . 'creativeelements/views/js/custom-fonts.js?v=' . _CE_VERSION_; + } + + public function getList($id_lang, $order_by = null, $order_way = null, $start = 0, $limit = null, $id_lang_shop = false) + { + parent::getList($id_lang, $order_by, $order_way, $start, $limit, $id_lang_shop); + + // Add font previews + if (!empty($this->_list)) { + foreach ($this->_list as &$row) { + $row['id'] = $row['id_ce_font']; + $row['preview'] = new CEFont($row['id']); + } + } + } + + public function renderList() + { + $this->addRowAction('edit'); + $this->addRowAction('delete'); + + return parent::renderList(); + } + + public function renderForm() + { + $this->fields_form = [ + 'legend' => [ + 'title' => $this->l('Font'), + 'icon' => 'icon-font', + ], + 'input' => [ + [ + 'type' => 'text', + 'label' => $this->l('Font Name'), + 'name' => 'family', + 'placeholder' => $this->l('Enter Font Family'), + 'required' => true, + 'col' => 8, + ], + [ + 'type' => 'hidden', + 'name' => 'files', + ], + [ + 'type' => 'html', + 'label' => $this->l('Font Files'), + 'name' => 'add_custom_font', + 'html_content' => CESmarty::capture(_CE_TEMPLATES_ . 'admin/admin.tpl', 'ce_add_custom_font'), + 'col' => 8, + ], + ], + 'submit' => [ + 'title' => $this->trans('Save', [], 'Admin.Actions'), + ], + 'buttons' => [ + 'save_and_stay' => [ + 'type' => 'submit', + 'title' => $this->trans('Save and stay', [], 'Admin.Actions'), + 'icon' => 'process-icon-save', + 'name' => 'submitAddce_fontAndStay', + 'class' => 'btn btn-default pull-right', + ], + ], + ]; + + return parent::renderForm(); + } + + protected function trans($id, array $parameters = [], $domain = null, $locale = null) + { + return empty($this->translator) ? $this->l($id) : parent::trans($id, $parameters, $domain, $locale); + } + + protected function l($string, $module = 'creativeelements', $addslashes = false, $htmlentities = true) + { + $str = Translate::getModuleTranslation($module, $string, '', null, $addslashes || !$htmlentities); + + return $htmlentities ? $str : call_user_func('stripslashes', $str); + } +} diff --git a/modules/creativeelements/controllers/admin/AdminCESettingsController.php b/modules/creativeelements/controllers/admin/AdminCESettingsController.php new file mode 100644 index 00000000..d934e007 --- /dev/null +++ b/modules/creativeelements/controllers/admin/AdminCESettingsController.php @@ -0,0 +1,510 @@ +bootstrap = true; + $this->className = 'CESettings'; + $this->table = 'configuration'; + + parent::__construct(); + + $this->fields_options['general_settings'] = [ + 'icon' => 'icon-cog', + 'title' => $this->l('General Settings'), + 'fields' => [ + 'elementor_frontend_edit' => [ + 'title' => $this->l('Show Edit Icon on Frontend'), + 'desc' => $this->l('Displays an edit icon on frontend while employee has active session. By clicking on this icon the live editor will open.'), + 'validation' => 'isBool', + 'cast' => 'intval', + 'type' => 'bool', + 'default' => '1', + ], + 'elementor_max_revisions' => [ + 'title' => $this->l('Limit Revisions'), + 'desc' => $this->l('Sets the maximum number of revisions per content.'), + 'validation' => 'isUnsignedInt', + 'cast' => 'intval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => [ + ['value' => 0, 'name' => $this->l('Disable Revision History')], + ['value' => 1, 'name' => 1], + ['value' => 2, 'name' => 2], + ['value' => 3, 'name' => 3], + ['value' => 4, 'name' => 4], + ['value' => 5, 'name' => 5], + ['value' => 10, 'name' => 10], + ['value' => 15, 'name' => 15], + ['value' => 20, 'name' => 20], + ['value' => 25, 'name' => 25], + ['value' => 30, 'name' => 30], + ], + ], + 'elementor_disable_color_schemes' => [ + 'title' => $this->l('Disable Default Colors'), + 'desc' => $this->l('If you prefer to inherit the colors from your theme, you can disable this feature.'), + 'validation' => 'isBool', + 'cast' => 'intval', + 'type' => 'bool', + 'default' => '0', + ], + 'elementor_disable_typography_schemes' => [ + 'title' => $this->l('Disable Default Fonts'), + 'desc' => $this->l('If you prefer to inherit the fonts from your theme, you can disable this feature here.'), + 'validation' => 'isBool', + 'cast' => 'intval', + 'type' => 'bool', + 'default' => '0', + ], + ], + 'submit' => [ + 'title' => $this->l('Save'), + ], + ]; + + $this->fields_options['style_settings'] = [ + 'icon' => 'icon-adjust', + 'title' => $this->l('Style Settings'), + 'fields' => [ + 'elementor_default_generic_fonts' => [ + 'title' => $this->l('Default Generic Fonts'), + 'desc' => $this->l('The list of fonts used if the chosen font is not available.'), + 'cast' => 'strval', + 'type' => 'text', + 'class' => 'fixed-width-xxl', + ], + 'elementor_container_width' => [ + 'title' => $this->l('Content Width'), + 'desc' => $this->l('Sets the default width of the content area (Default: 1140)'), + 'suffix' => 'px', + 'validation' => 'isUnsignedInt', + 'cast' => 'intval', + 'type' => 'text', + 'class' => 'fixed-width-sm', + ], + 'elementor_space_between_widgets' => [ + 'title' => $this->l('Widgets Space'), + 'desc' => $this->l('Sets the default space between widgets (Default: 20)'), + 'suffix' => 'px', + 'validation' => 'isUnsignedInt', + 'cast' => 'intval', + 'type' => 'text', + 'class' => 'fixed-width-sm', + ], + 'elementor_stretched_section_container' => [ + 'title' => $this->l('Stretched Section Fit To'), + 'desc' => $this->l('Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width.'), + 'cast' => 'strval', + 'type' => 'text', + 'class' => 'fixed-width-xxl', + ], + 'elementor_page_title_selector' => [ + 'title' => $this->l('Page Title Selector'), + 'desc' => sprintf( + $this->l("You can hide the title at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above."), + 'header.page-header' + ), + 'cast' => 'strval', + 'type' => 'text', + ], + 'elementor_page_wrapper_selector' => [ + 'title' => $this->l('Content Wrapper Selector'), + 'desc' => sprintf( + $this->l("You can clear margin, padding, max-width from content wrapper at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above."), + '#content, #wrapper, #wrapper .container' + ), + 'cast' => 'strval', + 'type' => 'text', + ], + 'elementor_viewport_lg' => [ + 'title' => $this->l('Tablet Breakpoint'), + 'desc' => sprintf($this->l('Sets the breakpoint between desktop and tablet devices. Below this breakpoint tablet layout will appear (Default: %dpx).'), 1025), + 'suffix' => 'px', + 'validation' => 'isUnsignedInt', + 'cast' => 'intval', + 'type' => 'text', + 'class' => 'fixed-width-sm', + ], + 'elementor_viewport_md' => [ + 'title' => $this->l('Mobile Breakpoint'), + 'desc' => sprintf($this->l('Sets the breakpoint between tablet and mobile devices. Below this breakpoint mobile layout will appear (Default: %dpx).'), 768), + 'suffix' => 'px', + 'validation' => 'isUnsignedInt', + 'cast' => 'intval', + 'type' => 'text', + 'class' => 'fixed-width-sm', + ], + 'elementor_global_image_lightbox' => [ + 'title' => $this->l('Image Lightbox'), + 'desc' => $this->l('Open all image links in a lightbox popup window. The lightbox will automatically work on any link that leads to an image file.'), + 'hint' => $this->l('You can customize the lightbox design by going to: Top-left hamburger icon > Global Settings > Lightbox.'), + 'validation' => 'isBool', + 'cast' => 'intval', + 'type' => 'bool', + 'default' => '1', + ], + ], + 'submit' => [ + 'title' => $this->l('Save'), + ], + ]; + + $this->fields_options['advanced_settings'] = [ + 'class' => 'ce-adv-settings', + 'icon' => 'icon-cogs', + 'title' => $this->l('Advanced Settings'), + 'info' => CESmarty::sprintf(_CE_TEMPLATES_ . 'admin/admin.tpl', 'ce_alert', 'warning', $this->l( + 'Do not change these options without experience, incorrect settings might break your site.' + )), + 'fields' => [ + 'elementor_css_print_method' => [ + 'title' => $this->l('CSS Print Method'), + 'desc' => $this->l('Use external CSS files for all generated stylesheets. Choose this setting for better performance (recommended).'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => [ + ['value' => 'external', 'name' => $this->l('External File')], + ['value' => 'internal', 'name' => $this->l('Internal Embedding')], + ], + ], + 'elementor_edit_buttons' => [ + 'title' => $this->l('Editing Handles'), + 'desc' => $this->l('Show editing handles when hovering over the element edit button.'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => [ + ['value' => '', 'name' => $this->l('Hide')], + ['value' => 'on', 'name' => $this->l('Show')], + ], + ], + 'elementor_exclude_modules' => [ + 'title' => $this->l('Exclude Categories from Module widget'), + 'type' => 'multiselect', + 'class' => 'chosen', + 'cast' => 'json_encode', + 'auto_value' => false, + 'identifier' => 'value', + 'list' => [ + ['value' => 'administration', 'name' => $this->trans('Administration', [], 'Admin.Modules.Feature')], + ['value' => 'advertising_marketing', 'name' => $this->trans('Advertising & Marketing', [], 'Admin.Modules.Feature')], + ['value' => 'analytics_stats', 'name' => $this->trans('Analytics & Stats', [], 'Admin.Modules.Feature')], + ['value' => 'billing_invoicing', 'name' => $this->trans('Taxes & Invoicing', [], 'Admin.Modules.Feature')], + ['value' => 'checkout', 'name' => $this->trans('Checkout', [], 'Admin.Modules.Feature')], + ['value' => 'content_management', 'name' => $this->trans('Content Management', [], 'Admin.Modules.Feature')], + ['value' => 'customer_reviews', 'name' => $this->trans('Customer Reviews', [], 'Admin.Modules.Feature')], + ['value' => 'export', 'name' => $this->trans('Export', [], 'Admin.Actions')], + ['value' => 'front_office_features', 'name' => $this->trans('Front office Features', [], 'Admin.Modules.Feature')], + ['value' => 'i18n_localization', 'name' => $this->trans('Internationalization & Localization', [], 'Admin.Modules.Feature')], + ['value' => 'merchandizing', 'name' => $this->trans('Merchandising', [], 'Admin.Modules.Feature')], + ['value' => 'migration_tools', 'name' => $this->trans('Migration Tools', [], 'Admin.Modules.Feature')], + ['value' => 'payments_gateways', 'name' => $this->trans('Payments & Gateways', [], 'Admin.Modules.Feature')], + ['value' => 'payment_security', 'name' => $this->trans('Site certification & Fraud prevention', [], 'Admin.Modules.Feature')], + ['value' => 'pricing_promotion', 'name' => $this->trans('Pricing & Promotion', [], 'Admin.Modules.Feature')], + ['value' => 'quick_bulk_update', 'name' => $this->trans('Quick / Bulk update', [], 'Admin.Modules.Feature')], + ['value' => 'seo', 'name' => $this->trans('SEO', [], 'Admin.Catalog.Feature')], + ['value' => 'shipping_logistics', 'name' => $this->trans('Shipping & Logistics', [], 'Admin.Modules.Feature')], + ['value' => 'slideshows', 'name' => $this->trans('Slideshows', [], 'Admin.Modules.Feature')], + ['value' => 'smart_shopping', 'name' => $this->trans('Comparison site & Feed management', [], 'Admin.Modules.Feature')], + ['value' => 'market_place', 'name' => $this->trans('Marketplace', [], 'Admin.Modules.Feature')], + ['value' => 'others', 'name' => $this->trans('Other Modules', [], 'Admin.Modules.Feature')], + ['value' => 'mobile', 'name' => $this->trans('Mobile', [], 'Admin.Global')], + ['value' => 'dashboard', 'name' => $this->trans('Dashboard', [], 'Admin.Global')], + ['value' => 'emailing', 'name' => $this->trans('Emailing & SMS', [], 'Admin.Modules.Feature')], + ['value' => 'social_networks', 'name' => $this->trans('Social Networks', [], 'Admin.Modules.Feature')], + ['value' => 'social_community', 'name' => $this->trans('Social & Community', [], 'Admin.Modules.Feature')], + ], + ], + 'elementor_load_fontawesome' => [ + 'title' => $this->l('Load FontAwesome Library'), + 'desc' => $this->l('FontAwesome gives you scalable vector icons that can instantly be customized - size, color, drop shadow, and anything that can be done with the power of CSS.'), + 'validation' => 'isBool', + 'cast' => 'intval', + 'type' => 'bool', + 'default' => '1', + ], + 'elementor_load_waypoints' => [ + 'title' => $this->l('Load Waypoints Library'), + 'desc' => $this->l('Waypoints library is the easiest way to trigger a function when you scroll to an element.'), + 'validation' => 'isBool', + 'cast' => 'intval', + 'type' => 'bool', + 'default' => '1', + ], + 'elementor_load_slick' => [ + 'title' => $this->l('Load Slick Library'), + 'desc' => $this->l('Slick is a jQuery plugin for creating fully customizable, responsive and mobile friendly carousels/sliders that work with any html elements.'), + 'validation' => 'isBool', + 'cast' => 'intval', + 'type' => 'bool', + 'default' => '1', + ], + ], + 'submit' => [ + 'title' => $this->l('Save'), + ], + ]; + + $this->fields_options['experiments'] = [ + 'class' => 'ce-experiments', + 'icon' => 'icon-magic', + 'title' => $this->l('Experiments'), + 'info' => CESmarty::sprintf(_CE_TEMPLATES_ . 'admin/admin.tpl', 'ce_alert', 'info', $this->l( + "Access new and experimental features from Creative Elements before they're officially released. As these features are still in development, they are likely to change, evolve or even be removed altogether." + )), + 'fields' => [ + 'elementor_remove_hidden' => [ + 'title' => $this->l('Remove Hidden Elements'), + 'desc' => $this->l('When you hide elements on "Advanced tab / Responsive section" their markup will be removed from DOM.'), + 'validation' => 'isBool', + 'cast' => 'intval', + 'type' => 'bool', + ], + 'elementor_visibility' => [ + 'title' => $this->l('Visibility Section'), + 'desc' => $this->l('If you would like to schedule elements or filter them by selected customer groups, then this feature will be handy. It will appear under Advanced tab.'), + 'validation' => 'isBool', + 'cast' => 'intval', + 'type' => 'bool', + ], + ], + 'submit' => [ + 'title' => $this->l('Save'), + ], + ]; + } + + public function initPageHeaderToolbar() + { + $this->page_header_toolbar_btn['license'] = [ + 'icon' => 'process-icon-file icon-file-text', + 'desc' => $this->l('License'), + 'js' => "$('#modal_license').modal()", + ]; + $this->page_header_toolbar_btn['regenerate-css'] = [ + 'icon' => 'process-icon-reload icon-rotate-right', + 'desc' => $this->l('Regenerate CSS'), + 'js' => '//' . Tools::safeOutput( + $this->l('Styles set in Creative Elements are saved in CSS files. Recreate those files, according to the most recent settings.') + ), + ]; + if (Shop::getContext() === Shop::CONTEXT_SHOP) { + $this->page_header_toolbar_btn['replace-url'] = [ + 'icon' => 'process-icon-refresh', + 'desc' => $this->l('Replace URL'), + 'js' => "$('#modal_replace_url').modal()", + ]; + } + + parent::initPageHeaderToolbar(); + } + + public function initModal() + { + $ce_license = Configuration::getGlobalValue('CE_LICENSE'); + + $this->modals[] = [ + 'modal_id' => 'modal_license', + 'modal_class' => 'modal-md', + 'modal_title' => $ce_license + ? CESmarty::get(_CE_TEMPLATES_ . 'admin/admin.tpl', 'ce_modal_license_status') + : $this->l('Activate License') + , + 'modal_content' => CESmarty::sprintf( + _CE_TEMPLATES_ . 'admin/admin.tpl', + 'ce_modal_license', + Tools::safeOutput($this->context->link->getAdminLink('AdminCESettings') . '&action=activate'), + $this->l( + $ce_license + ? 'Your website is activated. Want to activate this website by a different license?' + : 'Please activate your license to get unlimited access to the template library.' + ), + $this->l($ce_license ? 'Switch License' : 'Activate') + ), + ]; + $this->modals[] = [ + 'modal_id' => 'modal_replace_url', + 'modal_class' => 'modal-md', + 'modal_title' => $this->l('Update Site Address (URL)'), + 'modal_content' => CESmarty::sprintf( + _CE_TEMPLATES_ . 'admin/admin.tpl', + 'ce_modal_replace_url', + $this->l('It is strongly recommended that you backup your database before using Replace URL.'), + $this->l('http://old-url.com'), + $this->l('http://new-url.com'), + $this->l('Enter your old and new URLs for your PrestaShop installation, to update all Creative Elements data (Relevant for domain transfers or move to \'HTTPS\').'), + $this->l('Replace URL') + ), + ]; + } + + protected function processActivate() + { + $url = $this->context->link->getAdminLink('AdminCESettings'); + + if (Tools::getIsset('license')) { + Configuration::updateGlobalValue('CE_LICENSE', Tools::getValue('license')); + $url .= '#license'; + } else { + list($p, $r) = explode('://', CE\wp_referer()); + $encode = 'base64_encode'; + $url = $this->activate_url . '&' . http_build_query([ + 'response_type' => 'code', + 'client_id' => Tools::substr($encode(_COOKIE_KEY_), 0, 32), + 'auth_secret' => rtrim($encode("$r?" . Tools::passwdGen(23 - Tools::strlen($r))), '='), + 'state' => Tools::substr($encode($this->module->module_key), 0, 12), + 'redirect_uri' => urlencode($url), + ]); + } + Tools::redirectAdmin($url); + } + + public function setMedia($isNewTheme = false) + { + parent::setMedia($isNewTheme); + + $this->css_files[_MODULE_DIR_ . 'creativeelements/views/css/settings.css?v=' . _CE_VERSION_] = 'all'; + $this->js_files[] = _MODULE_DIR_ . 'creativeelements/views/js/settings.js?v=' . _CE_VERSION_; + } + + protected function processUpdateOptions() + { + parent::processUpdateOptions(); + + if ($this->viewportChanged) { + CE\Plugin::instance(); + CE\CoreXResponsiveXResponsive::compileStylesheetTemplates(); + $this->clearCss = true; + } + empty($this->clearCss) or CE\Plugin::instance()->files_manager->clearCache(); + } + + protected function updateOptionElementorContainerWidth($val) + { + if (Configuration::get('elementor_container_width') != $val) { + Configuration::updateValue('elementor_container_width', $val); + + $this->clearCss = true; + } + } + + protected function updateOptionElementorPageTitleSelector($val) + { + $val = trim($val); + + if (!empty($val) && Validate::isCleanHtml($val)) { + Configuration::updateValue('elementor_page_title_selector', $val); + } else { + $this->errors[] = $this->trans('Required field', [], 'Shop.Forms.Errors') . ': ' . $this->l('Page Title Selector'); + } + } + + protected function updateOptionElementorFullWidthSelector($val) + { + $val = trim($val); + + if (!empty($val) && Validate::isCleanHtml($val)) { + Configuration::updateValue('elementor_full_width_selector', $val); + } else { + $this->errors[] = $this->trans('Required field', [], 'Shop.Forms.Errors') . ': ' . $this->l('Content Wrapper Selector'); + } + } + + protected function updateOptionElementorViewportLg($val) + { + if (Configuration::get('elementor_viewport_lg') != $val) { + Configuration::updateValue('elementor_viewport_lg', $val); + + $this->viewportChanged = true; + } + } + + protected function updateOptionElementorViewportMd($val) + { + if (Configuration::get('elementor_viewport_md') != $val) { + Configuration::updateValue('elementor_viewport_md', $val); + + $this->viewportChanged = true; + } + } + + protected function updateOptionElementorCssPrintMethod($val) + { + if (Configuration::get('elementor_css_print_method') != $val) { + Configuration::updateValue('elementor_css_print_method', $val); + + $this->clearCss = true; + } + } + + public function ajaxProcessRegenerateCss() + { + CE\Plugin::instance()->files_manager->clearCache(); + + CE\wp_send_json_success(); + } + + public function ajaxProcessReplaceUrl() + { + $from = trim(Tools::getValue('from')); + $to = trim(Tools::getValue('to')); + + $is_valid_urls = filter_var($from, FILTER_VALIDATE_URL) && filter_var($to, FILTER_VALIDATE_URL); + + if (!$is_valid_urls) { + CE\wp_send_json_error(CE\__("The `from` and `to` URL's must be a valid URL")); + } + + if ($from === $to) { + CE\wp_send_json_error(CE\__("The `from` and `to` URL's must be different")); + } + + $db = Db::getInstance(); + $table = _DB_PREFIX_ . 'ce_meta'; + $id = sprintf('%02d', $this->context->shop->id); + $old = str_replace('/', '\\\/', $from); + $new = str_replace('/', '\\\/', $to); + + $result = $db->execute(" + UPDATE $table SET `value` = REPLACE(`value`, '$old', '$new') + WHERE `name` = '_elementor_data' AND `id` LIKE '%$id' AND `value` <> '[]' + "); + + if (false === $result) { + CE\wp_send_json_error(CE\__('An error occurred')); + } else { + CE\wp_send_json_success(sprintf(CE\__('%d Rows Affected'), $db->affected_rows())); + } + } + + protected function trans($id, array $parameters = [], $domain = null, $locale = null) + { + return empty($this->translator) ? $this->l($id) : parent::trans($id, $parameters, $domain, $locale); + } + + protected function l($string, $module = 'creativeelements', $addslashes = false, $htmlentities = true) + { + $str = Translate::getModuleTranslation($module, $string, '', null, $addslashes || !$htmlentities); + + return $htmlentities ? $str : call_user_func('stripslashes', $str); + } +} diff --git a/modules/creativeelements/controllers/admin/AdminCETemplatesController.php b/modules/creativeelements/controllers/admin/AdminCETemplatesController.php new file mode 100644 index 00000000..5801a7ea --- /dev/null +++ b/modules/creativeelements/controllers/admin/AdminCETemplatesController.php @@ -0,0 +1,415 @@ +context->cookie->submitFilterce_template); + unset($this->context->cookie->cetemplatesce_templateFilter_type); + } else { + $this->context->cookie->submitFilterce_template = 1; + $this->context->cookie->cetemplatesce_templateFilter_type = $type; + } + } + + $this->fields_options['import-template'] = [ + 'class' => 'ce-import-panel hide', + 'icon' => 'icon-upload', + 'title' => $this->l('Import Template'), + 'description' => $this->l('Choose a JSON template file or a .zip archive of templates, and add them to the list of templates available in your library.'), + 'fields' => [ + 'action' => [ + 'type' => 'hidden', + 'value' => 'import_template', + 'no_multishop_checkbox' => true, + ], + 'file' => [ + 'type' => 'file', + 'title' => $this->l('Template file'), + 'name' => 'file', + 'no_multishop_checkbox' => true, + ], + ], + 'submit' => [ + 'imgclass' => 'import', + 'title' => $this->l('Import Now'), + ], + ]; + + $this->fields_list = [ + 'id_ce_template' => [ + 'title' => $this->trans('ID', [], 'Admin.Global'), + 'class' => 'fixed-width-xs', + 'align' => 'center', + ], + 'title' => [ + 'title' => $this->trans('Title', [], 'Admin.Global'), + ], + 'type' => [ + 'title' => $this->trans('Type', [], 'Admin.Catalog.Feature'), + 'class' => 'fixed-width-lg', + 'type' => 'select', + 'list' => [ + 'page' => $this->l('Page'), + 'section' => $this->l('Section'), + 'header' => $this->l('Header'), + 'footer' => $this->l('Footer'), + 'page-index' => $this->l('Home Page'), + 'page-contact' => $this->l('Contact Page'), + 'product' => $this->l('Product Page'), + 'product-quick-view' => $this->l('Quick View'), + 'product-miniature' => $this->l('Product Miniature'), + 'page-not-found' => $this->l('404 Page'), + ], + 'filter_key' => 'type', + ], + 'date_add' => [ + 'title' => $this->trans('Created on', [], 'Modules.Facetedsearch.Admin'), + 'class' => 'fixed-width-lg', + 'type' => 'datetime', + ], + 'date_upd' => [ + 'title' => $this->l('Modified on'), + 'class' => 'fixed-width-lg', + 'type' => 'datetime', + ], + 'active' => [ + 'title' => $this->trans('Active', [], 'Admin.Global'), + 'class' => 'fixed-width-xs', + 'align' => 'center', + 'active' => 'status', + 'type' => 'bool', + ], + 'shortcode' => [ + 'title' => $this->l('Shortcode'), + 'class' => 'ce-shortcode', + 'type' => 'editable', + 'orderby' => false, + 'search' => false, + ], + ]; + + $this->bulk_actions = [ + 'export' => [ + 'text' => $this->trans('Export', [], 'Admin.Actions'), + 'icon' => 'icon-mail-forward', + ], + 'delete_divider' => [ + 'text' => 'divider', + ], + 'delete' => [ + 'text' => $this->l('Delete'), + 'icon' => 'icon-trash text-danger', + 'confirm' => $this->trans('Delete selected items?', [], 'Admin.Notifications.Info'), + ], + ]; + + $this->action_link = CESmarty::get(_CE_TEMPLATES_ . 'admin/admin.tpl', 'ce_action_link'); + } + + public function processBulkExport() + { + $uids = []; + + foreach ($this->boxes as $id) { + $uids[] = new CE\UId($id, CE\UId::TEMPLATE); + } + + CE\Plugin::instance()->templates_manager->getSource('local')->exportMultipleTemplates($uids); + } + + protected function processUpdateOptions() + { + // Process import template + CE\UId::$_ID = new CE\UId(0, CE\UId::TEMPLATE); + + $res = CE\Plugin::instance()->templates_manager->directImportTemplate(); + + if ($res instanceof CE\WPError) { + $this->errors[] = $res->getMessage(); + } elseif (isset($res[1]['template_id'])) { + // More templates + Tools::redirectAdmin($this->context->link->getAdminLink('AdminCETemplates') . '&conf=18'); + } elseif (isset($res[0]['template_id'])) { + // Simple template + $id = Tools::substr($res[0]['template_id'], 0, -6); + + Tools::redirectAdmin( + $this->context->link->getAdminLink('AdminCETemplates') . "&id_ce_template=$id&updatece_template&conf=18" + ); + } else { + $this->errors[] = $this->l('Unknown error during import!'); + } + } + + public function ajaxProcessMigrate() + { + if ($ids = Tools::getValue('ids')) { + require_once _CE_PATH_ . 'classes/CEMigrate.php'; + + $done = []; + + foreach ($ids as $id) { + CEMigrate::moveTemplate($id) && $done[] = (int) $id; + } + $res = CEMigrate::removeIds('template', $done); + + die(json_encode($res)); + } + } + + public function initHeader() + { + parent::initHeader(); + + $id_lang = $this->context->language->id; + $link = $this->context->link; + $tabs = &$this->context->smarty->tpl_vars['tabs']->value; + $sections = [ + 'section', + 'header', + 'footer', + 'product-quick-view', + 'product-miniature', + ]; + + foreach ($tabs as &$tab0) { + foreach ($tab0['sub_tabs'] as &$tab1) { + if ('AdminParentCEContent' === $tab1['class_name']) { + foreach ($tab1['sub_tabs'] as &$tab2) { + if ('AdminCETemplates' === $tab2['class_name']) { + $sub_tabs = &$tab2['sub_tabs']; + $tab = Tab::getTab($id_lang, Tab::getIdFromClassName('AdminCETemplates')); + $new = Tools::getIsset('addce_template'); + $href = $link->getAdminLink('AdminCETemplates'); + $type = $this->context->cookie->cetemplatesce_templateFilter_type; + + $tab['name'] = $this->l('Templates'); + $tab['current'] = $new || (!in_array($type, ['section', 'page']) || !$type) && !$this->object; + $tab['href'] = "$href&type=all"; + $sub_tabs[] = $tab; + + $tab['name'] = $this->l('Page'); + $tab['current'] = !$new && ($this->object ? !in_array($this->object->type, $sections) : 'page' === $type); + $tab['href'] = "$href&type=page"; + $sub_tabs[] = $tab; + + $tab['name'] = $this->l('Section'); + $tab['current'] = !$new && ($this->object ? in_array($this->object->type, $sections) : 'section' === $type); + $tab['href'] = "$href&type=section"; + $sub_tabs[] = $tab; + + return; + } + } + } + } + } + } + + public function initToolBarTitle() + { + $this->context->smarty->assign('icon', 'icon-list'); + + $this->toolbar_title[] = $this->l( + 'add' === $this->display ? 'Add New Template' : ('edit' === $this->display ? 'Edit Template' : 'Templates List') + ); + } + + public function initPageHeaderToolbar() + { + if ('add' !== $this->display && 'edit' !== $this->display) { + $this->page_header_toolbar_btn['addce_template'] = [ + 'icon' => 'process-icon-new', + 'desc' => $this->trans('Add new', [], 'Admin.Actions'), + 'href' => self::$currentIndex . '&addce_template&token=' . $this->token, + ]; + $this->page_header_toolbar_btn['importce_template'] = [ + 'icon' => 'process-icon-import', + 'desc' => $this->trans('Import', [], 'Admin.Actions'), + 'href' => 'javascript:ceAdmin.onClickImport()', + ]; + } + parent::initPageHeaderToolbar(); + } + + public function initModal() + { + // Prevent modals + } + + public function initContent() + { + $this->context->smarty->assign('current_tab_level', 3); + + return parent::initContent(); + } + + public function getList($id_lang, $order_by = null, $order_way = null, $start = 0, $limit = null, $id_lang_shop = false) + { + parent::getList($id_lang, $order_by, $order_way, $start, $limit, $id_lang_shop); + + // Translate template types + if (!empty($this->_list)) { + $type = &$this->fields_list['type']['list']; + + foreach ($this->_list as &$row) { + $row['id'] = $row['id_ce_template']; + $row['shortcode'] = '{hook h="CETemplate" id="' . $row['id'] . '"}'; + empty($type[$row['type']]) or $row['type'] = $type[$row['type']]; + } + } + } + + public function renderList() + { + $this->addRowAction('edit'); + $this->addRowAction('preview'); + $this->addRowAction('export'); + $this->addRowAction('delete'); + + return parent::renderList(); + } + + public function displayPreviewLink($token, $id, $name = null) + { + $link = $this->context->link->getModuleLink('creativeelements', 'preview', [ + 'id_employee' => $this->context->employee->id, + 'adtoken' => Tools::getAdminTokenLite('AdminCETemplates'), + 'preview_id' => "{$id}010000", + ], null, null, null, true); + + return sprintf($this->action_link, Tools::safeOutput($link), '_blank', 'eye', $this->trans('Preview', [], 'Admin.Actions')); + } + + public function displayExportLink($token, $id, $name = null) + { + $link = $this->context->link->getAdminLink('AdminCEEditor') . '&' . http_build_query([ + 'ajax' => 1, + 'action' => 'elementor_library_direct_actions', + 'library_action' => 'export_template', + 'source' => 'local', + 'template_id' => "{$id}010000", + ]); + + return sprintf($this->action_link, Tools::safeOutput($link), '_self', 'mail-forward', $this->trans('Export', [], 'Admin.Actions')); + } + + protected function getTemplateType() + { + return ($type = $this->object->type) ? [ + ['value' => $type, 'label' => $this->fields_list['type']['list'][$type]], + ] : [ + ['value' => 'page', 'label' => $this->l('Page')], + ['value' => 'section', 'label' => $this->l('Section')], + ]; + } + + public function renderForm() + { + $col = version_compare(_PS_VERSION_, '1.7.8', '<') ? 7 : 6; + + $this->fields_form = [ + 'legend' => [ + 'title' => $this->l('Template'), + 'icon' => 'icon-edit', + ], + 'input' => [ + [ + 'type' => 'text', + 'label' => $this->trans('Title', [], 'Admin.Global'), + 'name' => 'title', + 'col' => $col, + ], + [ + 'type' => 'select', + 'label' => $this->trans('Type', [], 'Admin.Catalog.Feature'), + 'name' => 'type', + 'options' => [ + 'query' => $this->getTemplateType(), + 'id' => 'value', + 'name' => 'label', + ], + 'col' => 3, + ], + [ + 'type' => 'textarea', + 'label' => $this->l('Content'), + 'name' => 'content', + 'col' => $col, + ], + [ + 'type' => 'switch', + 'label' => $this->trans('Active', [], 'Admin.Global'), + 'name' => 'active', + 'required' => false, + 'is_bool' => true, + 'values' => [ + [ + 'id' => 'active_on', + 'value' => 1, + 'label' => $this->trans('Enabled', [], 'Admin.Global'), + ], + [ + 'id' => 'active_off', + 'value' => 0, + 'label' => $this->trans('Disabled', [], 'Admin.Global'), + ], + ], + 'default_value' => 1, + ], + ], + 'submit' => [ + 'title' => $this->trans('Save', [], 'Admin.Actions'), + ], + 'buttons' => [ + 'save_and_stay' => [ + 'type' => 'submit', + 'title' => $this->trans('Save and stay', [], 'Admin.Actions'), + 'icon' => 'process-icon-save', + 'name' => 'submitAddce_templateAndStay', + 'class' => 'btn btn-default pull-right', + ], + ], + ]; + + return parent::renderForm(); + } + + protected function trans($id, array $parameters = [], $domain = null, $locale = null) + { + return empty($this->translator) ? $this->l($id) : parent::trans($id, $parameters, $domain, $locale); + } + + protected function l($string, $module = 'creativeelements', $addslashes = false, $htmlentities = true) + { + $str = Translate::getModuleTranslation($module, $string, '', null, $addslashes || !$htmlentities); + + return $htmlentities ? $str : call_user_func('stripslashes', $str); + } +} diff --git a/modules/creativeelements/controllers/admin/AdminCEThemesController.php b/modules/creativeelements/controllers/admin/AdminCEThemesController.php new file mode 100644 index 00000000..bdf3e0c8 --- /dev/null +++ b/modules/creativeelements/controllers/admin/AdminCEThemesController.php @@ -0,0 +1,462 @@ +context->cookie->submitFilterce_template); + unset($this->context->cookie->cethemesce_themeFilter_type); + } else { + $this->context->cookie->submitFilterce_theme = 1; + $this->context->cookie->cethemesce_themeFilter_type = $type; + } + } + + if ((Tools::getIsset('updatece_theme') || Tools::getIsset('addce_theme')) && Shop::getContextShopID() === null) { + $this->displayWarning( + $this->trans('You are in a multistore context: any modification will impact all your shops, or each shop of the active group.', [], 'Admin.Catalog.Notification') + ); + } + + $table_shop = _DB_PREFIX_ . $this->table . '_shop'; + $this->_select = 'sa.*'; + $this->_join = "LEFT JOIN $table_shop sa ON sa.id_ce_theme = a.id_ce_theme AND b.id_shop = sa.id_shop"; + $this->_where = "AND sa.id_shop = " . (int) $this->context->shop->id; + + $this->fields_list = [ + 'id_ce_theme' => [ + 'title' => $this->trans('ID', [], 'Admin.Global'), + 'class' => 'fixed-width-xs', + 'align' => 'center', + ], + 'title' => [ + 'title' => $this->trans('Title', [], 'Admin.Global'), + ], + 'type' => [ + 'title' => $this->trans('Type', [], 'Admin.Catalog.Feature'), + 'class' => 'fixed-width-xl', + 'type' => 'select', + 'list' => [ + 'header' => $this->l('Header'), + 'footer' => $this->l('Footer'), + 'page' => $this->l('Page'), + 'page-index' => $this->l('Home Page'), + 'page-contact' => $this->l('Contact Page'), + 'prod' => $this->l('Product'), + 'product' => $this->l('Product Page'), + 'product-quick-view' => $this->l('Quick View'), + 'product-miniature' => $this->l('Product Miniature'), + 'page-not-found' => $this->l('404 Page'), + ], + 'filter_key' => 'type', + ], + 'date_add' => [ + 'title' => $this->trans('Created on', [], 'Modules.Facetedsearch.Admin'), + 'filter_key' => 'sa!date_add', + 'class' => 'fixed-width-lg', + 'type' => 'datetime', + ], + 'date_upd' => [ + 'title' => $this->l('Modified on'), + 'filter_key' => 'sa!date_upd', + 'class' => 'fixed-width-lg', + 'type' => 'datetime', + ], + 'active' => [ + 'title' => $this->trans('Active', [], 'Admin.Global'), + 'filter_key' => 'sa!active', + 'class' => 'fixed-width-xs', + 'align' => 'center', + 'active' => 'status', + 'type' => 'bool', + ], + ]; + + $this->bulk_actions = [ + 'delete' => [ + 'text' => $this->trans('Delete selected', [], 'Admin.Notifications.Info'), + 'icon' => 'fa fa-icon-trash', + 'confirm' => $this->trans('Delete selected items?', [], 'Admin.Notifications.Info'), + ], + ]; + + $this->fields_options['theme_settings'] = [ + 'class' => 'ce-theme-panel', + 'icon' => 'icon-cog', + 'title' => $this->l('Theme Settings'), + 'fields' => [ + 'CE_HEADER' => [ + 'title' => $this->l('Header'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => array_merge( + [ + ['value' => '', 'name' => $this->l('Default')], + ], + CETheme::getOptions('header', $this->context->language->id, $this->context->shop->id) + ), + ], + 'CE_PAGE_INDEX' => [ + 'title' => $this->l('Home Page'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => array_merge( + [ + ['value' => '', 'name' => $this->l('Default')], + ], + CETheme::getOptions('page-index', $this->context->language->id, $this->context->shop->id) + ), + ], + 'CE_PRODUCT' => [ + 'title' => $this->l('Product Page'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => array_merge( + [ + ['value' => '', 'name' => $this->l('Default')], + ], + CETheme::getOptions('product', $this->context->language->id, $this->context->shop->id) + ), + ], + 'CE_FOOTER' => [ + 'title' => $this->l('Footer'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => array_merge( + [ + ['value' => '', 'name' => $this->l('Default')], + ], + CETheme::getOptions('footer', $this->context->language->id, $this->context->shop->id) + ), + ], + 'CE_PAGE_CONTACT' => [ + 'title' => $this->l('Contact Page'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => array_merge( + [ + ['value' => '', 'name' => $this->l('Default')], + ], + CETheme::getOptions('page-contact', $this->context->language->id, $this->context->shop->id) + ), + ], + 'CE_PRODUCT_QUICK_VIEW' => [ + 'title' => $this->l('Quick View'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => array_merge( + [ + ['value' => '', 'name' => $this->l('Default')], + ], + CETheme::getOptions('product-quick-view', $this->context->language->id, $this->context->shop->id) + ), + ], + 'CE_PAGE_NOT_FOUND' => [ + 'title' => $this->l('404 Page'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => array_merge( + [ + ['value' => '', 'name' => $this->l('Default')], + ], + CETheme::getOptions('page-not-found', $this->context->language->id, $this->context->shop->id) + ), + ], + 'CE_PRODUCT_MINIATURE' => [ + 'title' => $this->l('Product Miniature'), + 'cast' => 'strval', + 'type' => 'select', + 'identifier' => 'value', + 'list' => array_merge( + [ + ['value' => '', 'name' => $this->l('Default')], + ], + CETheme::getOptions('product-miniature', $this->context->language->id, $this->context->shop->id) + ), + ], + ], + 'submit' => [ + 'title' => $this->l('Save'), + ], + ]; + } + + public function initHeader() + { + parent::initHeader(); + + $id_lang = $this->context->language->id; + $link = $this->context->link; + $tabs = &$this->context->smarty->tpl_vars['tabs']->value; + + foreach ($tabs as &$tab0) { + foreach ($tab0['sub_tabs'] as &$tab1) { + if ($tab1['class_name'] == 'AdminParentCEContent') { + foreach ($tab1['sub_tabs'] as &$tab2) { + if ($tab2['class_name'] == 'AdminCEThemes') { + $sub_tabs = &$tab2['sub_tabs']; + $tab = Tab::getTab($id_lang, Tab::getIdFromClassName('AdminCEThemes')); + $new = Tools::getIsset('addce_theme'); + $href = $link->getAdminLink('AdminCEThemes'); + $type = Tools::getValue('type', $this->context->cookie->cethemesce_themeFilter_type); + + $tab['name'] = $this->l('Templates'); + $tab['current'] = $new || (!$type || 'all' === $type) && !$this->object; + $tab['href'] = "$href&type=all"; + $sub_tabs[] = $tab; + + $type = $this->object ? $this->object->type : $type; + + $tab['name'] = $this->l('Header'); + $tab['current'] = !$new && 'header' === $type; + $tab['href'] = "$href&type=header"; + $sub_tabs[] = $tab; + + $tab['name'] = $this->l('Footer'); + $tab['current'] = !$new && 'footer' === $type; + $tab['href'] = "$href&type=footer"; + $sub_tabs[] = $tab; + + $tab['name'] = $this->l('Page'); + $tab['current'] = !$new && stripos($type, 'page') === 0; + $tab['href'] = "$href&type=page"; + $sub_tabs[] = $tab; + + $tab['name'] = $this->l('Product'); + $tab['current'] = !$new && 'product-miniature' !== $type && stripos($type, 'prod') === 0; + $tab['href'] = "$href&type=prod"; + $sub_tabs[] = $tab; + + $tab['name'] = $this->l('Miniature'); + $tab['current'] = !$new && 'product-miniature' === $type; + $tab['href'] = "$href&type=product-miniature"; + $sub_tabs[] = $tab; + + break; + } + } + } + } + } + } + + public function initToolBarTitle() + { + $this->page_header_toolbar_title = $this->l('Theme Builder'); + + $this->context->smarty->assign('icon', 'icon-list'); + + $this->toolbar_title[] = $this->l( + 'add' === $this->display ? 'Add New Template' : ('edit' === $this->display ? 'Edit Template' : 'Templates List') + ); + } + + public function initPageHeaderToolbar() + { + if (empty($this->display) || 'options' === $this->display) { + $this->page_header_toolbar_btn['addce_theme'] = [ + 'href' => self::$currentIndex . '&addce_theme&token=' . $this->token, + 'desc' => $this->trans('Add new', [], 'Admin.Actions'), + 'icon' => 'process-icon-new', + ]; + } + parent::initPageHeaderToolbar(); + } + + public function initModal() + { + // Prevent modals + } + + public function initContent() + { + $this->context->smarty->assign('current_tab_level', 3); + + return parent::initContent(); + } + + public function processFilter() + { + $type = Tools::getValue('type', $this->context->cookie->cethemesce_themeFilter_type); + + if ('page' === $type || 'prod' === $type) { + // Trick for type filtering, use LIKE instead of = + $this->fields_list['type']['type'] = 'text'; + } + parent::processFilter(); + + $this->fields_list['type']['type'] = 'select'; + } + + public function getList($id_lang, $order_by = null, $order_way = null, $start = 0, $limit = null, $id_lang_shop = false) + { + parent::getList($id_lang, $order_by, $order_way, $start, $limit, $id_lang_shop); + + // Translate template types + if (!empty($this->_list)) { + $type = &$this->fields_list['type']['list']; + + foreach ($this->_list as &$row) { + empty($type[$row['type']]) or $row['type'] = $type[$row['type']]; + } + } + } + + public function renderList() + { + $this->addRowAction('edit'); + $this->addRowAction('delete'); + + return parent::renderList(); + } + + protected function getThemeType() + { + $theme_types = [ + ['value' => '', 'label' => $this->l('Select...')], + ['value' => 'header', 'label' => $this->l('Header')], + ['value' => 'footer', 'label' => $this->l('Footer')], + ['value' => 'page-index', 'label' => $this->l('Home Page')], + ['value' => 'page-contact', 'label' => $this->l('Contact Page')], + ['value' => 'product', 'label' => $this->l('Product Page')], + ['value' => 'product-quick-view', 'label' => $this->l('Quick View')], + ['value' => 'product-miniature', 'label' => $this->l('Product Miniature')], + ['value' => 'page-not-found', 'label' => $this->l('404 Page')], + ]; + if (!empty($this->object->type)) { + return array_filter($theme_types, function ($option) { + return ${'this'}->object->type === $option['value']; + }); + } + return $theme_types; + } + + public function renderForm() + { + $col = count(Language::getLanguages(false, false, true)) > 1 ? 9 : 7; + + version_compare(_PS_VERSION_, '1.7.8', '<') or $col--; + + $this->fields_form = [ + 'legend' => [ + 'title' => $this->l('Template'), + 'icon' => 'icon-edit', + ], + 'input' => [ + [ + 'type' => 'text', + 'label' => $this->trans('Title', [], 'Admin.Global'), + 'name' => 'title', + 'lang' => true, + 'col' => $col, + ], + [ + 'type' => 'select', + 'label' => $this->trans('Type', [], 'Admin.Catalog.Feature'), + 'name' => 'type', + 'required' => true, + 'options' => [ + 'id' => 'value', + 'name' => 'label', + 'query' => $this->getThemeType(), + ], + 'col' => 3, + ], + [ + 'type' => 'textarea', + 'label' => $this->l('Content'), + 'name' => 'content', + 'lang' => true, + 'col' => $col, + ], + [ + 'type' => 'switch', + 'label' => $this->trans('Active', [], 'Admin.Global'), + 'name' => 'active', + 'required' => false, + 'is_bool' => true, + 'values' => [ + [ + 'id' => 'active_on', + 'value' => 1, + 'label' => $this->trans('Enabled', [], 'Admin.Global'), + ], + [ + 'id' => 'active_off', + 'value' => 0, + 'label' => $this->trans('Disabled', [], 'Admin.Global'), + ], + ], + ], + ], + 'submit' => [ + 'title' => $this->trans('Save', [], 'Admin.Actions'), + ], + 'buttons' => [ + 'save_and_stay' => [ + 'type' => 'submit', + 'title' => $this->trans('Save and stay', [], 'Admin.Actions'), + 'icon' => 'process-icon-save', + 'name' => 'submitAddce_themeAndStay', + 'class' => 'btn btn-default pull-right', + ], + ], + ]; + + if (Shop::isFeatureActive()) { + $this->fields_form['input'][] = [ + 'type' => 'shop', + 'label' => $this->trans('Shop association', [], 'Admin.Global'), + 'name' => 'checkBoxShopAsso', + ]; + } + + return parent::renderForm(); + } + + protected function trans($id, array $parameters = [], $domain = null, $locale = null) + { + return empty($this->translator) ? $this->l($id) : parent::trans($id, $parameters, $domain, $locale); + } + + protected function l($string, $module = 'creativeelements', $addslashes = false, $htmlentities = true) + { + $str = Translate::getModuleTranslation($module, $string, '', null, $addslashes || !$htmlentities); + + return $htmlentities ? $str : call_user_func('stripslashes', $str); + } +} diff --git a/modules/creativeelements/controllers/admin/index.php b/modules/creativeelements/controllers/admin/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/controllers/admin/index.php @@ -0,0 +1,8 @@ +action = Tools::getValue('action'); + + Tools::getValue('submitMessage') && $this->ajaxProcessSubmitMessage(); + Tools::getValue('submitNewsletter') && $this->ajaxProcessSubmitNewsletter(); + + method_exists($this, "ajaxProcess{$this->action}") && $this->{"ajaxProcess{$this->action}"}(); + } + + public function ajaxProcessSubmitMessage() + { + if ($contact = Module::getInstanceByName('contactform')) { + $contact->sendMessage(); + + $this->ajaxDie([ + 'success' => implode(nl2br("\n", false), $this->success), + 'errors' => $this->errors, + ]); + } + + $this->ajaxDie([ + 'errors' => ['Error: Contact Form module should be enabled!'], + ]); + } + + public function ajaxProcessSubmitNewsletter() + { + $name = 'ps_emailsubscription'; + $newsletter = Module::getInstanceByName($name); + + if (!$newsletter) { + $this->ajaxDie([ + 'errors' => ["Error: $name module should be enabled!"], + ]); + } + + $newsletter->newsletterRegistration(${'_POST'}['blockHookName'] = 'displayCE'); + + $this->ajaxDie([ + 'success' => empty($newsletter->valid) ? '' : [$newsletter->valid], + 'errors' => empty($newsletter->error) ? [] : [$newsletter->error], + ]); + } + + public function ajaxProcessAddToCartModal() + { + $cart = $this->cart_presenter->present($this->context->cart, true); + $product = null; + $id_product = (int) Tools::getValue('id_product'); + $id_product_attribute = (int) Tools::getValue('id_product_attribute'); + $id_customization = (int) Tools::getValue('id_customization'); + + foreach ($cart['products'] as &$p) { + if ($id_product === (int) $p['id_product'] && + $id_product_attribute === (int) $p['id_product_attribute'] && + $id_customization === (int) $p['id_customization'] + ) { + $product = $p; + break; + } + } + + $this->context->smarty->assign([ + 'configuration' => $this->getTemplateVarConfiguration(), + 'product' => $product, + 'cart' => $cart, + 'cart_url' => $this->context->link->getPageLink('cart', null, $this->context->language->id, [ + 'action' => 'show', + ], false, null, true), + ]); + + $this->ajaxDie([ + 'modal' => $this->context->smarty->fetch('module:ps_shoppingcart/modal.tpl'), + ]); + } + + protected function ajaxDie($value = null, $controller = null, $method = null) + { + if (null === $controller) { + $controller = get_class($this); + } + if (null === $method) { + $bt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); + $method = $bt[1]['function']; + } + if (version_compare(_PS_VERSION_, '1.6.1.1', '<')) { + Hook::exec('actionBeforeAjaxDie', ['controller' => $controller, 'method' => $method, 'value' => $value]); + Hook::exec('actionBeforeAjaxDie' . $controller . $method, ['value' => $value]); + } else { + Hook::exec('actionAjaxDie' . $controller . $method . 'Before', ['value' => $value]); + } + header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); + + die(json_encode($value)); + } +} diff --git a/modules/creativeelements/controllers/front/index.php b/modules/creativeelements/controllers/front/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/controllers/front/index.php @@ -0,0 +1,8 @@ + &$value) { + $admin->$key = $value; + } + unset($admin->remote_addr); + + $admin->write(); + } + Tools::redirectAdmin(urldecode(Tools::getValue('redirect'))); + } + + $this->uid = CreativeElements::getPreviewUId(false); + + if (!$this->uid) { + Tools::redirect('index.php?controller=404'); + } + + parent::init(); + } + + public function initContent() + { + $model = $this->uid->getModel(); + + if ('CETemplate' != $model) { + $this->warning[] = CESmarty::get(_CE_TEMPLATES_ . 'admin/admin.tpl', 'ce_undefined_position'); + } + $post = CE\get_post($this->uid); + + $this->title = $post->post_title; + $this->context->smarty->assign($model::${'definition'}['table'], [ + 'id' => $post->_obj->id, + 'content' => '', + ]); + + parent::initContent(); + + $this->title = $post->post_title; + $this->context->smarty->addTemplateDir(_CE_TEMPLATES_); + $this->context->smarty->assign([ + 'HOOK_LEFT_COLUMN' => '', + 'HOOK_RIGHT_COLUMN' => '', + 'breadcrumb' => $this->getBreadcrumb(), + ]); + $this->template = 'front/preview.tpl'; + } + + public function getBreadcrumbLinks() + { + $breadcrumb = [ + 'links' => [ + ['url' => 'javascript:;', 'title' => 'Creative Elements'], + ['url' => 'javascript:;', 'title' => CE\__('Preview')], + ], + ]; + if (!empty($this->title)) { + $breadcrumb['links'][] = ['url' => 'javascript:;', 'title' => $this->title]; + } + return $breadcrumb; + } + + public function getBreadcrumbPath() + { + $breadcrumb = $this->getBreadcrumbLinks(); + + return CESmarty::capture(_CE_TEMPLATES_ . 'admin/admin.tpl', 'ce_preview_breadcrumb', [ + 'links' => $breadcrumb['links'], + ]); + } +} diff --git a/modules/creativeelements/controllers/index.php b/modules/creativeelements/controllers/index.php new file mode 100644 index 00000000..0e32c6a1 --- /dev/null +++ b/modules/creativeelements/controllers/index.php @@ -0,0 +1,16 @@ +getName(); + + $js_var = 'frontend' === $name ? 'ceFrontendConfig' : 'elementor' . call_user_func('ucfirst', $name) . 'Config'; + $config = $this->getSettings() + $this->getComponentsConfig(); + wp_localize_script('elementor-' . $name, $js_var, $config); + } + + /** + * Get components config. + * + * Retrieves the app components settings. + * + * @since 2.3.0 + * @access private + * + * @return array + */ + private function getComponentsConfig() + { + $settings = []; + + foreach ($this->getComponents() as $id => $instance) { + $settings[$id] = $instance->getSettings(); + } + + return $settings; + } +} diff --git a/modules/creativeelements/core/base/base-object.php b/modules/creativeelements/core/base/base-object.php new file mode 100644 index 00000000..3dd2db59 --- /dev/null +++ b/modules/creativeelements/core/base/base-object.php @@ -0,0 +1,146 @@ +ensureSettings(); + + return self::getItems($this->settings, $setting); + } + + /** + * Set settings. + * + * @since 2.3.0 + * @access public + * + * @param array|string $key If key is an array, the settings are overwritten by that array. Otherwise, the + * settings of the key will be set to the given `$value` param. + * + * @param mixed $value Optional. Default is null. + */ + final public function setSettings($key, $value = null) + { + $this->ensureSettings(); + + if (is_array($key)) { + $this->settings = $key; + } else { + $this->settings[$key] = $value; + } + } + + /** + * Delete setting. + * + * Deletes the settings array or a specific key of the settings array if `$key` is specified. + * @since 2.3.0 + * @access public + * + * @param string $key Optional. Default is null. + */ + public function deleteSetting($key = null) + { + if ($key) { + unset($this->settings[$key]); + } else { + $this->settings = []; + } + } + + /** + * Get items. + * + * Utility method that receives an array with a needle and returns all the + * items that match the needle. If needle is not defined the entire haystack + * will be returned. + * + * @since 2.3.0 + * @access protected + * @static + * + * @param array $haystack An array of items. + * @param string $needle Optional. Needle. Default is null. + * + * @return mixed The whole haystack or the needle from the haystack when requested. + */ + final protected static function getItems(array $haystack, $needle = null) + { + if ($needle) { + return isset($haystack[$needle]) ? $haystack[$needle] : null; + } + + return $haystack; + } + + /** + * Get init settings. + * + * Used to define the default/initial settings of the object. Inheriting classes may implement this method to define + * their own default/initial settings. + * + * @since 2.3.0 + * @access protected + * + * @return array + */ + protected function getInitSettings() + { + return []; + } + + /** + * Ensure settings. + * + * Ensures that the `$settings` member is initialized + * + * @since 2.3.0 + * @access private + */ + private function ensureSettings() + { + if (null === $this->settings) { + $this->settings = $this->getInitSettings(); + } + } +} diff --git a/modules/creativeelements/core/base/document.php b/modules/creativeelements/core/base/document.php new file mode 100644 index 00000000..6a175f40 --- /dev/null +++ b/modules/creativeelements/core/base/document.php @@ -0,0 +1,1103 @@ +elements_manager->getCategories(); + } + + /** + * Get properties. + * + * Retrieve the document properties. + * + * @since 2.0.0 + * @access public + * @static + * + * @return array Document properties. + */ + public static function getProperties() + { + return [ + 'is_editable' => true, + ]; + } + + /** + * @since 2.1.0 + * @access public + * @static + */ + public static function getEditorPanelConfig() + { + return [ + 'widgets_settings' => [], + 'elements_categories' => static::getEditorPanelCategories(), + 'messages' => [ + /* translators: %s: the document title. */ + 'publish_notification' => sprintf(__('Hurray! Your %s is live.'), static::getTitle()), + ], + ]; + } + + /** + * Get element title. + * + * Retrieve the element title. + * + * @since 2.0.0 + * @access public + * @static + * + * @return string Element title. + */ + public static function getTitle() + { + return __('Document'); + } + + /** + * Get property. + * + * Retrieve the document property. + * + * @since 2.0.0 + * @access public + * @static + * + * @param string $key The property key. + * + * @return mixed The property value. + */ + public static function getProperty($key) + { + $id = static::getClassFullName(); + + if (!isset(self::$properties[$id])) { + self::$properties[$id] = static::getProperties(); + } + + return self::getItems(self::$properties[$id], $key); + } + + /** + * @since 2.0.0 + * @access public + * @static + */ + public static function getClassFullName() + { + return get_called_class(); + } + + /** + * @since 2.0.0 + * @access public + */ + public function getUniqueName() + { + return $this->getName() . '-' . $this->post->ID; + } + + // public function getPostTypeTitle() + + /** + * @since 2.0.0 + * @access public + */ + public function getMainId() + { + if (!$this->main_id) { + $post_id = $this->post->ID; + + $parent_post_id = wp_is_post_revision($post_id); + + if ($parent_post_id) { + $post_id = $parent_post_id; + } + + $this->main_id = $post_id; + } + + return $this->main_id; + } + + /** + * @since 2.0.0 + * @access public + * + * @param $data + * + * @throws \Exception If the widget was not found. + * + * @return string + */ + public function renderElement($data) + { + // Start buffering + ob_start(); + + /** @var WidgetBase $widget */ + $widget = Plugin::$instance->elements_manager->createElementInstance($data); + + if (!$widget) { + throw new \Exception('Widget not found.'); + } + + $widget->renderContent(); + + $render_html = ob_get_clean(); + + return $render_html; + } + + /** + * @since 2.0.0 + * @access public + */ + public function getMainPost() + { + return get_post($this->getMainId()); + } + + public function getContainerAttributes() + { + $id = $this->getMainId(); + + $attributes = [ + 'data-elementor-type' => $this->getName(), + 'data-elementor-id' => $id, + 'class' => 'elementor elementor-' . $id, + ]; + + $version_meta = $this->getMainMeta('_elementor_version'); + + if (version_compare($version_meta, '2.5.0', '<')) { + $attributes['class'] .= ' elementor-bc-flex-widget'; + } + + if (!Plugin::$instance->preview->isPreviewMode($id)) { + $attributes['data-elementor-settings'] = json_encode($this->getFrontendSettings()); + } + + return $attributes; + } + + /** + * @since 2.0.0 + * @access public + */ + public function getWpPreviewUrl() + { + $main_post_id = $this->getMainId(); + + $url = get_preview_post_link( + $main_post_id, + [ + // 'preview_id' => $main_post_id, + // 'preview_nonce' => wp_create_nonce('post_preview_' . $main_post_id), + 'preview' => 'true', + ] + ); + + /** + * Document "PrestaShop preview" URL. + * + * Filters the PrestaShop preview URL. + * + * @since 2.0.0 + * + * @param string $url PrestaShop preview URL. + * @param Document $this The document instance. + */ + $url = apply_filters('elementor/document/urls/wp_preview', $url, $this); + + return $url; + } + + /** + * @since 2.0.0 + * @access public + */ + public function getExitToDashboardUrl() + { + $url = get_edit_post_link($this->getMainId(), 'raw'); + + /** + * Document "exit to dashboard" URL. + * + * Filters the "Exit To Dashboard" URL. + * + * @since 2.0.0 + * + * @param string $url The exit URL + * @param Document $this The document instance. + */ + $url = apply_filters('elementor/document/urls/exit_to_dashboard', $url, $this); + + return $url; + } + + /** + * Get auto-saved post revision. + * + * Retrieve the auto-saved post revision that is newer than current post. + * + * @since 2.0.0 + * @access public + * + * + * @return bool|Document + */ + + public function getNewerAutosave() + { + $autosave = $this->getAutosave(); + + // Detect if there exists an autosave newer than the post. + if ($autosave && strtotime($autosave->getPost()->post_modified) > strtotime($this->post->post_modified)) { + return $autosave; + } + + return false; + } + + /** + * @since 2.0.0 + * @access public + */ + public function isAutosave() + { + return wp_is_post_autosave($this->post->ID); + } + + /** + * @since 2.0.0 + * @access public + * + * @param int $user_id + * @param bool $create + * + * @return bool|Document + */ + public function getAutosave($user_id = 0, $create = false) + { + if (!$user_id) { + $user_id = get_current_user_id(); + } + + $autosave_id = $this->getAutosaveId($user_id); + + if ($autosave_id) { + $document = Plugin::$instance->documents->get($autosave_id); + } elseif ($create) { + $autosave_id = wp_create_post_autosave([ + 'post_ID' => $this->post->uid->toDefault(), + 'post_type' => $this->post->post_type, + 'post_title' => $this->post->post_title, + 'post_excerpt' => $this->post->post_excerpt, + // Hack to cause $autosave_is_different=true in `wp_create_post_autosave`. + 'post_content' => '', + 'post_modified' => date('Y-m-d H:i:s'), + 'template_type' => $this->post->template_type, + ]); + + Plugin::$instance->db->copyElementorMeta($this->post->ID, $autosave_id); + + $document = Plugin::$instance->documents->get($autosave_id); + $document->saveTemplateType(); + } else { + $document = false; + } + + return $document; + } + + // public function filterAdminRowActions($actions) + + /** + * @since 2.0.0 + * @access public + */ + public function isEditableByCurrentUser() + { + return self::getProperty('is_editable') && User::isCurrentUserCanEdit($this->getMainId()); + } + + /** + * @since 2.0.0 + * @access protected + */ + protected function _getInitialConfig() + { + return [ + 'id' => $this->getMainId(), + 'type' => $this->getName(), + 'version' => $this->getMainMeta('_elementor_version'), + 'remoteLibrary' => $this->getRemoteLibraryConfig(), + 'last_edited' => $this->getLastEdited(), + 'panel' => static::getEditorPanelConfig(), + 'container' => 'body', + 'urls' => [ + 'exit_to_dashboard' => $this->getExitToDashboardUrl(), + 'preview' => $this->getPreviewUrl(), + 'wp_preview' => $this->getWpPreviewUrl(), + 'permalink' => $this->getPermalink(), + ], + ]; + } + + /** + * @since 2.0.0 + * @access protected + */ + protected function _registerControls() + { + $this->startControlsSection( + 'document_settings', + [ + 'label' => __('General Settings'), + 'tab' => ControlsManager::TAB_SETTINGS, + ] + ); + + $statuses = get_post_statuses(); + + $this->addControl( + 'post_status', + [ + 'label' => __('Status'), + 'type' => ControlsManager::SELECT, + 'default' => $this->getMainPost()->post_status, + 'options' => &$statuses, + ] + ); + + $this->addControl( + 'post_title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXT, + 'default' => $this->post->post_title, + 'label_block' => true, + 'separator' => 'none', + ] + ); + + $this->endControlsSection(); + + /** + * Register document controls. + * + * Fires after Elementor registers the document controls. + * + * @since 2.0.0 + * + * @param Document $this The document instance. + */ + do_action('elementor/documents/register_controls', $this); + } + + /** + * @since 2.0.0 + * @access public + * + * @param $data + * + * @return bool + */ + public function save($data) + { + if (!$this->isEditableByCurrentUser()) { + return false; + } + + /** + * Before document save. + * + * Fires when document save starts on Elementor. + * + * @since 2.5.12 + * + * @param \Elementor\Core\Base\Document $this The current document. + * @param $data. + */ + do_action('elementor/document/before_save', $this, $data); + + if (isset($data['settings'])) { + if (DB::STATUS_AUTOSAVE === $data['settings']['post_status']) { + if (!defined('DOING_AUTOSAVE')) { + define('DOING_AUTOSAVE', true); + } + } + + $this->saveSettings($data['settings']); + + // Refresh post after save settings. + $this->post = get_post($this->post->ID); + } + + if (isset($data['elements'])) { + $this->saveElements($data['elements']); + } + + $this->saveTemplateType(); + + $this->saveVersion(); + + // Create revision + wp_save_post_revision($this->post); + + // Remove Post CSS + $post_css = new PostCSS($this->post->ID); + + $post_css->delete(); + + /** + * After document save. + * + * Fires when document save is complete. + * + * @since 2.5.12 + * + * @param \Elementor\Core\Base\Document $this The current document. + * @param $data. + */ + do_action('elementor/document/after_save', $this, $data); + + return true; + } + + /** + * Is built with Elementor. + * + * Check whether the post was built with Elementor. + * + * @since 2.0.0 + * @access public + * + * @return bool Whether the post was built with Elementor. + */ + public function isBuiltWithElementor() + { + return !!get_post_meta($this->post->ID, '_elementor_edit_mode', true); + } + + // public function getEditUrl() + + /** + * @since 2.0.0 + * @access public + */ + public function getPreviewUrl() + { + /** + * Use a static var - to avoid change the `ver` parameter on every call. + */ + static $url; + + if (empty($url)) { + // add_filter('pre_option_permalink_structure', '__return_empty_string'); + + $url = add_query_arg([ + // 'elementor-preview' => $this->getMainId(), + 'ctx' => \Shop::getContext(), + 'ver' => time(), + ], $this->getPermalink()); + + // remove_filter('pre_option_permalink_structure', '__return_empty_string'); + + /** + * Document preview URL. + * + * Filters the document preview URL. + * + * @since 2.0.0 + * + * @param string $url The preview URL. + * @param Document $this The document instance. + */ + $url = apply_filters('elementor/document/urls/preview', $url, $this); + } + + return $url; + } + + /** + * @since 2.0.0 + * @access public + * + * @param string $key + * + * @return array + */ + public function getJsonMeta($key) + { + $meta = get_post_meta($this->post->ID, $key, true); + + if (is_string($meta) && !empty($meta)) { + $meta = json_decode($meta, true); + } + + if (empty($meta)) { + $meta = []; + } + + return $meta; + } + + /** + * @since 2.0.0 + * @access public + * + * @param null $data + * @param bool $with_html_content + * + * @return array + */ + public function getElementsRawData($data = null, $with_html_content = false) + { + if (is_null($data)) { + $data = $this->getElementsData(); + } + + // Change the current documents, so widgets can use `documents->get_current` and other post data + Plugin::$instance->documents->switchToDocument($this); + + $editor_data = []; + + foreach ($data as $element_data) { + $element = Plugin::$instance->elements_manager->createElementInstance($element_data); + + if (!$element) { + continue; + } + + $editor_data[] = $element->getRawData($with_html_content); + } + + Plugin::$instance->documents->restoreDocument(); + + return $editor_data; + } + + /** + * @since 2.0.0 + * @access public + * + * @param string $status + * + * @return array + */ + public function getElementsData($status = DB::STATUS_PUBLISH) + { + $elements = $this->getJsonMeta('_elementor_data'); + + if (DB::STATUS_DRAFT === $status) { + $autosave = $this->getNewerAutosave(); + + if (is_object($autosave)) { + $autosave_elements = Plugin::$instance->documents + ->get($autosave->getPost()->ID) + ->getJsonMeta('_elementor_data'); + } + } + + if (Plugin::$instance->editor->isEditMode()) { + if (empty($elements) && empty($autosave_elements)) { + // Convert to Elementor. + $elements = $this->convertToElementor(); + if ($this->isAutosave()) { + Plugin::$instance->db->copyElementorMeta($this->post->post_parent, $this->post->ID); + } + } + } + + if (!empty($autosave_elements)) { + $elements = $autosave_elements; + } + + return $elements; + } + + /** + * @since 2.3.0 + * @access public + */ + public function convertToElementor() + { + $this->save([]); + + if (empty($this->post->post_content)) { + return []; + } + + $widget_type = Plugin::$instance->widgets_manager->getWidgetTypes('text-editor'); + $settings = [ + 'editor' => $this->post->post_content, + ]; + + // TODO: Better coding to start template for editor + return [ + [ + 'id' => Utils::generateRandomString(), + 'elType' => 'section', + 'elements' => [ + [ + 'id' => Utils::generateRandomString(), + 'elType' => 'column', + 'elements' => [ + [ + 'id' => Utils::generateRandomString(), + 'elType' => $widget_type::getType(), + 'widgetType' => $widget_type->getName(), + 'settings' => $settings, + ], + ], + ], + ], + ], + ]; + } + + /** + * @since 2.1.3 + * @access public + */ + public function printElementsWithWrapper($elements_data = null) + { + if (!$elements_data) { + $elements_data = $this->getElementsData(); + } + ?> +
getContainerAttributes()) ?>> +
printElements($elements_data) ?>
+
+ sprintf(__('%s Settings'), static::getTitle()), + ]; + } + + /** + * @since 2.0.0 + * @access public + */ + public function getPost() + { + return $this->post; + } + + /** + * @since 2.0.0 + * @access public + */ + public function getPermalink() + { + return get_preview_post_link($this->getMainId()); + } + + /** + * @since 2.0.8 + * @access public + */ + public function getContent($with_css = false) + { + return Plugin::$instance->frontend->getBuilderContent($this->post->ID, $with_css); + } + + /** + * @since 2.0.0 + * @access public + */ + public function delete() + { + if ('revision' === $this->post->post_type) { + $deleted = wp_delete_post_revision($this->post); + } else { + $deleted = wp_delete_post($this->post->ID); + } + + return $deleted && !is_wp_error($deleted); + } + + /** + * Save editor elements. + * + * Save data from the editor to the database. + * + * @since 2.0.0 + * @access protected + * + * @param array $elements + */ + protected function saveElements($elements) + { + $editor_data = $this->getElementsRawData($elements); + + // We need the `wp_slash` in order to avoid the unslashing during the `update_post_meta` + // $json_value = wp_slash(wp_json_encode($editor_data)); + + $is_meta_updated = update_post_meta($this->post->ID, '_elementor_data', $editor_data); + + /** + * Before saving data. + * + * Fires before Elementor saves data to the database. + * + * @since 1.0.0 + * + * @param string $status Post status. + * @param int|bool $is_meta_updated Meta ID if the key didn't exist, true on successful update, false on failure. + */ + do_action('elementor/db/before_save', $this->post->post_status, $is_meta_updated); + + Plugin::$instance->db->savePlainText($this->post->ID); + + /** + * After saving data. + * + * Fires after Elementor saves data to the database. + * + * @since 1.0.0 + * + * @param int $post_id The ID of the post. + * @param array $editor_data Sanitize posted data. + */ + do_action('elementor/editor/after_save', $this->post->ID, $editor_data); + } + + /** + * @since 2.0.0 + * @access public + * + * @param int $user_id Optional. User ID. Default value is `0`. + * + * @return bool|int + */ + public function getAutosaveId($user_id = 0) + { + if (!$user_id) { + $user_id = get_current_user_id(); + } + + $autosave = Utils::getPostAutosave($this->post->ID, $user_id); + if ($autosave) { + return $autosave->ID; + } + + return false; + } + + public function saveVersion() + { + if (!defined('IS_ELEMENTOR_UPGRADE')) { + // Save per revision. + $this->updateMeta('_elementor_version', _CE_VERSION_); + + // Save update date if needed + if (!$this->post->post_modified) { + $this->updateMeta('_ce_date_upd', date('Y-m-d H:i:s')); + } + + /** + * Document version save. + * + * Fires when document version is saved on Elementor. + * Will not fire during Elementor Upgrade. + * + * @since 2.5.12 + * + * @param \Elementor\Core\Base\Document $this The current document. + * + */ + do_action('elementor/document/save_version', $this); + } + } + + /** + * @since 2.3.0 + * @access public + */ + public function saveTemplateType() + { + $template_type = $this->getName(); + + if ($template_type !== $this->post->template_type && (UId::TEMPLATE >= $this->post->uid->id_type || UId::THEME === $this->post->uid->id_type)) { + $this->post->template_type = $template_type; + + $this->post->_obj->setFieldsToUpdate([ + 'type' => true, + ]); + return $this->post->_obj->update(); + } + // return $this->updateMainMeta(self::TYPE_META_KEY, $this->getName()); + return true; + } + + /** + * @since 2.3.0 + * @access public + */ + public function getTemplateType() + { + // return $this->getMainMeta(self::TYPE_META_KEY); + return $this->post->template_type; + } + + /** + * @since 2.0.0 + * @access public + * + * @param string $key Meta data key. + * + * @return mixed + */ + public function getMainMeta($key) + { + return get_post_meta($this->getMainId(), $key, true); + } + + /** + * @since 2.0.4 + * @access public + * + * @param string $key Meta data key. + * @param string $value Meta data value. + * + * @return bool|int + */ + public function updateMainMeta($key, $value) + { + return update_post_meta($this->getMainId(), $key, $value); + } + + /** + * @since 2.0.4 + * @access public + * + * @param string $key Meta data key. + * @param string $value Optional. Meta data value. Default is an empty string. + * + * @return bool + */ + public function deleteMainMeta($key, $value = '') + { + return delete_post_meta($this->getMainId(), $key, $value); + } + + /** + * @since 2.0.0 + * @access public + * + * @param string $key Meta data key. + * + * @return mixed + */ + public function getMeta($key) + { + return get_post_meta($this->post->ID, $key, true); + } + + /** + * @since 2.0.0 + * @access public + * + * @param string $key Meta data key. + * @param mixed $value Meta data value. + * + * @return bool|int + */ + public function updateMeta($key, $value) + { + return update_post_meta($this->post->ID, $key, $value); + } + + /** + * @since 2.0.3 + * @access public + * + * @param string $key Meta data key. + * @param string $value Meta data value. + * + * @return bool + */ + public function deleteMeta($key, $value = '') + { + return delete_post_meta($this->post->ID, $key, $value); + } + + /** + * @since 2.0.0 + * @access public + */ + public function getLastEdited() + { + $post = $this->post; + $autosave_post = $this->getAutosave(); + + if ($autosave_post) { + $post = $autosave_post->getPost(); + } + + $date = \Tools::displayDate($post->post_modified, null, true); + $author = get_user_by('id', $post->post_author); + $display_name = isset($author->display_name) ? $author->display_name : __('Unknown'); + + if ($autosave_post || 'revision' === $post->post_type) { + /* translators: 1: Saving date, 2: Author display name */ + $last_edited = sprintf(__('Draft saved on %1$s by %2$s'), '', $display_name); + } else { + /* translators: 1: Editing date, 2: Author display name */ + $last_edited = sprintf(__('Last edited on %1$s by %2$s'), '', $display_name); + } + + return $last_edited; + } + + /** + * @since 2.0.0 + * @access public + * + * @param array $data + * + * @throws \Exception If the post does not exist. + */ + public function __construct(array $data = []) + { + if ($data) { + if (empty($data['post_id'])) { + $this->post = new WPPost((object) []); + } else { + $this->post = get_post($data['post_id']); + + if (!$this->post) { + throw new \Exception(sprintf('Post ID #%s does not exist.', $data['post_id']), Exceptions::NOT_FOUND); + } + } + + // Each Control_Stack is based on a unique ID. + $data['id'] = $data['post_id']; + + if (!isset($data['settings'])) { + $data['settings'] = []; + } + + $saved_settings = get_post_meta($this->post->ID, '_elementor_page_settings', true); + if (!empty($saved_settings) && is_array($saved_settings)) { + $data['settings'] += $saved_settings; + } + } + + parent::__construct($data); + } + + protected function getRemoteLibraryConfig() + { + $config = [ + 'type' => 'block', + 'category' => $this->getName(), + 'autoImportSettings' => false, + ]; + + return $config; + } + + /** + * @since 2.0.4 + * @access protected + * + * @param $settings + */ + protected function saveSettings($settings) + { + $page_settings_manager = SettingsManager::getSettingsManagers('page'); + $page_settings_manager->ajaxBeforeSaveSettings($settings, $this->post->ID); + $page_settings_manager->saveSettings($settings, $this->post->ID); + } + + /** + * @since 2.1.3 + * @access protected + */ + protected function printElements($elements_data) + { + foreach ($elements_data as $element_data) { + $element = Plugin::$instance->elements_manager->createElementInstance($element_data); + + if (!$element) { + continue; + } + + $element->printElement(); + } + } +} diff --git a/modules/creativeelements/core/base/header-footer-base.php b/modules/creativeelements/core/base/header-footer-base.php new file mode 100644 index 00000000..0d3740ff --- /dev/null +++ b/modules/creativeelements/core/base/header-footer-base.php @@ -0,0 +1,55 @@ +getName(); + } + + public function getElementUniqueSelector(ElementBase $element) + { + return '#' . $this->getName() . ' .elementor-element' . $element->getUniqueSelector(); + } + + protected static function getEditorPanelCategories() + { + // Move to top as active. + $categories = [ + 'theme-elements' => [ + 'title' => __('Site'), + 'active' => true, + ], + ]; + + return $categories + parent::getEditorPanelCategories(); + } + + protected function _registerControls() + { + parent::_registerControls(); + + Post::registerStyleControls($this); + + $this->updateControl( + 'section_page_style', + [ + 'label' => __('Style'), + ] + ); + } +} diff --git a/modules/creativeelements/core/base/index.php b/modules/creativeelements/core/base/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/core/base/index.php @@ -0,0 +1,8 @@ +components[$id] = $instance; + } + + /** + * @since 2.3.0 + * @access public + * @return Module[] + */ + public function getComponents() + { + return $this->components; + } + + /** + * Get module component. + * + * Retrieve the module component. + * + * @since 1.7.0 + * @access public + * + * @param string $id Component ID. + * + * @return mixed An instance of the component, or `false` if the component + * doesn't exist. + */ + public function getComponent($id) + { + if (isset($this->components[$id])) { + return $this->components[$id]; + } + + return false; + } + + /** + * Get assets url. + * + * @since 2.3.0 + * @access protected + * + * @param string $file_name + * @param string $file_extension + * @param string $relative_url Optional. Default is null. + * @param string $add_min_suffix Optional. Default is 'default'. + * + * @return string + */ + final protected function getAssetsUrl($file_name, $file_extension, $relative_url = null, $add_min_suffix = 'default') + { + static $is_test_mode = null; + + if (null === $is_test_mode) { + $is_test_mode = _PS_MODE_DEV_ || defined('ELEMENTOR_TESTS') && ELEMENTOR_TESTS; + } + + if (!$relative_url) { + $relative_url = $this->getAssetsRelativeUrl() . $file_extension . '/'; + } + + $url = _CE_URL_ . $relative_url . $file_name; + + if ('default' === $add_min_suffix) { + $add_min_suffix = !$is_test_mode; + } + + if ($add_min_suffix) { + $url .= '.min'; + } + + return $url . '.' . $file_extension; + } + + /** + * Get js assets url + * + * @since 2.3.0 + * @access protected + * + * @param string $file_name + * @param string $relative_url Optional. Default is null. + * @param string $add_min_suffix Optional. Default is 'default'. + * + * @return string + */ + final protected function getJsAssetsUrl($file_name, $relative_url = null, $add_min_suffix = 'default') + { + return $this->getAssetsUrl($file_name, 'js', $relative_url, $add_min_suffix); + } + + /** + * Get css assets url + * + * @since 2.3.0 + * @access protected + * + * @param string $file_name + * @param string $relative_url Optional. Default is null. + * @param string $add_min_suffix Optional. Default is 'default'. + * @param bool $add_direction_suffix Optional. Default is `false` + * + * @return string + */ + final protected function getCssAssetsUrl($file_name, $relative_url = null, $add_min_suffix = 'default', $add_direction_suffix = false) + { + static $direction_suffix = null; + + if (!$direction_suffix) { + $direction_suffix = is_rtl() ? '-rtl' : ''; + } + + if ($add_direction_suffix) { + $file_name .= $direction_suffix; + } + + return $this->getAssetsUrl($file_name, 'css', $relative_url, $add_min_suffix); + } + + /** + * Get assets relative url + * + * @since 2.3.0 + * @access protected + * + * @return string + */ + protected function getAssetsRelativeUrl() + { + return 'views/'; + } +} diff --git a/modules/creativeelements/core/base/theme-document.php b/modules/creativeelements/core/base/theme-document.php new file mode 100644 index 00000000..cba947ea --- /dev/null +++ b/modules/creativeelements/core/base/theme-document.php @@ -0,0 +1,51 @@ + true, + ]; + + return $config; + } + + // protected function _registerControls() +} diff --git a/modules/creativeelements/core/base/theme-page-document.php b/modules/creativeelements/core/base/theme-page-document.php new file mode 100644 index 00000000..71c51541 --- /dev/null +++ b/modules/creativeelements/core/base/theme-page-document.php @@ -0,0 +1,35 @@ +getMainId(), 0, -6); + } + + protected function _registerControls() + { + parent::_registerControls(); + + if ('product' !== $this->getName()) { + Post::registerPostFieldsControl($this); + } + + Post::registerStyleControls($this); + } +} diff --git a/modules/creativeelements/core/common/app.php b/modules/creativeelements/core/common/app.php new file mode 100644 index 00000000..8aea8546 --- /dev/null +++ b/modules/creativeelements/core/common/app.php @@ -0,0 +1,269 @@ +addDefaultTemplates(); + + add_action('elementor/editor/before_enqueue_scripts', [$this, 'register_scripts']); + // add_action('admin_enqueue_scripts', [$this, 'register_scripts']); + add_action('wp_enqueue_scripts', [$this, 'register_scripts']); + + add_action('elementor/editor/before_enqueue_styles', [$this, 'register_styles']); + // add_action('admin_enqueue_scripts', [$this, 'register_styles']); + add_action('wp_enqueue_scripts', [$this, 'register_styles'], 9); + + add_action('elementor/editor/footer', [$this, 'print_templates']); + // add_action('admin_footer', [$this, 'print_templates']); + add_action('wp_footer', [$this, 'print_templates']); + } + + /** + * Init components + * + * Initializing common components. + * + * @since 2.3.0 + * @access public + */ + public function initComponents() + { + $this->addComponent('ajax', new Ajax()); + + // if (current_user_can('manage_options')) { + // if (!is_customize_preview()) { + // $this->addComponent('finder', new Finder()); + // } + + // $this->addComponent('connect', new Connect()); + // } + } + + /** + * Get name. + * + * Retrieve the app name. + * + * @since 2.3.0 + * @access public + * + * @return string Common app name. + */ + public function getName() + { + return 'common'; + } + + /** + * Register scripts. + * + * Register common scripts. + * + * @since 2.3.0 + * @access public + */ + public function registerScripts() + { + wp_register_script( + 'elementor-common-modules', + $this->getJsAssetsUrl('common-modules'), + [], + _CE_VERSION_, + true + ); + + wp_register_script( + 'backbone-marionette', + $this->getJsAssetsUrl('backbone.marionette', 'views/lib/backbone/'), + [ + 'backbone', + ], + '2.4.5', + true + ); + + wp_register_script( + 'backbone-radio', + $this->getJsAssetsUrl('backbone.radio', 'views/lib/backbone/'), + [ + 'backbone', + ], + '1.0.4', + true + ); + + wp_register_script( + 'elementor-dialog', + $this->getJsAssetsUrl('dialog', 'views/lib/dialog/'), + [ + 'jquery-ui-position', + ], + '4.7.1', + true + ); + + wp_register_script( + 'elementor-common', + $this->getJsAssetsUrl('common'), + [ + 'jquery', + 'jquery-ui-draggable', + 'backbone-marionette', + 'backbone-radio', + 'elementor-common-modules', + 'elementor-dialog', + ], + _CE_VERSION_, + true + ); + + $this->printConfig(); + + wp_enqueue_script('elementor-common'); + } + + /** + * Register styles. + * + * Register common styles. + * + * @since 2.3.0 + * @access public + */ + public function registerStyles() + { + wp_register_style( + 'elementor-icons', + $this->getCssAssetsUrl('elementor-icons', 'views/lib/eicons/css/'), + [], + '4.3.1' + ); + + wp_register_style( + 'ce-icons', + $this->getCssAssetsUrl('ceicons', 'views/lib/ceicons/'), + [], + _CE_VERSION_ + ); + + wp_enqueue_style( + 'elementor-common', + $this->getCssAssetsUrl('common', null, 'default', true), + [ + 'elementor-icons', + ], + _CE_VERSION_ + ); + } + + /** + * Add template. + * + * @since 2.3.0 + * @access public + * + * @param string $template Can be either a link to template file or template + * HTML content. + * @param string $type Optional. Whether to handle the template as path + * or text. Default is `path`. + */ + public function addTemplate($template, $type = 'path') + { + if ('path' === $type) { + ob_start(); + + include $template; + + $template = ob_get_clean(); + } + + $this->templates[] = $template; + } + + /** + * Print Templates + * + * Prints all registered templates. + * + * @since 2.3.0 + * @access public + */ + public function printTemplates() + { + foreach ($this->templates as $template) { + echo $template; + } + } + + /** + * Get init settings. + * + * Define the default/initial settings of the common app. + * + * @since 2.3.0 + * @access protected + * + * @return array + */ + protected function getInitSettings() + { + return [ + 'version' => _CE_VERSION_, + 'isRTL' => is_rtl(), + 'activeModules' => array_keys($this->getComponents()), + 'urls' => [ + 'assets' => _MODULE_DIR_ . 'creativeelements/views/', + ], + ]; + } + + /** + * Add default templates. + * + * Register common app default templates. + * @since 2.3.0 + * @access private + */ + private function addDefaultTemplates() + { + $default_templates = [ + 'includes/editor-templates/library-layout.php', + ]; + + foreach ($default_templates as $template) { + $this->addTemplate(_CE_PATH_ . $template); + } + } +} diff --git a/modules/creativeelements/core/common/index.php b/modules/creativeelements/core/common/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/core/common/index.php @@ -0,0 +1,8 @@ +ajax_actions[$tag] = compact('tag', 'callback'); + } + + /** + * Handle ajax request. + * + * Verify ajax nonce, and run all the registered actions for this request. + * + * Fired by `wp_ajax_elementor_ajax` action. + * + * @since 2.0.0 + * @access public + */ + public function handleAjaxRequest() + { + if (!$this->verifyRequestNonce()) { + $this->addResponseData(false, __('Token Expired.')) + ->sendError(Exceptions::UNAUTHORIZED); + } + + $editor_post_id = 0; + + if (!empty($_REQUEST['editor_post_id'])) { + $editor_post_id = absint($_REQUEST['editor_post_id']); + + Plugin::$instance->db->switchToPost($editor_post_id); + } + + /** + * Register ajax actions. + * + * Fires when an ajax request is received and verified. + * + * Used to register new ajax action handles. + * + * @since 2.0.0 + * + * @param self $this An instance of ajax manager. + */ + do_action('elementor/ajax/register_actions', $this); + + $this->requests = json_decode(${'_POST'}['actions'], true); + + foreach ($this->requests as $id => $action_data) { + $this->current_action_id = $id; + + if (!isset($this->ajax_actions[$action_data['action']])) { + $this->addResponseData(false, __('Action not found.'), Exceptions::BAD_REQUEST); + + continue; + } + + if ($editor_post_id) { + $action_data['data']['editor_post_id'] = $editor_post_id; + } + + // try { + $results = call_user_func($this->ajax_actions[$action_data['action']]['callback'], $action_data['data'], $this); + + if (false === $results) { + $this->addResponseData(false); + } else { + $this->addResponseData(true, $results); + } + // } catch (\Exception $e) { + // $this->addResponseData(false, $e->getMessage(), $e->getCode()); + // } + } + + $this->current_action_id = null; + + $this->sendSuccess(); + } + + /** + * Get current action data. + * + * Retrieve the data for the current ajax request. + * + * @since 2.0.1 + * @access public + * + * @return bool|mixed Ajax request data if action exist, False otherwise. + */ + public function getCurrentActionData() + { + if (!$this->current_action_id) { + return false; + } + + return $this->requests[$this->current_action_id]; + } + + /** + * Create nonce. + * + * Creates a cryptographic token to + * give the user an access to Elementor ajax actions. + * + * @since 2.3.0 + * @access public + * + * @return string The nonce token. + */ + public function createNonce() + { + return wp_create_nonce(self::NONCE_KEY); + } + + /** + * Verify request nonce. + * + * Whether the request nonce verified or not. + * + * @since 2.3.0 + * @access public + * + * @return bool True if request nonce verified, False otherwise. + */ + public function verifyRequestNonce() + { + return !empty($_REQUEST['_nonce']) && wp_verify_nonce($_REQUEST['_nonce'], self::NONCE_KEY); + } + + protected function getInitSettings() + { + return [ + 'url' => Helper::getAjaxLink(), + 'nonce' => $this->createNonce(), + ]; + } + + /** + * Ajax success response. + * + * Send a JSON response data back to the ajax request, indicating success. + * + * @since 2.0.0 + * @access private + */ + private function sendSuccess() + { + $response = [ + 'success' => true, + 'data' => [ + 'responses' => $this->response_data, + ], + ]; + + die(str_replace('}},"', "}},\n\"", json_encode($response))); + } + + /** + * Ajax failure response. + * + * Send a JSON response data back to the ajax request, indicating failure. + * + * @since 2.0.0 + * @access private + * + * @param null $code + */ + private function sendError($code = null) + { + wp_send_json_error([ + 'responses' => $this->response_data, + ], $code); + } + + /** + * Add response data. + * + * Add new response data to the array of all the ajax requests. + * + * @since 2.0.0 + * @access private + * + * @param bool $success True if the requests returned successfully, False otherwise. + * @param mixed $data Optional. Response data. Default is null. + * @param int $code Optional. Response code. Default is 200. + * + * @return Module An instance of ajax manager. + */ + private function addResponseData($success, $data = null, $code = 200) + { + $this->response_data[$this->current_action_id] = [ + 'success' => $success, + 'code' => $code, + 'data' => $data, + ]; + + return $this; + } +} diff --git a/modules/creativeelements/core/common/modules/index.php b/modules/creativeelements/core/common/modules/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/core/common/modules/index.php @@ -0,0 +1,8 @@ +getMainId())->toDefault(); + } + + /** + * @since 2.0.0 + * @access protected + */ + protected function _registerControls() + { + parent::_registerControls(); + + $this->startInjection([ + 'of' => 'post_title', + ]); + + $this->addControl( + 'full_width', + [ + 'label' => __('Clear Content Wrapper'), + 'type' => ControlsManager::SWITCHER, + 'description' => sprintf(__( + 'Not working? You can set a different selector for the content wrapper ' . + 'in the Settings page.' + ), Helper::getSettingsLink()), + 'selectors' => [ + \Configuration::get('elementor_page_wrapper_selector') => 'min-width: 100%; margin: 0; padding: 0;', + ], + ] + ); + + $this->endInjection(); + + Post::registerStyleControls($this); + + $this->updateControl( + 'section_page_style', + [ + 'label' => __('Style'), + ] + ); + } + + /** + * @since 2.0.0 + * @access public + * + * @param array $data + * + * @throws \Exception + */ + public function __construct(array $data = []) + { + parent::__construct($data); + + if (isset($this->post->_obj->hook) && stripos($this->post->_obj->hook, 'displayMaintenance') === 0) { + self::$maintenance = true; + } + } + + protected function getRemoteLibraryConfig() + { + $config = parent::getRemoteLibraryConfig(); + + $config['type'] = 'page'; + + return $config; + } +} diff --git a/modules/creativeelements/core/document-types/footer.php b/modules/creativeelements/core/document-types/footer.php new file mode 100644 index 00000000..74f2db16 --- /dev/null +++ b/modules/creativeelements/core/document-types/footer.php @@ -0,0 +1,36 @@ + [ + 'title' => __('Single'), + 'active' => false, + ], + ] + ); + } + + /** + * @since 2.0.0 + * @access public + */ + public function getName() + { + return 'post'; + } + + /** + * @since 2.0.0 + * @access public + * @static + */ + public static function getTitle() + { + return __('Page'); + } + + /** + * @since 2.0.0 + * @access public + */ + public function getCssWrapperSelector() + { + return 'body.elementor-page-' . $this->getMainId(); + } + + /** + * @since 2.0.0 + * @access protected + */ + protected function _registerControls() + { + parent::_registerControls(); + + self::registerHideTitleControl($this); + + self::registerPostFieldsControl($this); + + self::registerStyleControls($this); + } + + /** + * @since 2.0.0 + * @access public + * @static + * @param Document $document + */ + public static function registerHideTitleControl($document) + { + $page_title_selector = SettingsManager::getSettingsManagers('general')->getModel()->getSettings('elementor_page_title_selector'); + + if (!$page_title_selector) { + $page_title_selector = 'header.page-header'; + } + + $page_title_selector .= ', .elementor-page-title'; + + $document->startInjection([ + 'of' => 'post_title', + ]); + + $document->addControl( + 'hide_title', + [ + 'label' => __('Hide Title'), + 'type' => ControlsManager::SWITCHER, + 'description' => sprintf(__( + 'Not working? You can set a different selector for the title ' . + 'in the Settings page.' + ), Helper::getSettingsLink()), + 'selectors' => [ + '{{WRAPPER}} ' . $page_title_selector => 'display: none', + ], + ] + ); + + $document->endInjection(); + } + + /** + * @since 2.0.0 + * @access public + * @static + * @param Document $document + */ + public static function registerStyleControls($document) + { + $type = $document->getTemplateType(); + + if ('product-quick-view' === $type || 'product-miniature' === $type) { + return; + } + + $document->startControlsSection( + 'section_page_style', + [ + 'label' => __('Body Style'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $document->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background', + 'fields_options' => [ + 'image' => [ + // Currently isn't supported. + 'dynamic' => [ + 'active' => false, + ], + ], + ], + 'selector' => '{{WRAPPER}}', + ] + ); + + $document->addResponsiveControl( + 'padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}}' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $document->endControlsSection(); + + Plugin::$instance->controls_manager->addCustomCssControls($document); + } + + /** + * @since 2.0.0 + * @access public + * @static + * @param Document $document + */ + public static function registerPostFieldsControl($document) + { + $document->startInjection([ + 'of' => 'post_status', + ]); + + // if (post_type_supports($document->post->post_type, 'excerpt')) { + // $document->addControl( + // 'post_excerpt', + // [ + // 'label' => __('Excerpt'), + // 'type' => ControlsManager::TEXTAREA, + // 'default' => $document->post->post_excerpt, + // 'label_block' => true, + // ] + // ); + // } + + $uid = UId::parse($document->getMainId()); + + if (UId::CMS === $uid->id_type || + UId::THEME === $uid->id_type && stripos($document->getTemplateType(), 'page-') === 0 + ) { + $document->addControl( + 'post_featured_image', + [ + 'label' => __('Featured Image'), + 'type' => ControlsManager::MEDIA, + 'default' => [ + 'url' => $document->getMeta('_og_image'), + ], + ] + ); + } + + $document->endInjection(); + } + + /** + * @since 2.0.0 + * @access public + * + * @param array $data + * + * @throws \Exception + */ + public function __construct(array $data = []) + { + if ($data) { + $template = get_post_meta($data['post_id'], '_wp_page_template', true); + + if (empty($template)) { + $template = 'default'; + } + + $data['settings']['template'] = $template; + } + + parent::__construct($data); + } + + protected function getRemoteLibraryConfig() + { + $config = parent::getRemoteLibraryConfig(); + + $config['type'] = 'page'; + + return $config; + } +} diff --git a/modules/creativeelements/core/document-types/product-miniature.php b/modules/creativeelements/core/document-types/product-miniature.php new file mode 100644 index 00000000..d9e3c512 --- /dev/null +++ b/modules/creativeelements/core/document-types/product-miniature.php @@ -0,0 +1,378 @@ + [ + 'title' => __('Product Miniature'), + ], + ]; + + $categories += parent::getEditorPanelCategories(); + + return $categories; + } + + protected function getRemoteLibraryConfig() + { + $config = parent::getRemoteLibraryConfig(); + + $config['category'] = 'miniature'; + + return $config; + } + + public function getCssWrapperSelector() + { + return '.elementor.elementor-' . uidval($this->getMainId())->toDefault(); + } + + protected function _registerControls() + { + parent::_registerControls(); + + $this->startInjection([ + 'of' => 'preview_id', + 'at' => 'before', + ]); + + $this->addResponsiveControl( + 'preview_width', + [ + 'label' => __('Width') . ' (px)', + 'type' => ControlsManager::NUMBER, + 'min' => 150, + 'default' => 360, + 'tablet_default' => 360, + 'mobile_default' => 360, + ] + ); + + $this->endInjection(); + + $this->startControlsSection( + 'section_style', + [ + 'label' => __('Background'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_background'); + + $this->startControlsTab( + 'tab_background_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background', + 'selector' => '{{WRAPPER}} .elementor-section-wrap', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_background_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background_hover', + 'selector' => '{{WRAPPER}} .elementor-section-wrap:hover', + ] + ); + + $this->addControl( + 'background_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0.3, + ], + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'separator' => [ + '{{WRAPPER}} .elementor-section-wrap' => '--e-background-transition-duration: {{SIZE}}s;', + ], + 'condition' => [ + 'background_hover_background!' => '', + ], + 'separator' => 'before', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_border', + [ + 'label' => __('Border'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_border'); + + $this->startControlsTab( + 'tab_border_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border', + 'selector' => '{{WRAPPER}} .elementor-section-wrap', + ] + ); + + $this->addResponsiveControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-section-wrap' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow', + 'selector' => '{{WRAPPER}} .elementor-section-wrap', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_border_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border_hover', + 'selector' => '{{WRAPPER}} .elementor-section-wrap:hover', + ] + ); + + $this->addResponsiveControl( + 'border_radius_hover', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-section-wrap:hover' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow_hover', + 'selector' => '{{WRAPPER}} .elementor-section-wrap:hover', + ] + ); + + $this->addControl( + 'border_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'separator' => 'before', + 'default' => [ + 'size' => 0.3, + ], + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'background_hover_background', + 'operator' => '!==', + 'value' => '', + ], + [ + 'name' => 'border_hover_border', + 'operator' => '!==', + 'value' => '', + ], + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-section-wrap' => '--e-border-transition-duration: {{SIZE}}s;', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_advanced', + [ + 'label' => __('Advanced'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addResponsiveControl( + 'margin', + [ + 'label' => __('Margin'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'allowed_dimensions' => 'vertical', + 'placeholder' => [ + 'top' => '', + 'right' => 'auto', + 'bottom' => '', + 'left' => 'auto', + ], + 'selectors' => [ + '{{WRAPPER}}' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}}' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'css_classes', + [ + 'label' => __('CSS Classes'), + 'type' => ControlsManager::TEXT, + 'label_block' => false, + 'title' => __('Add your custom class WITHOUT the dot. e.g: my-class'), + ] + ); + + $this->addControl( + 'overflow', + [ + 'label' => __('Overflow'), + 'type' => ControlsManager::SELECT, + 'default' => 'hidden', + 'options' => [ + '' => __('Default'), + 'hidden' => __('Hidden'), + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-section-wrap' => 'overflow: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + + Plugin::$instance->controls_manager->addCustomCssControls($this); + } + + public function printSmartyElementsWithWrapper(&$elements_data) + { + $container = $this->getContainerAttributes(); + $container['class'] .= '{if !empty($productClasses)} {$productClasses}{/if}'; + + if ($css_classes = $this->getSettings('css_classes')) { + $container['class'] .= " $css_classes"; + } + if (strrpos($container['data-elementor-settings'], '}') !== false) { + $container['data-elementor-settings'] = "{literal}{$container['data-elementor-settings']}{/literal}"; + } + $uid = $this->getMainId(); + $article = [ + 'class' => 'elementor-section-wrap', + 'data-id-product' => '{$product.id_product}', + 'data-id-product-attribute' => '{$product.id_product_attribute}', + 'itemprop' => 'item', + ]; + ?> + {* Generated by Creative Elements, do not modify it *} + {ce_enqueue_miniature()} +
> +
itemscope itemtype="http://schema.org/Product"> + elements_manager->createElementInstance($element_data)) { + $element->printElement(); + } + } + ?> +
+
+ [ + 'title' => __('Product'), + ], + ]; + + $categories += parent::getEditorPanelCategories(); + + return $categories; + } + + protected function getRemoteLibraryConfig() + { + $config = parent::getRemoteLibraryConfig(); + + $config['category'] = 'quick view'; + + return $config; + } + + protected function _registerControls() + { + $this->startControlsSection( + 'popup_layout', + [ + 'label' => __('Layout'), + 'tab' => ControlsManager::TAB_SETTINGS, + ] + ); + + $this->addResponsiveControl( + 'width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 100, + 'max' => 1600, + ], + 'vw' => [ + 'min' => 10, + 'max' => 100, + ], + ], + 'size_units' => ['px', 'vw'], + 'default' => [ + 'size' => 1200, + ], + 'selectors' => [ + '{{WRAPPER}} .dialog-widget-content' => 'width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'height_type', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SELECT, + 'default' => 'auto', + 'options' => [ + 'auto' => __('Fit To Content'), + 'fit_to_screen' => __('Fit To Screen'), + 'custom' => __('Custom'), + ], + 'selectors_dictionary' => [ + 'fit_to_screen' => '100vh', + 'custom' => '', + ], + 'selectors' => [ + '{{WRAPPER}} .dialog-widget-content' => 'height: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'height', + [ + 'label' => __('Custom Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 100, + 'max' => 1600, + ], + 'vh' => [ + 'min' => 10, + 'max' => 100, + ], + ], + 'size_units' => ['px', 'vh'], + 'condition' => [ + 'height_type' => 'custom', + ], + 'default' => [ + 'size' => 700, + ], + 'selectors' => [ + '{{WRAPPER}} .dialog-widget-content' => 'height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'content_position', + [ + 'label' => __('Content Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'top', + 'options' => [ + 'top' => __('Top'), + 'center' => __('Center'), + 'bottom' => __('Bottom'), + ], + 'condition' => [ + 'height_type!' => 'auto', + ], + 'selectors_dictionary' => [ + 'top' => 'flex-start', + 'bottom' => 'flex-end', + ], + 'selectors' => [ + '{{WRAPPER}}' => 'align-items: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'position_heading', + [ + 'label' => __('Position'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'horizontal_position', + [ + 'label' => __('Horizontal'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'toggle' => false, + 'default' => 'center', + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-h-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => 'justify-content: {{VALUE}}', + ], + 'selectors_dictionary' => [ + 'left' => 'flex-start', + 'right' => 'flex-end', + ], + ] + ); + + $this->addResponsiveControl( + 'vertical_position', + [ + 'label' => __('Vertical'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'toggle' => false, + 'default' => 'center', + 'options' => [ + 'top' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-v-align-middle', + ], + 'bottom' => [ + 'title' => __('Bottom'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'selectors_dictionary' => [ + 'top' => 'flex-start', + 'bottom' => 'flex-end', + ], + 'selectors' => [ + '{{WRAPPER}}' => 'align-items: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'close_button', + [ + 'label' => __('Close Button'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'default' => 'yes', + 'selectors' => [ + '{{WRAPPER}} .dialog-close-button' => 'display: block', + ], + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'entrance_animation', + [ + 'label' => __('Entrance Animation'), + 'type' => ControlsManager::ANIMATION, + 'label_block' => true, + 'frontend_available' => true, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'entrance_animation_duration', + [ + 'label' => __('Animation Duration') . ' (sec)', + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0.1, + 'max' => 3, + 'step' => 0.1, + ], + ], + 'default' => [ + 'size' => 0.5, + ], + 'selectors' => [ + '{{WRAPPER}} .dialog-message' => 'animation-duration: {{SIZE}}s', + ], + 'condition' => [ + 'entrance_animation!' => 'none', + ], + ] + ); + + $this->endControlsSection(); + + parent::_registerControls(); + + $this->startControlsSection( + 'section_page_style', + [ + 'label' => __('Popup'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background', + 'selector' => '{{WRAPPER}} .dialog-message', + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border', + 'selector' => '{{WRAPPER}} .dialog-message', + ] + ); + + $this->addResponsiveControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .dialog-message' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow', + 'selector' => '{{WRAPPER}} .dialog-message', + 'fields_options' => [ + 'box_shadow_type' => [ + 'default' => 'yes', + ], + 'box_shadow' => [ + 'default' => [ + 'horizontal' => 2, + 'vertical' => 8, + 'blur' => 23, + 'spread' => 3, + 'color' => 'rgba(0,0,0,0.2)', + ], + ], + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_overlay', + [ + 'label' => __('Overlay'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'overlay_background', + 'types' => ['classic', 'gradient'], + 'selector' => '{{WRAPPER}}', + 'fields_options' => [ + 'background' => [ + 'default' => 'classic', + ], + 'color' => [ + 'default' => 'rgba(0,0,0,.8)', + ], + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_close_button', + [ + 'label' => __('Close Button'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'close_button!' => '', + ], + ] + ); + + $this->addControl( + 'close_button_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'inside' => __('Inside'), + 'outside' => __('Outside'), + ], + 'default' => 'outside', + 'frontend_available' => true, + ] + ); + + $this->addResponsiveControl( + 'close_button_vertical', + [ + 'label' => __('Vertical Position'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%', 'px'], + 'range' => [ + '%' => [ + 'max' => 100, + 'min' => 0, + 'step' => 0.1, + ], + 'px' => [ + 'max' => 500, + 'min' => -500, + ], + ], + 'default' => [ + 'unit' => '%', + ], + 'tablet_default' => [ + 'unit' => '%', + ], + 'mobile_default' => [ + 'unit' => '%', + ], + 'selectors' => [ + '{{WRAPPER}} .dialog-close-button' => 'top: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'close_button_horizontal', + [ + 'label' => __('Horizontal Position'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%', 'px'], + 'range' => [ + '%' => [ + 'max' => 100, + 'min' => 0, + 'step' => 0.1, + ], + 'px' => [ + 'max' => 500, + 'min' => -500, + ], + ], + 'default' => [ + 'unit' => '%', + ], + 'tablet_default' => [ + 'unit' => '%', + ], + 'mobile_default' => [ + 'unit' => '%', + ], + 'selectors' => [ + '{{WRAPPER}} .dialog-close-button' => is_rtl() ? 'left: {{SIZE}}{{UNIT}}' : 'right: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'after', + ] + ); + + $this->startControlsTabs('close_button_style_tabs'); + + $this->startControlsTab( + 'tab_x_button_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'close_button_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .dialog-close-button i' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'close_button_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .dialog-close-button' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_x_button_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'close_button_hover_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .dialog-close-button:hover i' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'close_button_hover_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .dialog-close-button:hover' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addResponsiveControl( + 'icon_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .dialog-close-button' => 'font-size: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_advanced', + [ + 'label' => __('Advanced'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addResponsiveControl( + 'margin', + [ + 'label' => __('Margin'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .dialog-message' => + 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; ' . + 'max-height: calc(100vh - {{TOP}}{{UNIT}} - {{BOTTOM}}{{UNIT}})', + ], + ] + ); + + $this->addResponsiveControl( + 'padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .dialog-message' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'z_index', + [ + 'label' => __('Z-Index'), + 'type' => ControlsManager::NUMBER, + 'min' => 0, + 'selectors' => [ + '{{WRAPPER}}' => 'z-index: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + Plugin::$instance->controls_manager->addCustomCssControls($this); + } +} diff --git a/modules/creativeelements/core/document-types/product.php b/modules/creativeelements/core/document-types/product.php new file mode 100644 index 00000000..f611f1e5 --- /dev/null +++ b/modules/creativeelements/core/document-types/product.php @@ -0,0 +1,91 @@ + [ + 'title' => __('Product'), + ], + ]; + + $categories += parent::getEditorPanelCategories(); + + return $categories; + } + + protected function _registerControls() + { + parent::_registerControls(); + + $this->startControlsSection( + 'preview_settings', + [ + 'label' => __('Preview Settings'), + 'tab' => ControlsManager::TAB_SETTINGS, + ] + ); + + if (is_admin()) { + $prods = \Product::getProducts(\Context::getContext()->language->id, 0, 1, 'date_upd', 'DESC', false, true); + } + + $this->addControl( + 'preview_id', + [ + 'type' => ControlsManager::SELECT2, + 'label' => __('Product'), + 'label_block' => true, + 'select2options' => [ + 'placeholder' => __('Loading') . '...', + 'allowClear' => false, + 'product' => true, + 'ajax' => [ + 'url' => Helper::getAjaxProductsListLink(), + ], + ], + 'default' => !empty($prods[0]['id_product']) ? $prods[0]['id_product'] : 1, + 'export' => false, + ] + ); + + $this->addControl( + 'apply_preview', + [ + 'type' => ControlsManager::BUTTON, + 'label' => __('Apply & Preview'), + 'label_block' => true, + 'show_label' => false, + 'text' => __('Apply & Preview'), + 'separator' => 'none', + 'event' => 'elementorThemeBuilder:ApplyPreview', + ] + ); + + $this->endControlsSection(); + } +} diff --git a/modules/creativeelements/core/documents-manager.php b/modules/creativeelements/core/documents-manager.php new file mode 100644 index 00000000..99170b94 --- /dev/null +++ b/modules/creativeelements/core/documents-manager.php @@ -0,0 +1,627 @@ +registerAjaxAction('save_builder', [$this, 'ajax_save']); + $ajax_manager->registerAjaxAction('discard_changes', [$this, 'ajax_discard_changes']); + } + + /** + * Register default types. + * + * Registers the default document types. + * + * @since 2.0.0 + * @access public + */ + public function registerDefaultTypes() + { + $default_types = [ + 'post' => Post::getClassFullName(), + 'content' => Content::getClassFullName(), + 'header' => Header::getClassFullName(), + 'footer' => Footer::getClassFullName(), + 'product' => Product::getClassFullName(), + 'product-quick-view' => ProductQuickView::getClassFullName(), + 'product-miniature' => ProductMiniature::getClassFullName(), + 'page-index' => PageIndex::getClassFullName(), + 'page-contact' => PageContact::getClassFullName(), + 'page-not-found' => PageNotFound::getClassFullName(), + ]; + + foreach ($default_types as $type => $class) { + $this->registerDocumentType($type, $class); + } + } + + /** + * Register document type. + * + * Registers a single document. + * + * @since 2.0.0 + * @access public + * + * @param string $type Document type name. + * @param Document $class The name of the class that registers the document type. + * Full name with the namespace. + * + * @return DocumentsManager The updated document manager instance. + */ + public function registerDocumentType($type, $class) + { + $this->types[$type] = $class; + + $cpt = $class::getProperty('cpt'); + + if ($cpt) { + foreach ($cpt as $post_type) { + $this->cpt[$post_type] = $type; + } + } + + if ($class::getProperty('register_type')) { + SourceLocal::addTemplateType($type); + } + + return $this; + } + + /** + * Get document. + * + * Retrieve the document data based on a post ID. + * + * @since 2.0.0 + * @access public + * + * @param int $post_id Post ID. + * @param bool $from_cache Optional. Whether to retrieve cached data. Default is true. + * + * @return false|Document Document data or false if post ID was not entered. + */ + public function get($post_id, $from_cache = true) + { + $this->registerTypes(); + + $post_id = absint($post_id); + + if (!$post_id || !get_post($post_id)) { + return false; + } + + $post_id = apply_filters('elementor/documents/get/post_id', "$post_id"); + + if (!$from_cache || !isset($this->documents[$post_id])) { + if ($parent = wp_is_post_autosave($post_id)) { + $post_type = get_post_type($parent); + } else { + $post_type = get_post_type($post_id); + } + + $doc_type = 'post'; + + if (isset($this->cpt[$post_type])) { + $doc_type = $this->cpt[$post_type]; + } + + // $meta_type = get_post_meta($post_id, Document::TYPE_META_KEY, true); + $uid = UId::parse($post_id); + $meta_type = get_post($uid)->template_type; + + if ($meta_type && isset($this->types[$meta_type])) { + $doc_type = $meta_type; + } + + $doc_type_class = $this->getDocumentType($doc_type); + $this->documents[$post_id] = new $doc_type_class([ + 'post_id' => $post_id, + ]); + } + + return $this->documents[$post_id]; + } + + /** + * Get document or autosave. + * + * Retrieve either the document or the autosave. + * + * @since 2.0.0 + * @access public + * + * @param int $id Post ID. + * @param int $user_id User ID. Default is `0`. + * + * @return false|Document The document if it exist, False otherwise. + */ + public function getDocOrAutoSave($id, $user_id = 0) + { + $document = $this->get($id); + if ($document && $document->getAutosaveId($user_id)) { + $document = $document->getAutosave($user_id); + } + + return $document; + } + + /** + * Get document for frontend. + * + * Retrieve the document for frontend use. + * + * @since 2.0.0 + * @access public + * + * @param int $post_id Optional. Post ID. Default is `0`. + * + * @return false|Document The document if it exist, False otherwise. + */ + public function getDocForFrontend($post_id) + { + if (\CreativeElements::getPreviewUId(false)) { + $document = $this->getDocOrAutoSave($post_id, get_current_user_id()); + } else { + $document = $this->get($post_id); + } + + return $document; + } + + /** + * Get document type. + * + * Retrieve the type of any given document. + * + * @since 2.0.0 + * @access public + * + * @param string $type + * + * @param string $fallback + * + * @return Document|bool The type of the document. + */ + public function getDocumentType($type, $fallback = 'post') + { + $types = $this->getDocumentTypes(); + + if (isset($types[$type])) { + return $types[$type]; + } + + if (isset($types[$fallback])) { + return $types[$fallback]; + } + + return false; + } + + /** + * Get document types. + * + * Retrieve the all the registered document types. + * + * @since 2.0.0 + * @access public + * + * @param array $args Optional. An array of key => value arguments to match against + * the properties. Default is empty array. + * @param string $operator Optional. The logical operation to perform. 'or' means only one + * element from the array needs to match; 'and' means all elements + * must match; 'not' means no elements may match. Default 'and'. + * + * @return Document[] All the registered document types. + */ + public function getDocumentTypes($args = [], $operator = 'and') + { + $this->registerTypes(); + + if (!empty($args)) { + // $types_properties = $this->getTypesProperties(); + + // $filtered = wp_filter_object_list($types_properties, $args, $operator); + + // return array_intersect_key($this->types, $filtered); + throw new \RuntimeException('TODO'); + } + + return $this->types; + } + + /** + * Get document types with their properties. + * + * @return array A list of properties arrays indexed by the type. + */ + public function getTypesProperties() + { + $types_properties = []; + + foreach ($this->getDocumentTypes() as $type => $class) { + $types_properties[$type] = $class::getProperties(); + } + return $types_properties; + } + + /** + * Create a document. + * + * Create a new document using any given parameters. + * + * @since 2.0.0 + * @access public + * + * @param string $type Document type. + * @param array $post_data An array containing the post data. + * @param array $meta_data An array containing the post meta data. + * + * @return Document The type of the document. + */ + public function create($type, $post_data = [], $meta_data = []) + { + $class = $this->getDocumentType($type, false); + + if (!$class) { + die(sprintf('Type %s does not exist.', $type)); + } + + // if (empty($post_data['post_title'])) { + // $post_data['post_title'] = __('Elementor'); + // if ('post' !== $type) { + // $post_data['post_title'] = sprintf( + // __('Elementor %s'), + // call_user_func([$class, 'get_title']) + // ); + // } + // $update_title = true; + // } + + $meta_data['_elementor_edit_mode'] = 'builder'; + + // $meta_data[Document::TYPE_META_KEY] = $type; + $post_data['template_type'] = $type; + + $post_data['meta_input'] = $meta_data; + + $post_id = wp_insert_post($post_data); + + // if (!empty($update_title)) { + // $post_data['ID'] = $post_id; + // $post_data['post_title'] .= ' #' . $post_id; + + // // The meta doesn't need update. + // unset($post_data['meta_input']); + + // wp_update_post($post_data); + // } + + /** @var Document $document */ + $document = new $class([ + 'post_id' => $post_id, + ]); + + // Let the $document to re-save the template type by his way + version. + $document->save([]); + + return $document; + } + + // public function removeUserEditCap($allcaps, $caps, $args) + + // public function filterPostRowActions($actions, $post) + + /** + * Save document data using ajax. + * + * Save the document on the builder using ajax, when saving the changes, and refresh the editor. + * + * @since 2.0.0 + * @access public + * + * @param $request Post ID. + * + * @throws \Exception If current user don't have permissions to edit the post or the post is not using Elementor. + * + * @return array The document data after saving. + */ + public function ajaxSave($request) + { + $document = $this->get($request['editor_post_id']); + + // if (!$document->isBuiltWithElementor() || !$document->isEditableByCurrentUser()) { + if (!$document->isEditableByCurrentUser()) { + throw new \Exception('Access denied.'); + } + + $this->switchToDocument($document); + $post = $document->getPost(); + + // Set the post as global post. + Plugin::$instance->db->switchToPost($post->ID); + + $status = DB::STATUS_DRAFT; + + if (isset($request['status']) && in_array($request['status'], [DB::STATUS_PUBLISH, DB::STATUS_PRIVATE, DB::STATUS_AUTOSAVE], true)) { + $status = $request['status']; + } + + if (DB::STATUS_AUTOSAVE === $status) { + // If the post is a draft - save the `autosave` to the original draft. + // Allow a revision only if the original post is already published. + if (in_array($post->post_status, [DB::STATUS_PUBLISH, DB::STATUS_PRIVATE], true)) { + $document = $document->getAutosave(0, true); + } + } + + // Set default page template because the footer-saver doesn't send default values, + // But if the template was changed from canvas to default - it needed to save. + if (Utils::isCptCustomTemplatesSupported($post) && !isset($request['settings']['template'])) { + $request['settings']['template'] = 'default'; + } + + $data = [ + 'elements' => $request['elements'], + 'settings' => $request['settings'], + ]; + + $document->save($data); + + // Refresh after save. + $document = $this->get($post->ID, false); + + $return_data = [ + 'config' => [ + 'document' => [ + 'last_edited' => $document->getLastEdited(), + 'urls' => [ + 'wp_preview' => $document->getWpPreviewUrl(), + ], + ], + ], + ]; + + /** + * Returned documents ajax saved data. + * + * Filters the ajax data returned when saving the post on the builder. + * + * @since 2.0.0 + * + * @param array $return_data The returned data. + * @param Document $document The document instance. + */ + $return_data = apply_filters('elementor/documents/ajax_save/return_data', $return_data, $document); + + return $return_data; + } + + /** + * Ajax discard changes. + * + * Load the document data from an autosave, deleting unsaved changes. + * + * @since 2.0.0 + * @access public + * + * @param $request + * + * @return bool True if changes discarded, False otherwise. + */ + public function ajaxDiscardChanges($request) + { + $document = $this->get($request['editor_post_id']); + + $autosave = $document->getAutosave(); + + if ($autosave) { + $success = $autosave->delete(); + } else { + $success = true; + } + + return $success; + } + + /** + * Switch to document. + * + * Change the document to any new given document type. + * + * @since 2.0.0 + * @access public + * + * @param Document $document The document to switch to. + */ + public function switchToDocument($document) + { + // If is already switched, or is the same post, return. + if ($this->current_doc === $document) { + $this->switched_data[] = false; + return; + } + + $this->switched_data[] = [ + 'switched_doc' => $document, + 'original_doc' => $this->current_doc, // Note, it can be null if the global isn't set + ]; + + $this->current_doc = $document; + } + + /** + * Restore document. + * + * Rollback to the original document. + * + * @since 2.0.0 + * @access public + */ + public function restoreDocument() + { + $data = array_pop($this->switched_data); + + // If not switched, return. + if (!$data) { + return; + } + + $this->current_doc = $data['original_doc']; + } + + /** + * Get current document. + * + * Retrieve the current document. + * + * @since 2.0.0 + * @access public + * + * @return Document The current document. + */ + public function getCurrent() + { + return $this->current_doc; + } + + public function localizeSettings($settings) + { + $translations = []; + + foreach ($this->getDocumentTypes() as $type => $class) { + $translations[$type] = $class::getTitle(); + } + + return array_replace_recursive($settings, [ + 'i18n' => $translations, + ]); + } + + private function registerTypes() + { + if (!did_action('elementor/documents/register')) { + /** + * Register Elementor documents. + * + * @since 2.0.0 + * + * @param DocumentsManager $this The document manager instance. + */ + do_action('elementor/documents/register', $this); + } + } +} diff --git a/modules/creativeelements/core/dynamic-tags/base-tag.php b/modules/creativeelements/core/dynamic-tags/base-tag.php new file mode 100644 index 00000000..cf570932 --- /dev/null +++ b/modules/creativeelements/core/dynamic-tags/base-tag.php @@ -0,0 +1,200 @@ +printPanelTemplate(); + + $panel_template = ob_get_clean(); + + return [ + 'name' => $this->getName(), + 'title' => $this->getTitle(), + 'panel_template' => &$panel_template, + 'categories' => $this->getCategories(), + 'group' => $this->getGroup(), + 'controls' => $this->getControls(), + 'content_type' => $this->getContentType(), + 'settings_required' => $this->isSettingsRequired(), + ]; + } + + /** + * @since 2.0.0 + * @access public + */ + public function printPanelTemplate() + { + $panel_template_setting_key = $this->getPanelTemplateSettingKey(); + + if (!$panel_template_setting_key) { + return; + } + ?> + <# + var key = ; + if (key) { + var settingsKey = ""; + /* + * If the tag has controls, + * and key is an existing control (and not an old one), + * and the control has options (select/select2/choose), + * and the key is an existing option (and not in a group or an old one). + */ + if (controls && controls[settingsKey]) { + var controlSettings = controls[settingsKey]; + if (controlSettings.options && controlSettings.options[key]) { + var label = controlSettings.options[key]; + key = label.title || label; + } else if (controlSettings.groups) { + var label = controlSettings.groups[key]; + if ('string' === typeof label) { + key = label; + } else { + label = _.filter(_.pluck(_.pluck(controlSettings.groups, 'options'), key)); + if (label[0]) { + key = label[0]; + } + } + } + } + print('(' + key + ')'); + } + #> + getName(); + } + + /** + * @since 2.0.0 + * @access protected + */ + protected function registerAdvancedSection() + { + } + + /** + * @since 2.0.0 + * @access protected + */ + final protected function initControls() + { + Plugin::$instance->controls_manager->openStack($this); + + $this->startControlsSection('settings', [ + 'label' => __('Settings'), + ]); + + $this->_registerControls(); + + $this->endControlsSection(); + + // If in fact no controls were registered, empty the stack + if (1 === count(Plugin::$instance->controls_manager->getStacks($this->getUniqueName())['controls'])) { + Plugin::$instance->controls_manager->openStack($this); + } + + $this->registerAdvancedSection(); + } +} diff --git a/modules/creativeelements/core/dynamic-tags/data-tag.php b/modules/creativeelements/core/dynamic-tags/data-tag.php new file mode 100644 index 00000000..a214c5fa --- /dev/null +++ b/modules/creativeelements/core/dynamic-tags/data-tag.php @@ -0,0 +1,69 @@ +getValue($options) . '{/literal}'; + } + + /** + * @since 2.0.0 + * @access public + */ + final public function getContentType() + { + return 'plain'; + } + + /** + * @since 2.0.0 + * @access public + * + * @param array $options + * + * @return mixed + */ + public function getContent(array $options = []) + { + return static::REMOTE_RENDER && is_admin() && 'getValue' === self::$getter_method ? null : $this->{self::$getter_method}($options); + } +} diff --git a/modules/creativeelements/core/dynamic-tags/dynamic-css.php b/modules/creativeelements/core/dynamic-tags/dynamic-css.php new file mode 100644 index 00000000..7b2549ee --- /dev/null +++ b/modules/creativeelements/core/dynamic-tags/dynamic-css.php @@ -0,0 +1,126 @@ +post_id_for_data = $post_id_for_data; + + parent::__construct($post_id); + } + + /** + * @since 2.0.13 + * @access public + */ + public function getName() + { + return 'dynamic'; + } + + /** + * @since 2.0.13 + * @access protected + */ + protected function useExternalFile() + { + return false; + } + + /** + * @since 2.0.13 + * @access protected + */ + protected function getFileHandleId() + { + return 'elementor-post-dynamic-' . $this->post_id_for_data; + } + + /** + * @since 2.0.13 + * @access protected + */ + protected function getData() + { + return Plugin::$instance->db->getPlainEditor($this->post_id_for_data); + } + + /** + * @since 2.0.13 + * @access public + */ + public function getMeta($property = null) + { + // Parse CSS first, to get the fonts list. + $css = $this->getContent(); + + $meta = [ + 'status' => $css ? self::CSS_STATUS_INLINE : self::CSS_STATUS_EMPTY, + 'fonts' => $this->getFonts(), + 'css' => $css, + ]; + + if ($property) { + return isset($meta[$property]) ? $meta[$property] : null; + } + + return $meta; + } + + /** + * @since 2.0.13 + * @access public + */ + public function addControlsStackStyleRules(ControlsStack $controls_stack, array $controls, array $values, array $placeholders, array $replacements, array $all_controls = null) + { + $dynamic_settings = $controls_stack->getSettings('__dynamic__'); + if (!empty($dynamic_settings)) { + $controls = array_intersect_key($controls, $dynamic_settings); + + $all_controls = $controls_stack->getControls(); + + $parsed_dynamic_settings = $controls_stack->parseDynamicSettings($values, $controls); + + foreach ($controls as $control) { + if (!empty($control['style_fields'])) { + $this->addRepeaterControlStyleRules($controls_stack, $control, $values[$control['name']], $placeholders, $replacements); + } + + if (empty($control['selectors'])) { + continue; + } + + $this->addControlStyleRules($control, $parsed_dynamic_settings, $all_controls, $placeholders, $replacements); + } + } + + if ($controls_stack instanceof ElementBase) { + foreach ($controls_stack->getChildren() as $child_element) { + $this->renderStyles($child_element); + } + } + } +} diff --git a/modules/creativeelements/core/dynamic-tags/index.php b/modules/creativeelements/core/dynamic-tags/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/core/dynamic-tags/index.php @@ -0,0 +1,8 @@ +addActions(); + } + + /** + * Parse dynamic tags text. + * + * Receives the dynamic tag text, and returns a single value or multiple values + * from the tag callback function. + * + * @since 2.0.0 + * @access public + * + * @param string $text Dynamic tag text. + * @param array $settings The dynamic tag settings. + * @param callable $parse_callback The functions that renders the dynamic tag. + * + * @return string|string[]|mixed A single string or an array of strings with + * the return values from each tag callback + * function. + */ + public function parseTagsText($text, array $settings, callable $parse_callback) + { + if (!empty($settings['returnType']) && 'object' === $settings['returnType']) { + $value = $this->parseTagText($text, $settings, $parse_callback); + } else { + $value = preg_replace_callback('/\[' . self::TAG_LABEL . '.+?(?=\])\]/', function ($tag_text_match) use ($settings, $parse_callback) { + return $this->parseTagText($tag_text_match[0], $settings, $parse_callback); + }, $text); + } + + return $value; + } + + /** + * Parse dynamic tag text. + * + * Receives the dynamic tag text, and returns the value from the callback + * function. + * + * @since 2.0.0 + * @access public + * + * @param string $tag_text Dynamic tag text. + * @param array $settings The dynamic tag settings. + * @param callable $parse_callback The functions that renders the dynamic tag. + * + * @return string|array|mixed If the tag was not found an empty string or an + * empty array will be returned, otherwise the + * return value from the tag callback function. + */ + public function parseTagText($tag_text, array $settings, callable $parse_callback) + { + $tag_data = $this->tagTextToTagData($tag_text); + + if (!$tag_data) { + if (!empty($settings['returnType']) && 'object' === $settings['returnType']) { + return []; + } + + return ''; + } + + return call_user_func_array($parse_callback, $tag_data); + } + + /** + * @since 2.0.0 + * @access public + * + * @param string $tag_text + * + * @return array|null + */ + public function tagTextToTagData($tag_text) + { + preg_match('/id="(.*?(?="))"/', $tag_text, $tag_id_match); + preg_match('/name="(.*?(?="))"/', $tag_text, $tag_name_match); + preg_match('/settings="(.*?(?="]))/', $tag_text, $tag_settings_match); + + if (!$tag_id_match || !$tag_name_match || !$tag_settings_match) { + return null; + } + + return [ + 'id' => $tag_id_match[1], + 'name' => $tag_name_match[1], + 'settings' => json_decode(urldecode($tag_settings_match[1]), true), + ]; + } + + /** + * Dynamic tag to text. + * + * Retrieve the shortcode that represents the dynamic tag. + * + * @since 2.0.0 + * @access public + * + * @param BaseTag $tag An instance of the dynamic tag. + * + * @return string The shortcode that represents the dynamic tag. + */ + public function tagToText(BaseTag $tag) + { + return sprintf('[%1$s id="%2$s" name="%3$s" settings="%4$s"]', self::TAG_LABEL, $tag->getId(), $tag->getName(), urlencode(json_encode($tag->getSettings(), JSON_FORCE_OBJECT))); + } + + /** + * @since 2.0.0 + * @access public + * @param string $tag_id + * @param string $tag_name + * @param array $settings + * + * @return string + */ + public function tagDataToTagText($tag_id, $tag_name, array $settings = []) + { + $tag = $this->createTag($tag_id, $tag_name, $settings); + + if (!$tag) { + return ''; + } + + return $this->tagToText($tag); + } + + /** + * @since 2.0.0 + * @access public + * @param string $tag_id + * @param string $tag_name + * @param array $settings + * + * @return Tag|null + */ + public function createTag($tag_id, $tag_name, array $settings = []) + { + $tag_info = $this->getTagInfo($tag_name); + + if (!$tag_info) { + return null; + } + + $tag_class = $tag_info['class']; + + return new $tag_class([ + 'settings' => $settings, + 'id' => $tag_id, + ]); + } + + /** + * @since 2.0.0 + * @access public + * + * @param $tag_id + * @param $tag_name + * @param array $settings + * + * @return null|string + */ + public function getTagDataContent($tag_id, $tag_name, array $settings = []) + { + if (self::MODE_REMOVE === $this->parsing_mode) { + return null; + } + + $tag = $this->createTag($tag_id, $tag_name, $settings); + + if (!$tag) { + return null; + } + + return $tag->getContent(); + } + + /** + * @since 2.0.0 + * @access public + * + * @param $tag_name + * + * @return mixed|null + */ + public function getTagInfo($tag_name) + { + $tags = $this->getTags(); + + if (empty($tags[$tag_name])) { + return null; + } + + return $tags[$tag_name]; + } + + /** + * @since 2.0.9 + * @access public + */ + public function getTags() + { + if (!did_action('elementor/dynamic_tags/register_tags')) { + /** + * Register dynamic tags. + * + * Fires when Elementor registers dynamic tags. + * + * @since 2.0.9 + * + * @param Manager $this Dynamic tags manager. + */ + do_action('elementor/dynamic_tags/register_tags', $this); + } + + return $this->tags_info; + } + + /** + * @since 2.0.0 + * @access public + * + * @param string $class + */ + public function registerTag($class) + { + /** @var Tag $tag */ + $tag = new $class(); + + $this->tags_info[$tag->getName()] = [ + 'class' => $class, + 'instance' => $tag, + ]; + } + + /** + * @since 2.0.9 + * @access public + * + * @param string $tag_name + */ + public function unregisterTag($tag_name) + { + unset($this->tags_info[$tag_name]); + } + + /** + * @since 2.0.0 + * @access public + * + * @param $group_name + * @param array $group_settings + */ + public function registerGroup($group_name, array $group_settings) + { + $default_group_settings = [ + 'title' => '', + ]; + + $group_settings = array_merge($default_group_settings, $group_settings); + + $this->tags_groups[$group_name] = $group_settings; + } + + /** + * @since 2.0.0 + * @access public + */ + public function printTemplates() + { + foreach ($this->getTags() as $tag_name => $tag_info) { + $tag = $tag_info['instance']; + + if (!$tag instanceof Tag) { + continue; + } + + $tag->printTemplate(); + } + } + + /** + * @since 2.0.0 + * @access public + */ + public function getTagsConfig() + { + $config = []; + + foreach ($this->getTags() as $tag_name => $tag_info) { + /** @var Tag $tag */ + $tag = $tag_info['instance']; + + $config[$tag_name] = $tag->getEditorConfig(); + } + + return $config; + } + + /** + * @since 2.0.0 + * @access public + */ + public function getConfig() + { + return [ + 'tags' => $this->getTagsConfig(), + 'groups' => $this->tags_groups, + ]; + } + + /** + * @since 2.0.0 + * @access public + * + * @throws \Exception If post ID is missing. + * @throws \Exception If current user don't have permissions to edit the post. + */ + public function ajaxRenderTags() + { + $data = json_decode(${'_POST'}['data'], true); + + if (empty($data['post_id'])) { + throw new \Exception('Missing post id.'); + } + + if (!User::isCurrentUserCanEdit($data['post_id'])) { + throw new \Exception('Access denied.'); + } + + Plugin::$instance->db->switchToPost($data['post_id']); + + /** + * Before dynamic tags rendered. + * + * Fires before Elementor renders the dynamic tags. + * + * @since 2.0.0 + */ + do_action('elementor/dynamic_tags/before_render'); + + $tags_data = []; + + foreach ($data['tags'] as $tag_key) { + $tag_key_parts = explode('-', $tag_key); + + $tag_name = base64_decode($tag_key_parts[0]); + + $tag_settings = json_decode(urldecode(base64_decode($tag_key_parts[1])), true); + + $tag = $this->createTag(null, $tag_name, $tag_settings); + + $tags_data[$tag_key] = $tag->getContent(); + } + + /** + * After dynamic tags rendered. + * + * Fires after Elementor renders the dynamic tags. + * + * @since 2.0.0 + */ + do_action('elementor/dynamic_tags/after_render'); + + return $tags_data; + } + + /** + * @since 2.0.0 + * @access public + * + * @param $mode + */ + public function setParsingMode($mode) + { + $this->parsing_mode = $mode; + } + + /** + * @since 2.0.0 + * @access public + */ + public function getParsingMode() + { + return $this->parsing_mode; + } + + /** + * @since 2.1.0 + * @access public + * @param Post $css_file + */ + public function afterEnqueuePostCss($css_file) + { + $post_id = $css_file->getPostId(); + + if ($css_file instanceof PostPreview) { + $post_id_for_data = $css_file->getPreviewId(); + } else { + $post_id_for_data = $post_id; + } + + $css_file = new DynamicCSS($post_id, $post_id_for_data); + + $css_file->enqueue(); + } + + // public function registerAjaxActions(Ajax $ajax) + + /** + * @since 2.0.0 + * @access private + */ + private function addActions() + { + // add_action('elementor/ajax/register_actions', [$this, 'register_ajax_actions']); + add_action('elementor/css-file/post/enqueue', [$this, 'after_enqueue_post_css']); + } +} diff --git a/modules/creativeelements/core/dynamic-tags/tag.php b/modules/creativeelements/core/dynamic-tags/tag.php new file mode 100644 index 00000000..1903f841 --- /dev/null +++ b/modules/creativeelements/core/dynamic-tags/tag.php @@ -0,0 +1,149 @@ +getSettings(); + + ob_start(); + + $this->{self::$render_method}(); + + $value = ob_get_clean(); + + if ('renderSmarty' === self::$render_method) { + if ($settings['before'] || $settings['after'] || $settings['fallback']) { + $value = "{capture assign='ce_tag'}$value{/capture}" . + '{if strlen($ce_tag)}' . + wp_kses_post($settings['before'] . '{$ce_tag nofilter}' . $settings['after']) . + '{else}' . + $settings['fallback'] . + '{/if}'; + } + } elseif ($value) { + if (!empty($settings['before'])) { + $value = wp_kses_post($settings['before']) . $value; + } + + if (!empty($settings['after'])) { + $value .= wp_kses_post($settings['after']); + } + + if (static::WRAPPED_TAG) { + $id = $this->getId(); + $value = '' . $value . ''; + } + } elseif (!empty($settings['fallback'])) { + $value = $settings['fallback']; + } + + return $value; + } + + /** + * @since 2.5.10 + * @access protected + */ + protected function renderSmarty() + { + $this->render(); + } + + /** + * @since 2.0.0 + * @access public + */ + final public function getContentType() + { + return 'ui'; + } + + /** + * @since 2.0.9 + * @access public + */ + public function getEditorConfig() + { + $config = parent::getEditorConfig(); + + $config['wrapped_tag'] = $this::WRAPPED_TAG; + + return $config; + } + + /** + * @since 2.0.0 + * @access protected + */ + protected function registerAdvancedSection() + { + $this->startControlsSection( + 'advanced', + [ + 'label' => __('Advanced'), + ] + ); + + $this->addControl( + 'before', + [ + 'label' => __('Before'), + ] + ); + + $this->addControl( + 'after', + [ + 'label' => __('After'), + ] + ); + + $this->addControl( + 'fallback', + [ + 'label' => __('Fallback'), + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + } +} diff --git a/modules/creativeelements/core/files/base.php b/modules/creativeelements/core/files/base.php new file mode 100644 index 00000000..46ce149c --- /dev/null +++ b/modules/creativeelements/core/files/base.php @@ -0,0 +1,314 @@ +setFileName($file_name); + + $this->setFilesDir(static::DEFAULT_FILES_DIR); + + $this->setPath(); + } + + /** + * @since 2.1.0 + * @access public + */ + public function setFilesDir($files_dir) + { + $this->files_dir = $files_dir; + } + + /** + * @since 2.1.0 + * @access public + */ + public function setFileName($file_name) + { + $this->file_name = $file_name; + } + + /** + * @since 2.1.0 + * @access public + */ + public function getFileName() + { + return $this->file_name; + } + + /** + * @since 2.1.0 + * @access public + */ + public function getUrl() + { + $url = self::getBaseUploadsUrl() . $this->files_dir . $this->file_name; + + return add_query_arg(['v' => $this->getMeta('time')], $url); + } + + /** + * @since 2.1.0 + * @access public + */ + public function getContent() + { + if (!$this->content) { + $this->content = $this->parseContent(); + } + + return $this->content; + } + + /** + * @since 2.1.0 + * @access public + */ + public function update() + { + $this->updateFile(); + + $meta = $this->getMeta(); + + $meta['time'] = time(); + + $this->updateMeta($meta); + } + + /** + * @since 2.1.0 + * @access public + */ + public function updateFile() + { + $this->content = $this->parseContent(); + // CE Fix: global fonts aren't updated + $this->delete(); + + if ($this->content) { + $this->write(); + } else { + // $this->delete(); + } + } + + /** + * @since 2.1.0 + * @access public + */ + public function write() + { + return file_put_contents($this->path, $this->content); + } + + /** + * @since 2.1.0 + * @access public + */ + public function delete() + { + if (file_exists($this->path)) { + unlink($this->path); + } + + $this->deleteMeta(); + } + + /** + * Get meta data. + * + * Retrieve the CSS file meta data. Returns an array of all the data, or if + * custom property is given it will return the property value, or `null` if + * the property does not exist. + * + * @since 2.1.0 + * @access public + * + * @param string $property Optional. Custom meta data property. Default is + * null. + * + * @return array|null An array of all the data, or if custom property is + * given it will return the property value, or `null` if + * the property does not exist. + */ + public function getMeta($property = null) + { + $default_meta = $this->getDefaultMeta(); + + $meta = array_merge($default_meta, (array) $this->loadMeta()); + + if ($property) { + return isset($meta[$property]) ? $meta[$property] : null; + } + + return $meta; + } + + /** + * @since 2.1.0 + * @access protected + * @abstract + */ + abstract protected function parseContent(); + + /** + * Load meta. + * + * Retrieve the file meta data. + * + * @since 2.1.0 + * @access protected + */ + protected function loadMeta() + { + return get_option(static::META_KEY); + } + + /** + * Update meta. + * + * Update the file meta data. + * + * @since 2.1.0 + * @access protected + * + * @param array $meta New meta data. + */ + protected function updateMeta($meta) + { + update_option(static::META_KEY, $meta); + } + + /** + * Delete meta. + * + * Delete the file meta data. + * + * @since 2.1.0 + * @access protected + */ + protected function deleteMeta() + { + delete_option(static::META_KEY); + } + + /** + * @since 2.1.0 + * @access protected + */ + protected function getDefaultMeta() + { + return [ + 'time' => 0, + ]; + } + + // private static function getWpUploadsDir() + + /** + * @since 2.1.0 + * @access private + */ + private function setPath() + { + $dir_path = self::getBaseUploadsDir() . $this->files_dir; + + if (!is_dir($dir_path)) { + @mkdir($dir_path, 0775, true); + } + + $this->path = $dir_path . $this->file_name; + } + + public function getPath() + { + return $this->path; + } +} diff --git a/modules/creativeelements/core/files/css/base.php b/modules/creativeelements/core/files/css/base.php new file mode 100644 index 00000000..67e015ec --- /dev/null +++ b/modules/creativeelements/core/files/css/base.php @@ -0,0 +1,718 @@ +initStylesheet(); + } + + /** + * Use external file. + * + * Whether to use external CSS file of not. When there are new schemes or settings + * updates. + * + * @since 1.9.0 + * @access protected + * + * @return bool True if the CSS requires an update, False otherwise. + */ + protected function useExternalFile() + { + return 'internal' !== get_option('elementor_css_print_method'); + } + + /** + * Update the CSS file. + * + * Delete old CSS, parse the CSS, save the new file and update the database. + * + * This method also sets the CSS status to be used later on in the render posses. + * + * @since 1.2.0 + * @access public + */ + public function update() + { + $this->updateFile(); + + $meta = $this->getMeta(); + + $meta['time'] = time(); + + $content = $this->getContent(); + + if (empty($content)) { + $meta['status'] = self::CSS_STATUS_EMPTY; + $meta['css'] = ''; + } else { + $use_external_file = $this->useExternalFile(); + + if ($use_external_file) { + $meta['status'] = self::CSS_STATUS_FILE; + $meta['css'] = ''; + } else { + $meta['status'] = self::CSS_STATUS_INLINE; + $meta['css'] = $content; + } + } + + $this->updateMeta($meta); + } + + /** + * @since 2.1.0 + * @access public + */ + public function write() + { + if ($this->useExternalFile()) { + parent::write(); + } + } + + /** + * Enqueue CSS. + * + * Either enqueue the CSS file in Elementor or add inline style. + * + * This method is also responsible for loading the fonts. + * + * @since 1.2.0 + * @access public + */ + public function enqueue() + { + $handle_id = $this->getFileHandleId(); + + if (isset(self::$printed[$handle_id])) { + return; + } + + self::$printed[$handle_id] = true; + + $meta = $this->getMeta(); + + if (self::CSS_STATUS_EMPTY === $meta['status']) { + return; + } + + // First time after clear cache and etc. + if ('' === $meta['status'] || $this->isUpdateRequired()) { + $this->update(); + + $meta = $this->getMeta(); + } + + if (self::CSS_STATUS_INLINE === $meta['status']) { + $dep = $this->getInlineDependency(); + + wp_add_inline_style($dep, $meta['css']); + } elseif (self::CSS_STATUS_FILE === $meta['status']) { + // Re-check if it's not empty after CSS update. + wp_enqueue_style($this->getFileHandleId(), $this->getUrl(), $this->getEnqueueDependencies(), null); + } + + // Handle fonts. + if (!empty($meta['fonts'])) { + foreach ($meta['fonts'] as $font) { + Plugin::$instance->frontend->enqueueFont($font); + } + } + + $name = $this->getName(); + + /** + * Enqueue CSS file. + * + * Fires when CSS file is enqueued on Elementor. + * + * The dynamic portion of the hook name, `$name`, refers to the CSS file name. + * + * @since 2.0.0 + * + * @param Base $this The current CSS file. + */ + do_action("elementor/css-file/{$name}/enqueue", $this); + } + + /** + * Print CSS. + * + * Output the final CSS inside the `'; // XSS ok. + Plugin::$instance->frontend->printFontsLinks(); + } + + /** + * Add control rules. + * + * Parse the CSS for all the elements inside any given control. + * + * This method recursively renders the CSS for all the selectors in the control. + * + * @since 1.2.0 + * @access public + * + * @param array $control The controls. + * @param array $controls_stack The controls stack. + * @param callable $value_callback Callback function for the value. + * @param array $placeholders Placeholders. + * @param array $replacements Replacements. + */ + public function addControlRules(array $control, array $controls_stack, callable $value_callback, array $placeholders, array $replacements) + { + $value = call_user_func($value_callback, $control); + + if (null === $value || empty($control['selectors'])) { + return; + } + + foreach ($control['selectors'] as $selector => $css_property) { + try { + $output_css_property = preg_replace_callback( + '/\{\{(?:([^.}]+)\.)?([^}| ]*)(?: *\|\| *(?:([^.}]+)\.)?([^}| ]*) *)*}}/', + function ($matches) use ($control, $value_callback, $controls_stack, $value, $css_property) { + $external_control_missing = $matches[1] && !isset($controls_stack[$matches[1]]); + + $parsed_value = ''; + + if (!$external_control_missing) { + $parsed_value = $this->parsePropertyPlaceholder($control, $value, $controls_stack, $value_callback, $matches[2], $matches[1]); + } + + if ('' === $parsed_value) { + if (isset($matches[4])) { + $parsed_value = $matches[4]; + + $is_string_value = preg_match('/^([\'"])(.*)\1$/', $parsed_value, $string_matches); + + if ($is_string_value) { + $parsed_value = $string_matches[2]; + } elseif (!is_numeric($parsed_value)) { + if ($matches[3] && !isset($controls_stack[$matches[3]])) { + return ''; + } + + $parsed_value = $this->parsePropertyPlaceholder($control, $value, $controls_stack, $value_callback, $matches[4], $matches[3]); + } + } + + if ('' === $parsed_value) { + if ($external_control_missing) { + return ''; + } + + throw new \Exception(); + } + } + + return $parsed_value; + }, + $css_property + ); + } catch (\Exception $e) { + return; + } + + if (!$output_css_property) { + continue; + } + + $device_pattern = '/^(?:\([^\)]+\)){1,2}/'; + + preg_match($device_pattern, $selector, $device_rules); + + $query = []; + + if ($device_rules) { + $selector = preg_replace($device_pattern, '', $selector); + + preg_match_all('/\(([^\)]+)\)/', $device_rules[0], $pure_device_rules); + + $pure_device_rules = $pure_device_rules[1]; + + foreach ($pure_device_rules as $device_rule) { + if (ElementBase::RESPONSIVE_DESKTOP === $device_rule) { + continue; + } + + $device = preg_replace('/\+$/', '', $device_rule); + + $endpoint = $device === $device_rule ? 'max' : 'min'; + + $query[$endpoint] = $device; + } + } + + $parsed_selector = str_replace($placeholders, $replacements, $selector); + + if (!$query && !empty($control['responsive'])) { + $query = array_intersect_key($control['responsive'], array_flip(['min', 'max'])); + + if (!empty($query['max']) && ElementBase::RESPONSIVE_DESKTOP === $query['max']) { + unset($query['max']); + } + } + + $this->stylesheet_obj->addRules($parsed_selector, $output_css_property, $query); + } + } + + /** + * @param array $control + * @param mixed $value + * @param array $controls_stack + * @param callable $value_callback + * @param string $placeholder + * @param string $parser_control_name + * + * @return string + */ + public function parsePropertyPlaceholder(array $control, $value, array $controls_stack, $value_callback, $placeholder, $parser_control_name = null) + { + if ($parser_control_name) { + $control = $controls_stack[$parser_control_name]; + + $value = call_user_func($value_callback, $control); + } + + if (ControlsManager::FONT === $control['type']) { + $this->fonts[] = $value; + } + + /** @var BaseDataControl $control_obj */ + $control_obj = Plugin::$instance->controls_manager->getControl($control['type']); + + return (string) $control_obj->getStyleValue($placeholder, $value, $control); + } + + /** + * Get the fonts. + * + * Retrieve the list of fonts. + * + * @since 1.9.0 + * @access public + * + * @return array Fonts. + */ + public function getFonts() + { + return $this->fonts; + } + + /** + * Get stylesheet. + * + * Retrieve the CSS file stylesheet instance. + * + * @since 1.2.0 + * @access public + * + * @return Stylesheet The stylesheet object. + */ + public function getStylesheet() + { + return $this->stylesheet_obj; + } + + /** + * Add controls stack style rules. + * + * Parse the CSS for all the elements inside any given controls stack. + * + * This method recursively renders the CSS for all the child elements in the stack. + * + * @since 1.6.0 + * @access public + * + * @param ControlsStack $controls_stack The controls stack. + * @param array $controls Controls array. + * @param array $values Values array. + * @param array $placeholders Placeholders. + * @param array $replacements Replacements. + * @param array $all_controls All controls. + */ + public function addControlsStackStyleRules(ControlsStack $controls_stack, array $controls, array $values, array $placeholders, array $replacements, array $all_controls = null) + { + if (!$all_controls) { + $all_controls = $controls_stack->getControls(); + } + + $parsed_dynamic_settings = $controls_stack->parseDynamicSettings($values, $controls); + + foreach ($controls as $control) { + if (!empty($control['style_fields'])) { + $this->addRepeaterControlStyleRules($controls_stack, $control, $values[$control['name']], $placeholders, $replacements); + } + + if (!empty($control['__dynamic__'][$control['name']])) { + $this->addDynamicControlStyleRules($control, $control['__dynamic__'][$control['name']]); + } + + if (!empty($parsed_dynamic_settings['__dynamic__'][$control['name']])) { + unset($parsed_dynamic_settings[$control['name']]); + continue; + } + + if (empty($control['selectors'])) { + continue; + } + + $this->addControlStyleRules($control, $parsed_dynamic_settings, $all_controls, $placeholders, $replacements); + } + } + + /** + * Get file handle ID. + * + * Retrieve the file handle ID. + * + * @since 1.2.0 + * @access protected + * @abstract + * + * @return string CSS file handle ID. + */ + abstract protected function getFileHandleId(); + + /** + * Render CSS. + * + * Parse the CSS. + * + * @since 1.2.0 + * @access protected + * @abstract + */ + abstract protected function renderCss(); + + protected function getDefaultMeta() + { + return array_merge(parent::getDefaultMeta(), [ + 'fonts' => array_unique($this->fonts), + 'status' => '', + ]); + } + + /** + * Get enqueue dependencies. + * + * Retrieve the name of the stylesheet used by `wp_enqueue_style()`. + * + * @since 1.2.0 + * @access protected + * + * @return array Name of the stylesheet. + */ + protected function getEnqueueDependencies() + { + return []; + } + + /** + * Get inline dependency. + * + * Retrieve the name of the stylesheet used by `wp_add_inline_style()`. + * + * @since 1.2.0 + * @access protected + * + * @return string Name of the stylesheet. + */ + protected function getInlineDependency() + { + return ''; + } + + /** + * Is update required. + * + * Whether the CSS requires an update. When there are new schemes or settings + * updates. + * + * @since 1.2.0 + * @access protected + * + * @return bool True if the CSS requires an update, False otherwise. + */ + protected function isUpdateRequired() + { + return false; + } + + /** + * Parse CSS. + * + * Parsing the CSS file. + * + * @since 1.2.0 + * @access protected + */ + protected function parseContent() + { + $this->renderCss(); + + $name = $this->getName(); + + /** + * Parse CSS file. + * + * Fires when CSS file is parsed on Elementor. + * + * The dynamic portion of the hook name, `$name`, refers to the CSS file name. + * + * @since 2.0.0 + * + * @param Base $this The current CSS file. + */ + do_action("elementor/css-file/{$name}/parse", $this); + + return $this->stylesheet_obj->__toString(); + } + + /** + * Add control style rules. + * + * Register new style rules for the control. + * + * @since 1.6.0 + * @access private + * + * @param array $control The control. + * @param array $values Values array. + * @param array $controls The controls stack. + * @param array $placeholders Placeholders. + * @param array $replacements Replacements. + */ + protected function addControlStyleRules(array $control, array $values, array $controls, array $placeholders, array $replacements) + { + $this->addControlRules( + $control, + $controls, + function ($control) use ($values) { + return $this->getStyleControlValue($control, $values); + }, + $placeholders, + $replacements + ); + } + + /** + * Get style control value. + * + * Retrieve the value of the style control for any give control and values. + * + * It will retrieve the control name and return the style value. + * + * @since 1.6.0 + * @access private + * + * @param array $control The control. + * @param array $values Values array. + * + * @return mixed Style control value. + */ + private function getStyleControlValue(array $control, array $values) + { + $value = $values[$control['name']]; + + // fix for background image + if (!empty($value['url']) && (strrpos($control['name'], '_image') !== false || 'background_video_fallback' === $control['name'])) { + $value['url'] = Helper::getMediaLink($value['url']); + } + + if (isset($control['selectors_dictionary'][$value])) { + $value = $control['selectors_dictionary'][$value]; + } + + if (!is_numeric($value) && !is_float($value) && empty($value)) { + return null; + } + + return $value; + } + + /** + * Init stylesheet. + * + * Initialize CSS file stylesheet by creating a new `Stylesheet` object and register new + * breakpoints for the stylesheet. + * + * @since 1.2.0 + * @access private + */ + private function initStylesheet() + { + $this->stylesheet_obj = new Stylesheet(); + + $breakpoints = Responsive::getBreakpoints(); + + $this->stylesheet_obj + ->addDevice('mobile', 0) + ->addDevice('tablet', $breakpoints['md']) + ->addDevice('desktop', $breakpoints['lg']); + } + + /** + * Add repeater control style rules. + * + * Register new style rules for the repeater control. + * + * @since 2.0.0 + * @access private + * + * @param ControlsStack $controls_stack The control stack. + * @param array $repeater_control The repeater control. + * @param array $repeater_values Repeater values array. + * @param array $placeholders Placeholders. + * @param array $replacements Replacements. + */ + protected function addRepeaterControlStyleRules(ControlsStack $controls_stack, array $repeater_control, array $repeater_values, array $placeholders, array $replacements) + { + $placeholders = array_merge($placeholders, ['{{CURRENT_ITEM}}']); + + foreach ($repeater_control['style_fields'] as $index => $item) { + $this->addControlsStackStyleRules( + $controls_stack, + $item, + $repeater_values[$index], + $placeholders, + array_merge($replacements, ['.elementor-repeater-item-' . $repeater_values[$index]['_id']]), + $repeater_control['fields'] + ); + } + } + + /** + * Add dynamic control style rules. + * + * Register new style rules for the dynamic control. + * + * @since 2.0.0 + * @access private + * + * @param array $control The control. + * @param string $value The value. + */ + protected function addDynamicControlStyleRules(array $control, $value) + { + Plugin::$instance->dynamic_tags->parseTagsText($value, $control, function ($id, $name, $settings) { + $tag = Plugin::$instance->dynamic_tags->createTag($id, $name, $settings); + + if (!$tag instanceof Tag) { + return; + } + + $this->addControlsStackStyleRules($tag, $tag->getStyleControls(), $tag->getActiveSettings(), ['{{WRAPPER}}'], ['#elementor-tag-' . $id]); + }); + } +} diff --git a/modules/creativeelements/core/files/css/global-css.php b/modules/creativeelements/core/files/css/global-css.php new file mode 100644 index 00000000..42f25671 --- /dev/null +++ b/modules/creativeelements/core/files/css/global-css.php @@ -0,0 +1,165 @@ +getName()}/before_render", $this); + + $this->renderSchemesCss(); + } + + /** + * Get inline dependency. + * + * Retrieve the name of the stylesheet used by `wp_add_inline_style()`. + * + * @since 1.2.0 + * @access protected + * + * @return string Name of the stylesheet. + */ + protected function getInlineDependency() + { + return 'elementor-frontend'; + } + + /** + * Is update required. + * + * Whether the CSS requires an update. When there are new schemes or settings + * updates. + * + * @since 1.2.0 + * @access protected + * + * @return bool True if the CSS requires an update, False otherwise. + */ + protected function isUpdateRequired() + { + $file_last_updated = $this->getMeta('time'); + + $schemes_last_update = get_option(SchemeBase::LAST_UPDATED_META); + + if ($file_last_updated < $schemes_last_update) { + return true; + } + + // $elementor_settings_last_updated = get_option(Settings::UPDATE_TIME_FIELD); + + // if ($file_last_updated < $elementor_settings_last_updated) { + // return true; + // } + + return false; + } + + /** + * Render schemes CSS. + * + * Parse the CSS for all the widgets and all the scheme controls. + * + * @since 1.2.0 + * @access private + */ + private function renderSchemesCss() + { + $elementor = Plugin::$instance; + + foreach ($elementor->widgets_manager->getWidgetTypes() as $widget) { + $scheme_controls = $widget->getSchemeControls(); + + foreach ($scheme_controls as $control) { + $this->addControlRules( + $control, + $widget->getControls(), + function ($control) use ($elementor) { + $scheme_value = $elementor->schemes_manager->getSchemeValue($control['scheme']['type'], $control['scheme']['value']); + + if (empty($scheme_value)) { + return null; + } + + if (!empty($control['scheme']['key'])) { + $scheme_value = $scheme_value[$control['scheme']['key']]; + } + + if (empty($scheme_value)) { + return null; + } + + return $scheme_value; + }, + ['{{WRAPPER}}'], + ['.elementor-widget-' . $widget->getName()] + ); + } + } + } +} diff --git a/modules/creativeelements/core/files/css/index.php b/modules/creativeelements/core/files/css/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/core/files/css/index.php @@ -0,0 +1,8 @@ +preview_id = $post_id; + + $parent_id = wp_get_post_parent_id($post_id); + + parent::__construct($parent_id); + } + + /** + * @since 2.1.0 + * @access public + */ + public function getPreviewId() + { + return $this->preview_id; + } + + /** + * Get data. + * + * Retrieve raw post data from the database. + * + * @since 1.9.0 + * @access protected + * + * @return array Post data. + */ + protected function getData() + { + return Plugin::$instance->db->getPlainEditor($this->preview_id); + } + + /** + * Get file handle ID. + * + * Retrieve the handle ID for the previewed post CSS file. + * + * @since 1.9.0 + * @access protected + * + * @return string CSS file handle ID. + */ + protected function getFileHandleId() + { + return 'elementor-preview-' . $this->preview_id; + } + + /** + * Get meta data. + * + * Retrieve the previewed post CSS file meta data. + * + * @since 1.9.0 + * @access public + * + * @param string $property Optional. Custom meta data property. Default is + * null. + * + * @return array Previewed post CSS file meta data. + */ + public function getMeta($property = null) + { + // Parse CSS first, to get the fonts list. + $css = $this->getContent(); + + $meta = [ + 'status' => self::CSS_STATUS_INLINE, + 'fonts' => $this->getFonts(), + 'css' => $css, + ]; + + if ($property) { + return isset($meta[$property]) ? $meta[$property] : null; + } + + return $meta; + } +} diff --git a/modules/creativeelements/core/files/css/post.php b/modules/creativeelements/core/files/css/post.php new file mode 100644 index 00000000..594ad4b7 --- /dev/null +++ b/modules/creativeelements/core/files/css/post.php @@ -0,0 +1,347 @@ +post_id = $post_id; + + parent::__construct(self::FILE_PREFIX . $post_id . '.css'); + } + + /** + * Get CSS file name. + * + * Retrieve the CSS file name. + * + * @since 1.6.0 + * @access public + * + * @return string CSS file name. + */ + public function getName() + { + return 'post'; + } + + /** + * Get post ID. + * + * Retrieve the ID of current post. + * + * @since 1.2.0 + * @access public + * + * @return int Post ID. + */ + public function getPostId() + { + return $this->post_id; + } + + /** + * Get unique element selector. + * + * Retrieve the unique selector for any given element. + * + * @since 1.2.0 + * @access public + * + * @param ElementBase $element The element. + * + * @return string Unique element selector. + */ + public function getElementUniqueSelector(ElementBase $element) + { + return '.elementor-' . $this->post_id . ' .elementor-element' . $element->getUniqueSelector(); + } + + public function getTransformHoverSelector(ElementBase $element) + { + switch ($element->getSettings('_transform_trigger_hover')) { + case 'miniature': + $selector = "[data-elementor-type$=miniature] > :hover {$element->getUniqueSelector()} > .elementor-widget-container"; + break; + case 'section': + $selector = ".elementor-section:hover > .elementor-container > * > * > .elementor-column-wrap > * > {$element->getUniqueSelector()} > .elementor-widget-container"; + break; + case 'column': + $selector = ".elementor-column-wrap:hover > * > {$element->getUniqueSelector()} > .elementor-widget-container"; + break; + default: + $selector = "{$element->getUniqueSelector()} > .elementor-widget-container:hover"; + break; + } + return $selector; + } + + /** + * Load meta data. + * + * Retrieve the post CSS file meta data. + * + * @since 1.2.0 + * @access protected + * + * @return array Post CSS file meta data. + */ + protected function loadMeta() + { + return get_post_meta($this->post_id, static::META_KEY, true); + } + + /** + * Update meta data. + * + * Update the global CSS file meta data. + * + * @since 1.2.0 + * @access protected + * + * @param array $meta New meta data. + */ + protected function updateMeta($meta) + { + update_post_meta($this->post_id, static::META_KEY, $meta); + } + + /** + * Delete meta. + * + * Delete the file meta data. + * + * @since 2.1.0 + * @access protected + */ + protected function deleteMeta() + { + delete_post_meta($this->post_id, static::META_KEY); + } + + /** + * Get post data. + * + * Retrieve raw post data from the database. + * + * @since 1.9.0 + * @access protected + * + * @return array Post data. + */ + protected function getData() + { + return Plugin::$instance->db->getPlainEditor($this->post_id); + } + + /** + * Render CSS. + * + * Parse the CSS for all the elements. + * + * @since 1.2.0 + * @access protected + */ + protected function renderCss() + { + $data = $this->getData(); + + if (!empty($data)) { + foreach ($data as $element_data) { + $element = Plugin::$instance->elements_manager->createElementInstance($element_data); + + if (!$element) { + continue; + } + + $this->renderStyles($element); + } + } + } + + /** + * Enqueue CSS. + * + * Enqueue the post CSS file in Elementor. + * + * This method ensures that the post was actually built with elementor before + * enqueueing the post CSS file. + * + * @since 1.2.2 + * @access public + */ + public function enqueue() + { + if (!Plugin::$instance->db->isBuiltWithElementor($this->post_id)) { + return; + } + + parent::enqueue(); + } + + /** + * Add controls-stack style rules. + * + * Parse the CSS for all the elements inside any given controls stack. + * + * This method recursively renders the CSS for all the child elements in the stack. + * + * @since 1.6.0 + * @access public + * + * @param ControlsStack $controls_stack The controls stack. + * @param array $controls Controls array. + * @param array $values Values array. + * @param array $placeholders Placeholders. + * @param array $replacements Replacements. + * @param array $all_controls All controls. + */ + public function addControlsStackStyleRules(ControlsStack $controls_stack, array $controls, array $values, array $placeholders, array $replacements, array $all_controls = null) + { + parent::addControlsStackStyleRules($controls_stack, $controls, $values, $placeholders, $replacements, $all_controls); + + if ($controls_stack instanceof ElementBase) { + foreach ($controls_stack->getChildren() as $child_element) { + $this->renderStyles($child_element); + } + } + } + + /** + * Get enqueue dependencies. + * + * Retrieve the name of the stylesheet used by `wp_enqueue_style()`. + * + * @since 1.2.0 + * @access protected + * + * @return array Name of the stylesheet. + */ + protected function getEnqueueDependencies() + { + return ['elementor-frontend']; + } + + /** + * Get inline dependency. + * + * Retrieve the name of the stylesheet used by `wp_add_inline_style()`. + * + * @since 1.2.0 + * @access protected + * + * @return string Name of the stylesheet. + */ + protected function getInlineDependency() + { + return 'elementor-frontend'; + } + + /** + * Get file handle ID. + * + * Retrieve the handle ID for the post CSS file. + * + * @since 1.2.0 + * @access protected + * + * @return string CSS file handle ID. + */ + protected function getFileHandleId() + { + return 'elementor-post-' . $this->post_id; + } + + /** + * Render styles. + * + * Parse the CSS for any given element. + * + * @since 1.2.0 + * @access protected + * + * @param ElementBase $element The element. + */ + protected function renderStyles(ElementBase $element) + { + /** + * Before element parse CSS. + * + * Fires before the CSS of the element is parsed. + * + * @since 1.2.0 + * + * @param Post $this The post CSS file. + * @param ElementBase $element The element. + */ + do_action('elementor/element/before_parse_css', $this, $element); + + $element_settings = $element->getSettings(); + + $this->addControlsStackStyleRules( + $element, + $element->getStyleControls(null, $element->getParsedDynamicSettings()), + $element_settings, + ['{{ID}}', '{{WRAPPER}}', '{{HOVER}}'], + [$element->getId(), $this->getElementUniqueSelector($element), $this->getTransformHoverSelector($element)] + ); + + /** + * After element parse CSS. + * + * Fires after the CSS of the element is parsed. + * + * @since 1.2.0 + * + * @param Post $this The post CSS file. + * @param ElementBase $element The element. + */ + do_action('elementor/element/parse_css', $this, $element); + } +} diff --git a/modules/creativeelements/core/files/index.php b/modules/creativeelements/core/files/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/core/files/index.php @@ -0,0 +1,8 @@ +registerActions(); + } + + /** + * On post delete. + * + * Delete post CSS immediately after a post is deleted from the database. + * + * Fired by `deleted_post` action. + * + * @since 1.2.0 + * @access public + * + * @param string $post_id Post ID. + */ + public function onDeletePost($post_id) + { + if (!Utils::isPostSupport($post_id)) { + return; + } + + $css_file = new PostCSS($post_id); + + $css_file->delete(); + } + + // public function onExportPostMeta($skip, $meta_key) + + /** + * Clear cache. + * + * Delete all meta containing files data. And delete the actual + * files from the upload directory. + * + * @since 1.2.0 + * @access public + */ + public function clearCache() + { + if (\Shop::getContext() == \Shop::CONTEXT_ALL) { + \Configuration::deleteByName(GlobalCSS::META_KEY); + \Configuration::deleteByName(Frontend::META_KEY); + } else { + \Configuration::deleteFromContext(GlobalCSS::META_KEY); + \Configuration::deleteFromContext(Frontend::META_KEY); + } + + $db = \Db::getInstance(); + $table = _DB_PREFIX_ . 'ce_meta'; + + foreach (\Shop::getContextListShopID() as $id_shop) { + $id_shop = (int) $id_shop; + $id = sprintf('%02d', $id_shop); + $meta_key = $db->escape(PostCSS::META_KEY); + + $db->execute("DELETE FROM $table WHERE id LIKE '%$id' AND name = '$meta_key'"); + + // Delete files. + $path = Base::getBaseUploadsDir() . Base::DEFAULT_FILES_DIR; + + foreach (glob("{$path}*$id.css", GLOB_NOSORT) as $file_path) { + \Tools::deleteFile($file_path); + } + foreach (glob("{$path}$id_shop-*.css", GLOB_NOSORT) as $file_path) { + \Tools::deleteFile($file_path); + } + } + + /** + * Elementor clear files. + * + * Fires after Elementor clears files + * + * @since 2.1.0 + */ + do_action('elementor/core/files/clear_cache'); + } + + /** + * Register actions. + * + * Register filters and actions for the files manager. + * + * @since 1.2.0 + * @access private + */ + private function registerActions() + { + add_action('deleted_post', [$this, 'on_delete_post']); + // add_filter('wxr_export_skip_postmeta', [$this, 'on_export_post_meta'], 10, 2); + } +} diff --git a/modules/creativeelements/core/index.php b/modules/creativeelements/core/index.php new file mode 100644 index 00000000..0e32c6a1 --- /dev/null +++ b/modules/creativeelements/core/index.php @@ -0,0 +1,16 @@ +getModulesNamespacePrefix(); + + foreach ($this->getModulesNames() as $module_name) { + $class_name = str_replace('-', ' ', $module_name); + + $class_name = str_replace(' ', '', ucwords($class_name)); + + $class_name = $modules_namespace_prefix . '\ModulesX' . $class_name . 'XModule'; + + /** @var Module $class_name */ + if ($class_name::isActive()) { + $this->modules[$module_name] = $class_name::instance(); + } + } + } + + /** + * Get modules names. + * + * Retrieve the modules names. + * + * @since 2.0.0 + * @access public + * + * @return string[] Modules names. + */ + public function getModulesNames() + { + return [ + 'history', + 'library', + 'dynamic-tags', + 'page-templates', + 'catalog', + 'creative', + 'fonts-manager', + 'custom-css', + 'motion-effects', + 'visibility', + ]; + } + + /** + * Get modules. + * + * Retrieve all the registered modules or a specific module. + * + * @since 2.0.0 + * @access public + * + * @param string $module_name Module name. + * + * @return null|Module|Module[] All the registered modules or a specific module. + */ + public function getModules($module_name) + { + if ($module_name) { + if (isset($this->modules[$module_name])) { + return $this->modules[$module_name]; + } + + return null; + } + + return $this->modules; + } + + /** + * Get modules namespace prefix. + * + * Retrieve the modules namespace prefix. + * + * @since 2.0.0 + * @access protected + * + * @return string Modules namespace prefix. + */ + protected function getModulesNamespacePrefix() + { + return 'CE'; + } +} diff --git a/modules/creativeelements/core/responsive/files/frontend.php b/modules/creativeelements/core/responsive/files/frontend.php new file mode 100644 index 00000000..03361000 --- /dev/null +++ b/modules/creativeelements/core/responsive/files/frontend.php @@ -0,0 +1,157 @@ +template_file = $template_file; + + parent::__construct($file_name); + } + + /** + * @since 2.1.0 + * @access public + */ + public function parseContent() + { + $breakpoints = Responsive::getBreakpoints(); + + $breakpoints_keys = array_keys($breakpoints); + + $file_content = call_user_func('file_get_contents', $this->template_file); + + $file_content = preg_replace_callback('/-width:\s*(767|768|1024|1025)px\s*\)/', function ($placeholder_data) use ($breakpoints_keys, $breakpoints) { + $width = (int) $placeholder_data[1]; + $size = $width < 768 ? 'sm' : ($width < 1025 ? 'md' : 'lg'); + $breakpoint_index = array_search($size, $breakpoints_keys); + + $is_max_point = 767 === $width || 1024 === $width; + + if ($is_max_point) { + $breakpoint_index++; + } + + $value = $breakpoints[$breakpoints_keys[$breakpoint_index]]; + + if ($is_max_point) { + $value--; + } + + return "-width:{$value}px)"; + }, $file_content); + + return $file_content; + } + + /** + * Load meta. + * + * Retrieve the file meta data. + * + * @since 2.1.0 + * @access protected + */ + protected function loadMeta() + { + $option = $this->loadMetaOption(); + + $file_meta_key = $this->getFileMetaKey(); + + if (empty($option[$file_meta_key])) { + return []; + } + + return $option[$file_meta_key]; + } + + /** + * Update meta. + * + * Update the file meta data. + * + * @since 2.1.0 + * @access protected + * + * @param array $meta New meta data. + */ + protected function updateMeta($meta) + { + $option = $this->loadMetaOption(); + + $option[$this->getFileMetaKey()] = $meta; + + update_option(static::META_KEY, $option); + } + + /** + * Delete meta. + * + * Delete the file meta data. + * + * @since 2.1.0 + * @access protected + */ + protected function deleteMeta() + { + $option = $this->loadMetaOption(); + + $file_meta_key = $this->getFileMetaKey(); + + if (isset($option[$file_meta_key])) { + unset($option[$file_meta_key]); + } + + if ($option) { + update_option(static::META_KEY, $option); + } else { + delete_option(static::META_KEY); + } + } + + /** + * @since 2.1.0 + * @access private + */ + private function getFileMetaKey() + { + return pathinfo($this->getFileName(), PATHINFO_FILENAME); + } + + /** + * @since 2.1.0 + * @access private + */ + private function loadMetaOption() + { + $option = get_option(static::META_KEY); + + if (!$option) { + $option = []; + } + + return $option; + } +} diff --git a/modules/creativeelements/core/responsive/files/index.php b/modules/creativeelements/core/responsive/files/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/core/responsive/files/index.php @@ -0,0 +1,8 @@ + 0, + 'sm' => 480, + 'md' => 768, + 'lg' => 1025, + 'xl' => 1440, + 'xxl' => 1600, + ]; + + /** + * Editable breakpoint keys. + * + * Holds the editable breakpoint keys. + * + * @since 1.0.0 + * @access private + * @static + * + * @var array Editable breakpoint keys. + */ + private static $editable_breakpoints_keys = [ + 'md', + 'lg', + ]; + + /** + * Get default breakpoints. + * + * Retrieve the default responsive breakpoints. + * + * @since 1.0.0 + * @access public + * @static + * + * @return array Default breakpoints. + */ + public static function getDefaultBreakpoints() + { + return self::$default_breakpoints; + } + + /** + * Get editable breakpoints. + * + * Retrieve the editable breakpoints. + * + * @since 1.0.0 + * @access public + * @static + * + * @return array Editable breakpoints. + */ + public static function getEditableBreakpoints() + { + return array_intersect_key(self::getBreakpoints(), array_flip(self::$editable_breakpoints_keys)); + } + + /** + * Get breakpoints. + * + * Retrieve the responsive breakpoints. + * + * @since 1.0.0 + * @access public + * @static + * + * @return array Responsive breakpoints. + */ + public static function getBreakpoints() + { + $self = __CLASS__; + + return array_reduce( + array_keys(self::$default_breakpoints), + function ($new_array, $breakpoint_key) use ($self) { + if (!in_array($breakpoint_key, $self::${'editable_breakpoints_keys'})) { + $new_array[$breakpoint_key] = $self::${'default_breakpoints'}[$breakpoint_key]; + } else { + $saved_option = get_option($self::BREAKPOINT_OPTION_PREFIX . $breakpoint_key); + + $new_array[$breakpoint_key] = $saved_option ? (int) $saved_option : $self::${'default_breakpoints'}[$breakpoint_key]; + } + + return $new_array; + }, + [] + ); + } + + /** + * @since 2.1.0 + * @access public + * @static + */ + public static function hasCustomBreakpoints() + { + return !!array_diff(self::$default_breakpoints, self::getBreakpoints()); + } + + /** + * @since 2.1.0 + * @access public + * @static + */ + public static function getStylesheetTemplatesPath() + { + return _CE_PATH_ . 'views/css/'; + } + + /** + * @since 2.1.0 + * @access public + * @static + */ + public static function compileStylesheetTemplates() + { + foreach (self::getStylesheetTemplates() as $file_name => $template_path) { + $file = new FrontendFile($file_name, $template_path); + + $file->update(); + } + } + + /** + * @since 2.1.0 + * @access private + * @static + */ + private static function getStylesheetTemplates() + { + // $templates_paths = glob(self::getStylesheetTemplatesPath() . '*.css'); + $stylesheet_path = self::getStylesheetTemplatesPath(); + $templates_paths = [ + "{$stylesheet_path}frontend.css", + "{$stylesheet_path}frontend.min.css", + "{$stylesheet_path}frontend-rtl.css", + "{$stylesheet_path}frontend-rtl.min.css", + ]; + + $templates = []; + $id_shop = (int) \Context::getContext()->shop->id; + + foreach ($templates_paths as $template_path) { + $file_name = "$id_shop-" . basename($template_path); + + $templates[$file_name] = $template_path; + } + + return apply_filters('elementor/core/responsive/get_stylesheet_templates', $templates); + } +} diff --git a/modules/creativeelements/core/settings/base/index.php b/modules/creativeelements/core/settings/base/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/core/settings/base/index.php @@ -0,0 +1,8 @@ +getCssFileName(); + + add_action("elementor/css-file/{$name}/parse", [$this, 'add_settings_css_rules']); + } + + /** + * Register ajax actions. + * + * Add new actions to handle data after an ajax requests returned. + * + * Fired by `elementor/ajax/register_actions` action. + * + * @since 2.0.0 + * @access public + * + * @param Ajax $ajax_manager + */ + public function registerAjaxActions($ajax_manager) + { + $name = $this->getName(); + $ajax_manager->registerAjaxAction("save_{$name}_settings", [$this, 'ajax_save_settings']); + } + + /** + * Get model for config. + * + * Retrieve the model for settings configuration. + * + * @since 1.6.0 + * @access public + * @abstract + * + * @return Model The model object. + */ + abstract public function getModelForConfig(); + + /** + * Get manager name. + * + * Retrieve settings manager name. + * + * @since 1.6.0 + * @access public + * @abstract + */ + abstract public function getName(); + + /** + * Get model. + * + * Retrieve the model for any given model ID. + * + * @since 1.6.0 + * @access public + * + * @param int $id Optional. Model ID. Default is `0`. + * + * @return Model The model. + */ + final public function getModel($id = 0) + { + $uid = "$id"; + + if (!isset($this->models_cache[$uid])) { + $this->createModel($uid); + } + + return $this->models_cache[$uid]; + } + + /** + * Ajax request to save settings. + * + * Save settings using an ajax request. + * + * @since 1.6.0 + * @access public + * + * @param array $request Ajax request. + * + * @return array Ajax response data. + */ + final public function ajaxSaveSettings($request) + { + $data = $request['data']; + + $id = 0; + + if (!empty($request['id'])) { + $id = $request['id']; + } + + $this->ajaxBeforeSaveSettings($data, $id); + $this->saveSettings($data, $id); + + $settings_name = $this->getName(); + + $success_response_data = []; + + /** + * Settings success response data. + * + * Filters the success response data when saving settings using ajax. + * + * The dynamic portion of the hook name, `$settings_name`, refers to the settings name. + * + * @since 2.0.0 + * + * @param array $success_response_data Success response data. + * @param int $id Settings ID. + * @param array $data Settings data. + */ + $success_response_data = apply_filters("elementor/settings/{$settings_name}/success_response_data", $success_response_data, $id, $data); + + return $success_response_data; + } + + /** + * Save settings. + * + * Save settings to the database and update the CSS file. + * + * @since 1.6.0 + * @access public + * + * @param array $settings Settings. + * @param int $id Optional. Post ID. Default is `0`. + */ + final public function saveSettings(array $settings, $id = 0) + { + $special_settings = $this->getSpecialSettingsNames(); + + $settings_to_save = $settings; + + foreach ($special_settings as $special_setting) { + if (isset($settings_to_save[$special_setting])) { + unset($settings_to_save[$special_setting]); + } + } + + $this->saveSettingsToDb($settings_to_save, $id); + + // Clear cache after save. + if (isset($this->models_cache[$id])) { + unset($this->models_cache[$id]); + } + + $css_file = $this->getCssFileForUpdate($id); + + if ($css_file) { + $css_file->update(); + } + } + + /** + * Add settings CSS rules. + * + * Add new CSS rules to the settings manager. + * + * Fired by `elementor/css-file/{$name}/parse` action. + * + * @since 1.6.0 + * @access public + * + * @param Base $css_file The requested CSS file. + */ + public function addSettingsCssRules(Base $css_file) + { + $model = $this->getModelForCssFile($css_file); + + $css_file->addControlsStackStyleRules( + $model, + $model->getStyleControls(), + $model->getSettings(), + ['{{WRAPPER}}'], + [$model->getCssWrapperSelector()] + ); + } + + /** + * On Elementor init. + * + * Add editor template for the settings + * + * Fired by `elementor/init` action. + * + * @since 2.3.0 + * @access public + */ + public function onElementorEditorInit() + { + Plugin::$instance->common->addTemplate($this->getEditorTemplate(), 'text'); + } + + /** + * Get saved settings. + * + * Retrieve the saved settings from the database. + * + * @since 1.6.0 + * @access protected + * @abstract + * + * @param int $id Post ID. + */ + abstract protected function getSavedSettings($id); + + /** + * Get CSS file name. + * + * Retrieve CSS file name for the settings base manager. + * + * @since 1.6.0 + * @access protected + * @abstract + */ + abstract protected function getCssFileName(); + + /** + * Save settings to DB. + * + * Save settings to the database. + * + * @since 1.6.0 + * @access protected + * @abstract + * + * @param array $settings Settings. + * @param int $id Post ID. + */ + abstract protected function saveSettingsToDb(array $settings, $id); + + /** + * Get model for CSS file. + * + * Retrieve the model for the CSS file. + * + * @since 1.6.0 + * @access protected + * @abstract + * + * @param Base $css_file The requested CSS file. + */ + abstract protected function getModelForCssFile(Base $css_file); + + /** + * Get CSS file for update. + * + * Retrieve the CSS file before updating it. + * + * @since 1.6.0 + * @access protected + * @abstract + * + * @param int $id Post ID. + */ + abstract protected function getCssFileForUpdate($id); + + /** + * Get special settings names. + * + * Retrieve the names of the special settings that are not saved as regular + * settings. Those settings have a separate saving process. + * + * @since 1.6.0 + * @access protected + * + * @return array Special settings names. + */ + protected function getSpecialSettingsNames() + { + return []; + } + + /** + * Ajax before saving settings. + * + * Validate the data before saving it and updating the data in the database. + * + * @since 1.6.0 + * @access public + * + * @param array $data Post data. + * @param int $id Post ID. + */ + public function ajaxBeforeSaveSettings(array $data, $id) + { + } + + /** + * Print the setting template content in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.6.0 + * @access protected + * + * @param string $name Settings panel name. + */ + protected function printEditorTemplateContent($name) + { + ?> +
+ <# _.each( elementor.config.settings..tabs, function( tabTitle, tabSlug ) { #> + + <# } ); #> +
+
+ models_cache[$id] = new $class_name([ + 'id' => $id, + 'settings' => $this->getSavedSettings($id), + ]); + } + + /** + * Get editor template. + * + * Retrieve the final HTML for the editor. + * + * @since 1.6.0 + * @access private + * + * @return string Settings editor template. + */ + private function getEditorTemplate() + { + $name = $this->getName(); + + ob_start(); + ?> + + addPanelTabs(); + } + + /** + * Get manager name. + * + * Retrieve general settings manager name. + * + * @since 1.6.0 + * @access public + * + * @return string Manager name. + */ + public function getName() + { + return 'general'; + } + + /** + * Get model for config. + * + * Retrieve the model for settings configuration. + * + * @since 1.6.0 + * @access public + * + * @return BaseModel The model object. + */ + public function getModelForConfig() + { + return $this->getModel(); + } + + /** + * Get saved settings. + * + * Retrieve the saved settings from the site options. + * + * @since 1.6.0 + * @access protected + * + * @param int $id Post ID. + * + * @return array Saved settings. + */ + protected function getSavedSettings($id) + { + $model_controls = Model::getControlsList(); + + $settings = []; + + foreach ($model_controls as $tab_name => $sections) { + foreach ($sections as $section_name => $section_data) { + foreach ($section_data['controls'] as $control_name => $control_data) { + $saved_setting = get_option($control_name, null); + + if (null !== $saved_setting) { + $settings[$control_name] = get_option($control_name); + } + } + } + } + + return $settings; + } + + /** + * Get CSS file name. + * + * Retrieve CSS file name for the general settings manager. + * + * @since 1.6.0 + * @access protected + * @return string + * + * @return string CSS file name. + */ + protected function getCssFileName() + { + return 'global'; + } + + /** + * Save settings to DB. + * + * Save general settings to the database, as site options. + * + * @since 1.6.0 + * @access protected + * + * @param array $settings Settings. + * @param int $id Post ID. + */ + protected function saveSettingsToDb(array $settings, $id) + { + $model_controls = Model::getControlsList(); + + $one_list_settings = []; + + foreach ($model_controls as $tab_name => $sections) { + foreach ($sections as $section_name => $section_data) { + foreach ($section_data['controls'] as $control_name => $control_data) { + if (isset($settings[$control_name])) { + $one_list_control_name = str_replace('elementor_', '', $control_name); + + $one_list_settings[$one_list_control_name] = $settings[$control_name]; + + update_option($control_name, $settings[$control_name]); + } else { + delete_option($control_name); + } + } + } + } + + // Save all settings in one list for a future usage + if (!empty($one_list_settings)) { + update_option(self::META_KEY, $one_list_settings); + } else { + delete_option(self::META_KEY); + } + } + + /** + * Get model for CSS file. + * + * Retrieve the model for the CSS file. + * + * @since 1.6.0 + * @access protected + * + * @param Base $css_file The requested CSS file. + * + * @return BaseModel The model object. + */ + protected function getModelForCssFile(Base $css_file) + { + return $this->getModel(); + } + + /** + * Get CSS file for update. + * + * Retrieve the CSS file before updating the it. + * + * @since 1.6.0 + * @access protected + * + * @param int $id Post ID. + * + * @return GlobalCSS The global CSS file object. + */ + protected function getCssFileForUpdate($id) + { + $id_shop = (int) \Context::getContext()->shop->id; + + return new GlobalCSS("$id_shop-global.css"); + } + + /** + * Add panel tabs. + * + * Register new panel tab for the lightbox settings. + * + * @since 1.6.0 + * @access private + */ + private function addPanelTabs() + { + ControlsManager::addTab(self::PANEL_TAB_LIGHTBOX, __('Lightbox')); + } +} diff --git a/modules/creativeelements/core/settings/general/model.php b/modules/creativeelements/core/settings/general/model.php new file mode 100644 index 00000000..8792dcbc --- /dev/null +++ b/modules/creativeelements/core/settings/general/model.php @@ -0,0 +1,337 @@ + __('Global Settings'), + 'menu' => [ + 'icon' => 'fa fa-cogs', + 'beforeItem' => 'elementor-settings', + ], + ]; + } + + /** + * Get controls list. + * + * Retrieve the global settings model controls list. + * + * @since 1.6.0 + * @access public + * @static + * + * @return array Controls list. + */ + public static function getControlsList() + { + return [ + ControlsManager::TAB_STYLE => [ + 'style' => [ + 'label' => __('Style'), + 'controls' => [ + 'elementor_default_generic_fonts' => [ + 'label' => __('Default Generic Fonts'), + 'type' => ControlsManager::TEXT, + 'default' => 'Sans-serif', + 'description' => __('The list of fonts used if the chosen font is not available.'), + 'label_block' => true, + ], + 'elementor_container_width' => [ + 'label' => __('Content Width') . ' (px)', + 'type' => ControlsManager::NUMBER, + 'min' => 300, + 'description' => __('Sets the default width of the content area (Default: 1140)'), + 'selectors' => [ + '.elementor-section.elementor-section-boxed > .elementor-container' => 'max-width: {{VALUE}}px', + ], + ], + 'elementor_space_between_widgets' => [ + 'label' => __('Widgets Space') . ' (px)', + 'type' => ControlsManager::NUMBER, + 'min' => 0, + 'placeholder' => '20', + 'description' => __('Sets the default space between widgets (Default: 20)'), + 'selectors' => [ + '.elementor-widget:not(:last-child)' => 'margin-bottom: {{VALUE}}px', + ], + ], + 'elementor_stretched_section_container' => [ + 'label' => __('Stretched Section Fit To'), + 'type' => ControlsManager::TEXT, + 'placeholder' => 'body', + 'description' => __('Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width.'), + 'label_block' => true, + 'frontend_available' => true, + ], + 'elementor_page_title_selector' => [ + 'label' => __('Page Title Selector'), + 'type' => ControlsManager::TEXTAREA, + 'rows' => 1, + 'placeholder' => 'header.page-header', + 'description' => sprintf( + __("You can hide the title at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above."), + 'header.page-header' + ), + 'label_block' => true, + ], + 'elementor_page_wrapper_selector' => [ + 'label' => __('Content Wrapper Selector'), + 'type' => ControlsManager::TEXTAREA, + 'rows' => 3, + 'placeholder' => '#content, #wrapper, #wrapper .container', + 'description' => sprintf( + __("You can clear margin, padding, max-width from content wrapper at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above."), + '#content, #wrapper, #wrapper .container' + ), + 'label_block' => true, + ], + ], + ], + ], + Manager::PANEL_TAB_LIGHTBOX => [ + 'lightbox' => [ + 'label' => __('Lightbox'), + 'controls' => [ + 'elementor_global_image_lightbox' => [ + 'label' => __('Image Lightbox'), + 'type' => ControlsManager::SWITCHER, + 'return_value' => '1', + 'description' => __('Open all image links in a lightbox popup window. The lightbox will automatically work on any link that leads to an image file.'), + 'frontend_available' => true, + ], + 'elementor_enable_lightbox_in_editor' => [ + 'label' => __('Enable In Editor'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'frontend_available' => true, + ], + 'elementor_lightbox_enable_counter' => [ + 'label' => __('Counter'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'frontend_available' => true, + ], + 'elementor_lightbox_enable_zoom' => [ + 'label' => __('Zoom'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'frontend_available' => true, + ], + 'elementor_lightbox_title_src' => [ + 'label' => __('Title'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('None'), + 'title' => __('Title'), + 'caption' => __('Caption'), + 'alt' => __('Alt'), + // 'description' => __('Description'), + ], + 'default' => 'title', + 'frontend_available' => true, + ], + 'elementor_lightbox_description_src' => [ + 'label' => __('Description'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('None'), + 'title' => __('Title'), + 'caption' => __('Caption'), + 'alt' => __('Alt'), + // 'description' => __('Description'), + ], + 'default' => 'caption', + 'frontend_available' => true, + ], + 'elementor_lightbox_color' => [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '.elementor-lightbox' => 'background-color: {{VALUE}}', + ], + ], + 'elementor_lightbox_ui_color' => [ + 'label' => __('UI Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '.elementor-lightbox' => '--lightbox-ui-color: {{VALUE}}', + ], + ], + 'elementor_lightbox_ui_color_hover' => [ + 'label' => __('UI Hover Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '.elementor-lightbox' => '--lightbox-ui-color-hover: {{VALUE}}', + ], + ], + 'elementor_lightbox_text_color' => [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '.elementor-lightbox' => '--lightbox-text-color: {{VALUE}}', + ], + ], + 'lightbox_box_shadow_type' => [ + 'label' => _x('Box Shadow', 'Box Shadow Control'), + 'type' => ControlsManager::POPOVER_TOGGLE, + 'return_value' => 'yes', + 'render_type' => 'ui', + ], + 'lightbox_box_shadow' => [ + 'label' => _x('Box Shadow', 'Box Shadow Control'), + 'type' => ControlsManager::BOX_SHADOW, + 'default' => [ + 'horizontal' => 0, + 'vertical' => 0, + 'blur' => 10, + 'spread' => 0, + 'color' => 'rgba(0,0,0,0.5)', + ], + 'selectors' => [ + '.elementor-lightbox .elementor-lightbox-image' => 'box-shadow: {{HORIZONTAL}}px {{VERTICAL}}px {{BLUR}}px {{SPREAD}}px {{COLOR}} {{lightbox_box_shadow_position.VALUE}};', + ], + 'condition' => [ + 'lightbox_box_shadow_type!' => '', + ], + 'popover' => [ + 'start' => true, + ], + ], + 'lightbox_box_shadow_position' => [ + 'label' => 'Position', + 'type' => ControlsManager::SELECT, + 'options' => [ + ' ' => 'Outline', + 'inset' => 'Inset', + ], + 'default' => ' ', + 'render_type' => 'ui', + 'condition' => [ + 'lightbox_box_shadow_type!' => '', + ], + 'popover' => [ + 'end' => true, + ], + ], + 'lightbox_icons_size' => [ + 'label' => __('Toolbar Icons Size'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '.elementor-lightbox' => '--lightbox-header-icons-size: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ], + 'lightbox_slider_icons_size' => [ + 'label' => __('Navigation Icons Size'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '.elementor-lightbox' => '--lightbox-navigation-icons-size: {{SIZE}}{{UNIT}}', + ], + ], + ], + ], + ], + ]; + } + + /** + * Register model controls. + * + * Used to add new controls to the global settings model. + * + * @since 1.6.0 + * @access protected + */ + protected function _registerControls() + { + $controls_list = self::getControlsList(); + + foreach ($controls_list as $tab_name => $sections) { + foreach ($sections as $section_name => $section_data) { + $this->startControlsSection( + $section_name, + [ + 'label' => $section_data['label'], + 'tab' => $tab_name, + ] + ); + + foreach ($section_data['controls'] as $control_name => $control_data) { + $this->addControl($control_name, $control_data); + } + + $this->endControlsSection(); + } + } + } +} diff --git a/modules/creativeelements/core/settings/index.php b/modules/creativeelements/core/settings/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/core/settings/index.php @@ -0,0 +1,8 @@ +getName()] = $manager; + } + + /** + * Get settings managers. + * + * Retrieve registered settings manager(s). + * + * If no parameter passed, it will retrieve all the settings managers. For + * any given parameter it will retrieve a single settings manager if one + * exist, or `null` otherwise. + * + * @since 1.6.0 + * @access public + * @static + * + * @param string $manager_name Optional. Settings manager name. Default is + * null. + * + * @return BaseManager|BaseManager[] Single settings manager, if it exists, + * null if it doesn't exists, or the all + * the settings managers if no parameter + * defined. + */ + public static function getSettingsManagers($manager_name = null) + { + if ($manager_name) { + if (isset(self::$settings_managers[$manager_name])) { + return self::$settings_managers[$manager_name]; + } + + return null; + } + + return self::$settings_managers; + } + + /** + * Register default settings managers. + * + * Register builtin Elementor settings managers. + * + * @since 1.6.0 + * @access private + * @static + */ + private static function registerDefaultSettingsManagers() + { + foreach (self::$builtin_settings_managers_names as $manager_name) { + $manager_class = call_user_func('substr', __CLASS__, 0, strrpos(__CLASS__, 'X') + 1) . call_user_func('ucfirst', $manager_name) . 'XManager'; + + self::addSettingsManager(new $manager_class()); + } + } + + /** + * Get settings managers config. + * + * Retrieve the settings managers configuration. + * + * @since 1.6.0 + * @access public + * @static + * + * @return array The settings managers configuration. + */ + public static function getSettingsManagersConfig() + { + $config = []; + + // $user_can = Plugin::instance()->role_manager->userCan('design'); + + foreach (self::$settings_managers as $name => $manager) { + $settings_model = $manager->getModelForConfig(); + + $tabs = $settings_model->getTabsControls(); + + // if (!$user_can) { + // unset($tabs['style']); + // } + + $config[$name] = [ + 'name' => $manager->getName(), + 'panelPage' => $settings_model->getPanelPageSettings(), + 'cssWrapperSelector' => $settings_model->getCssWrapperSelector(), + 'controls' => $settings_model->getControls(), + 'tabs' => $tabs, + 'settings' => $settings_model->getSettings(), + ]; + } + + return $config; + } + + /** + * Get settings frontend config. + * + * Retrieve the settings managers frontend configuration. + * + * @since 1.6.0 + * @access public + * @static + * + * @return array The settings managers frontend configuration. + */ + public static function getSettingsFrontendConfig() + { + $config = []; + + foreach (self::$settings_managers as $name => $manager) { + $settings_model = $manager->getModelForConfig(); + + if ($settings_model) { + $config[$name] = $settings_model->getFrontendSettings(); + } + } + + return $config; + } + + /** + * Run settings managers. + * + * Register builtin Elementor settings managers. + * + * @since 1.6.0 + * @access public + * @static + */ + public static function run() + { + self::registerDefaultSettingsManagers(); + } +} diff --git a/modules/creativeelements/core/settings/page/index.php b/modules/creativeelements/core/settings/page/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/core/settings/page/index.php @@ -0,0 +1,8 @@ +editor->isEditMode()) { + return null; + } + + if (Plugin::$instance->editor->isEditMode()) { + $post_id = Plugin::$instance->editor->getPostId(); + $document = Plugin::$instance->documents->getDocOrAutoSave($post_id); + } else { + $post_id = get_the_ID(); + $document = Plugin::$instance->documents->getDocForFrontend($post_id); + } + + if (!$document) { + return null; + } + + $model = $this->getModel($document->getPost()->ID); + + if ($document->isAutosave()) { + $model->setSettings('post_status', $document->getMainPost()->post_status); + } + + return $model; + } + + /** + * Ajax before saving settings. + * + * Validate the data before saving it and updating the data in the database. + * + * @since 1.6.0 + * @access public + * + * @param array $data Post data. + * @param int $id Post ID. + * + * @throws \Exception If invalid post returned using the `$id`. + * @throws \Exception If current user don't have permissions to edit the post. + */ + public function ajaxBeforeSaveSettings(array $data, $id) + { + $post = get_post($id); + + if (empty($post)) { + throw new \Exception('Invalid post.', Exceptions::NOT_FOUND); + } + + if (!current_user_can('edit', $id)) { + throw new \Exception('Access denied.', Exceptions::FORBIDDEN); + } + + // Avoid save empty post title. + if (!empty($data['post_title'])) { + $post->post_title = $data['post_title']; + } + + // if (isset($data['post_excerpt']) && post_type_supports($post->post_type, 'excerpt')) { + // $post->post_excerpt = $data['post_excerpt']; + // } + + if (isset($data['post_status'])) { + // $this->savePostStatus($id, $data['post_status']); + // unset($post->post_status); + $post->post_status = $data['post_status']; + } + + wp_update_post($post); + + // Check updated status + // if (DB::STATUS_PUBLISH === get_post_status($id)) + $autosave = wp_get_post_autosave($post->ID); + + if ($autosave) { + wp_delete_post_revision($autosave->ID); + } + + if (isset($data['post_featured_image'])) { + if (empty($data['post_featured_image']['url'])) { + delete_post_meta($post->ID, '_og_image'); + } else { + update_post_meta($post->ID, '_og_image', $data['post_featured_image']['url']); + } + } + + if (Utils::isCptCustomTemplatesSupported($post)) { + $template = get_post_meta($post->ID, '_wp_page_template', true); + + if (isset($data['template'])) { + $template = $data['template']; + } + + if (empty($template)) { + $template = 'default'; + } + + update_post_meta($post->ID, '_wp_page_template', $template); + } + } + + /** + * Save settings to DB. + * + * Save page settings to the database, as post meta data. + * + * @since 1.6.0 + * @access protected + * + * @param array $settings Settings. + * @param int $id Post ID. + */ + protected function saveSettingsToDb(array $settings, $id) + { + if (!empty($settings)) { + update_post_meta($id, self::META_KEY, $settings); + } else { + delete_post_meta($id, self::META_KEY); + } + } + + /** + * Get CSS file for update. + * + * Retrieve the CSS file before updating it. + * + * This method overrides the parent method to disallow updating CSS files for pages. + * + * @since 1.6.0 + * @access protected + * + * @param int $id Post ID. + * + * @return false Disallow The updating CSS files for pages. + */ + protected function getCssFileForUpdate($id) + { + return false; + } + + /** + * Get saved settings. + * + * Retrieve the saved settings from the post meta. + * + * @since 1.6.0 + * @access protected + * + * @param int $id Post ID. + * + * @return array Saved settings. + */ + protected function getSavedSettings($id) + { + $settings = get_post_meta($id, self::META_KEY, true); + + if (!$settings) { + $settings = []; + } + + if (Utils::isCptCustomTemplatesSupported(get_post($id))) { + $saved_template = get_post_meta($id, '_wp_page_template', true); + + if ($saved_template) { + $settings['template'] = $saved_template; + } + } + + return $settings; + } + + /** + * Get CSS file name. + * + * Retrieve CSS file name for the page settings manager. + * + * @since 1.6.0 + * @access protected + * + * @return string CSS file name. + */ + protected function getCssFileName() + { + return 'post'; + } + + /** + * Get model for CSS file. + * + * Retrieve the model for the CSS file. + * + * @since 1.6.0 + * @access protected + * + * @param Base $css_file The requested CSS file. + * + * @return BaseModel The model object. + */ + protected function getModelForCssFile(Base $css_file) + { + if (!$css_file instanceof Post) { + return null; + } + + $post_id = $css_file->getPostId(); + + if ($css_file instanceof PostPreview) { + $autosave = Utils::getPostAutosave($post_id); + if ($autosave) { + $post_id = $autosave->ID; + } + } + + return $this->getModel($post_id); + } + + /** + * Get special settings names. + * + * Retrieve the names of the special settings that are not saved as regular + * settings. Those settings have a separate saving process. + * + * @since 1.6.0 + * @access protected + * + * @return array Special settings names. + */ + protected function getSpecialSettingsNames() + { + return [ + 'id', + 'post_title', + 'post_status', + 'template', + 'post_excerpt', + 'post_featured_image', + // Do not save: + 'action', + '_nonce', + 'section_page_settings', + 'section_page_style', + 'section_custom_css', + 'template_default_description', + 'template_canvas_description', + ]; + } + + // public function savePostStatus($post_id, $status) +} diff --git a/modules/creativeelements/core/settings/page/model.php b/modules/creativeelements/core/settings/page/model.php new file mode 100644 index 00000000..67b20f08 --- /dev/null +++ b/modules/creativeelements/core/settings/page/model.php @@ -0,0 +1,193 @@ +post = get_post($data['id']); + + if (!$this->post) { + $this->post = new WPPost((object) []); + } + + if (wp_is_post_revision($this->post->ID)) { + $this->post_parent = get_post($this->post->post_parent); + } else { + $this->post_parent = $this->post; + } + + parent::__construct($data); + } + + /** + * Get model name. + * + * Retrieve page settings model name. + * + * @since 1.6.0 + * @access public + * + * @return string Model name. + */ + public function getName() + { + return 'page-settings'; + } + + /** + * Get model unique name. + * + * Retrieve page settings model unique name. + * + * @since 1.6.0 + * @access public + * + * @return string Model unique name. + */ + public function getUniqueName() + { + return $this->getName() . '-' . $this->post->ID; + } + + /** + * Get CSS wrapper selector. + * + * Retrieve the wrapper selector for the page settings model. + * + * @since 1.6.0 + * @access public + * + * @return string CSS wrapper selector. + */ + public function getCssWrapperSelector() + { + $document = Plugin::$instance->documents->get($this->post_parent->ID); + return $document->getCssWrapperSelector(); + } + + /** + * Get panel page settings. + * + * Retrieve the panel setting for the page settings model. + * + * @since 1.6.0 + * @access public + * + * @return array { + * Panel settings. + * + * @type string $title The panel title. + * } + */ + public function getPanelPageSettings() + { + $document = Plugin::$instance->documents->get($this->post->ID); + + return [ + /* translators: %s: Document title */ + 'title' => sprintf(__('%s Settings'), $document::getTitle()), + ]; + } + + /** + * On export post meta. + * + * When exporting data, check if the post is not using page template and + * exclude it from the exported Elementor data. + * + * @since 1.6.0 + * @access public + * + * @param array $element_data Element data. + * + * @return array Element data to be exported. + */ + public function onExport($element_data) + { + if (!empty($element_data['settings']['template'])) { + /** + * @var \Elementor\Modules\PageTemplates\Module $page_templates_module + */ + $page_templates_module = Plugin::$instance->modules_manager->getModules('page-templates'); + $is_elementor_template = !!$page_templates_module->getTemplatePath($element_data['settings']['template']); + + if (!$is_elementor_template) { + unset($element_data['settings']['template']); + } + } + + return $element_data; + } + + /** + * Register model controls. + * + * Used to add new controls to the page settings model. + * + * @since 1.6.0 + * @access protected + */ + protected function _registerControls() + { + // Check if it's a real model, or abstract (for example - on import ) + if ($this->post->ID) { + $document = Plugin::$instance->documents->getDocOrAutoSave($this->post->ID); + + if ($document) { + $controls = $document->getControls(); + + foreach ($controls as $control_id => $args) { + $this->addControl($control_id, $args); + } + } + } + } +} diff --git a/modules/creativeelements/core/utils/exceptions.php b/modules/creativeelements/core/utils/exceptions.php new file mode 100644 index 00000000..47a45885 --- /dev/null +++ b/modules/creativeelements/core/utils/exceptions.php @@ -0,0 +1,47 @@ +name = 'creativeelements'; + $this->tab = 'content_management'; + $this->version = '2.5.11'; + $this->author = 'WebshopWorks'; + $this->module_key = '7a5ebcc21c1764675f1db5d0f0eacfe5'; + $this->ps_versions_compliancy = ['min' => '1.7.0', 'max' => '1.7']; + $this->bootstrap = true; + $this->displayName = $this->l('Creative Elements - live Theme & Page Builder'); + $this->description = $this->l('The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design.'); + parent::__construct($this->name, null); + + $this->checkThemeChange(); + + Shop::addTableAssociation(CETheme::$definition['table'], ['type' => 'shop']); + Shop::addTableAssociation(CETheme::$definition['table'] . '_lang', ['type' => 'fk_shop']); + Shop::addTableAssociation(CEContent::$definition['table'], ['type' => 'shop']); + Shop::addTableAssociation(CEContent::$definition['table'] . '_lang', ['type' => 'fk_shop']); + } + + public function install() + { + require_once _CE_PATH_ . 'classes/CEDatabase.php'; + + if (Shop::isFeatureActive()) { + Shop::setContext(Shop::CONTEXT_ALL); + } + CEDatabase::initConfigs(); + + if (!CEDatabase::createTables()) { + $this->_errors[] = Db::getInstance()->getMsgError(); + return false; + } + + if ($res = parent::install() && CEDatabase::updateTabs()) { + foreach (CEDatabase::getHooks() as $hook) { + $res = $res && $this->registerHook($hook, null, 1); + } + } + + return $res; + } + + public function uninstall() + { + foreach (Tab::getCollectionFromModule($this->name) as $tab) { + $tab->delete(); + } + + return parent::uninstall(); + } + + public function enable($force_all = false) + { + return parent::enable($force_all) && Db::getInstance()->update( + 'tab', + ['active' => 1], + "module = 'creativeelements' AND class_name != 'AdminCEEditor'" + ); + } + + public function disable($force_all = false) + { + return Db::getInstance()->update( + 'tab', + ['active' => 0], + "module = 'creativeelements'" + ) && parent::disable($force_all); + } + + public function addOverride($classname) + { + try { + return parent::addOverride($classname); + } catch (Exception $ex) { + return false; + } + } + + public function getContent() + { + Tools::redirectAdmin($this->context->link->getAdminLink('AdminCEThemes')); + } + + public function hookDisplayBackOfficeHeader($params = []) + { + Configuration::get("PS_ALLOW_HTML_\x49FRAME") or Configuration::updateValue("PS_ALLOW_HTML_\x49FRAME", 1); + + // Handle migrate + if ((Configuration::getGlobalValue('ce_migrate') || Tools::getIsset('CEMigrate')) && + Db::getInstance()->executeS("SHOW TABLES LIKE '%_ce_meta'") + ) { + require_once _CE_PATH_ . 'classes/CEMigrate.php'; + CEMigrate::registerJavascripts(); + } + + $footer_product = ''; + preg_match('~/([^/]+)/(\d+)/edit\b~', $_SERVER['REQUEST_URI'], $req); + $controller = Tools::strtolower(Tools::getValue('controller')); + + switch ($controller) { + case 'admincetemplates': + $id_type = CE\UId::TEMPLATE; + $id = (int) Tools::getValue('id_ce_template'); + break; + case 'admincethemes': + $id_type = CE\UId::THEME; + $id = (int) Tools::getValue('id_ce_theme'); + break; + case 'admincecontent': + $id_type = CE\UId::CONTENT; + $id = (int) Tools::getValue('id_ce_content'); + break; + case 'admincmscontent': + if ($req && $req[1] == 'category' || Tools::getIsset('addcms_category') || Tools::getIsset('updatecms_category')) { + $id_type = CE\UId::CMS_CATEGORY; + $id = (int) Tools::getValue('id_cms_category', $req ? $req[2] : 0); + break; + } + $id_type = CE\UId::CMS; + $id = (int) Tools::getValue('id_cms', $req ? $req[2] : 0); + break; + case 'adminproducts': + $id_type = CE\UId::PRODUCT; + $id = (int) Tools::getValue('id_product', basename(explode('?', $_SERVER['REQUEST_URI'])[0])); + $footer_product = new CE\UId(CEContent::getFooterProductId($id), CE\UId::CONTENT, 0, $this->context->shop->id); + break; + case 'admincategories': + $id_type = CE\UId::CATEGORY; + $id = (int) Tools::getValue('id_category', $req ? $req[2] : 0); + break; + case 'adminmanufacturers': + $id_type = CE\UId::MANUFACTURER; + $id = (int) Tools::getValue('id_manufacturer', $req ? $req[2] : 0); + break; + case 'adminsuppliers': + $id_type = CE\UId::SUPPLIER; + $id = (int) Tools::getValue('id_supplier', $req ? $req[2] : 0); + break; + case 'adminxippost': + $id_type = CE\UId::XIPBLOG_POST; + $id = (int) Tools::getValue('id_xipposts'); + break; + case 'adminstblog': + $id_type = CE\UId::STBLOG_POST; + $id = (int) Tools::getValue('id_st_blog'); + break; + case 'adminblogposts': + if ('advanceblog' === $this->context->controller->module->name) { + $id_type = CE\UId::ADVANCEBLOG_POST; + $id = (int) Tools::getValue('id_post'); + } + break; + case 'adminpsblogblogs': + $id_type = CE\UId::PSBLOG_POST; + $id = (int) Tools::getValue('id_psblog_blog'); + break; + case 'admintvcmspost': + $id_type = CE\UId::TVCMSBLOG_POST; + $id = (int) Tools::getValue('id_tvcmsposts'); + break; + case 'adminmodules': + $configure = Tools::strtolower(Tools::getValue('configure')); + + if ('ybc_blog' == $configure && Tools::getValue('control') == 'post') { + $id_type = CE\UId::YBC_BLOG_POST; + $id = (int) Tools::getValue('id_post'); + break; + } + if ('prestablog' == $configure && Tools::getIsset('editNews')) { + $id_type = CE\UId::PRESTABLOG_POST; + $id = (int) Tools::getValue('idN'); + break; + } + if ('hiblog' == $configure) { + $id_type = CE\UId::HIBLOG_POST; + $id = 0; + $hideEditor = []; + break; + } + break; + case 'adminmaintenance': + $id_type = CE\UId::CONTENT; + $id = CEContent::getMaintenanceId(); + + $uids = CE\UId::getBuiltList($id, $id_type, $this->context->shop->id); + $hideEditor = empty($uids) ? $uids : array_keys($uids[$this->context->shop->id]); + break; + } + + if (isset($id)) { + self::$controller = $this->context->controller; + self::$controller->addJQuery(); + self::$controller->js_files[] = $this->_path . 'views/js/admin.js?v=' . _CE_VERSION_; + self::$controller->css_files[$this->_path . 'views/css/admin.css?v=' . _CE_VERSION_] = 'all'; + + $uid = new CE\UId($id, $id_type, 0, Shop::getContext() === Shop::CONTEXT_SHOP ? $this->context->shop->id : 0); + + isset($hideEditor) or $hideEditor = $uid->getBuiltLangIdList(); + + $display_suppliers = Configuration::get('PS_DISPLAY_SUPPLIERS'); + $display_manufacturers = version_compare(_PS_VERSION_, '1.7.7', '<') + ? $display_suppliers + : Configuration::get('PS_DISPLAY_MANUFACTURERS'); + + Media::addJsDef([ + 'ceAdmin' => [ + 'uid' => "$uid", + 'hideEditor' => $hideEditor, + 'footerProduct' => "$footer_product", + 'i18n' => [ + 'edit' => str_replace("'", "’", $this->l('Edit with Creative Elements')), + 'save' => str_replace("'", "’", $this->l('Please save the form before editing with Creative Elements')), + 'error' => str_replace("'", "’", $this->getErrorMsg()), + ], + 'editorUrl' => Tools::safeOutput($this->context->link->getAdminLink('AdminCEEditor') . '&uid='), + 'languages' => Language::getLanguages(true, $uid->id_shop), + 'editSuppliers' => (int) $display_suppliers, + 'editManufacturers' => (int) $display_manufacturers, + ], + ]); + $this->context->smarty->assign('edit_width_ce', $this->context->link->getAdminLink('AdminCEEditor')); + } + return $this->context->smarty->fetch(_CE_TEMPLATES_ . 'hook/backoffice_header.tpl'); + } + + protected function getErrorMsg() + { + if (!Configuration::get('PS_SHOP_ENABLE', null, null, $this->context->shop->id)) { + $ips = explode(',', Configuration::get('PS_MAINTENANCE_IP', null, null, $this->context->shop->id)); + + if (!in_array(Tools::getRemoteAddr(), $ips)) { + return $this->l('The shop is in maintenance mode, please whitelist your IP'); + } + } + + $id_tab = Tab::getIdFromClassName('AdminCEEditor'); + $access = Profile::getProfileAccess($this->context->employee->id_profile, $id_tab); + + if ('1' !== $access['view']) { + return CE\Helper::transError('You do not have permission to view this.'); + } + + $class = isset(self::$controller->className) ? self::$controller->className : ''; + + if (in_array($class, self::$overrides)) { + $loadObject = new ReflectionMethod(self::$controller, 'loadObject'); + $loadObject->setAccessible(true); + + if (empty($loadObject->invoke(self::$controller, true)->active) && !defined("$class::CE_OVERRIDE")) { + return $this->l('You can not edit items which are not displayed, because an override file is missing. Please contact us on https://addons.prestashop.com'); + } + } + return ''; + } + + public function hookActionFrontControllerAfterInit($params = []) + { + if (version_compare(_PS_VERSION_, '1.7.7', '<')) { + // Compatibility fix for PS 1.7.3 - 1.7.6 + $this->hookActionFrontControllerInitAfter($params); + } + } + + public function hookActionFrontControllerInitAfter($params = []) + { + $tpl_dir = $this->context->smarty->getTemplateDir(); + array_unshift($tpl_dir, _CE_TEMPLATES_ . 'front/theme/'); + $this->context->smarty->setTemplateDir($tpl_dir); + + if ($id_miniature = (int) Configuration::get('CE_PRODUCT_MINIATURE')) { + $this->context->smarty->assign( + 'CE_PRODUCT_MINIATURE_UID', + new CE\UId($id_miniature, CE\UId::THEME, $this->context->language->id, $this->context->shop->id) + ); + CE\Plugin::instance()->frontend->hasElementorInPage(true); + } + } + + public function hookHeader() + { + // Compatibility fix for PS 1.7.7.x upgrade + return $this->hookDisplayHeader(); + } + + public function hookDisplayHeader() + { + self::$controller = $this->context->controller; + + $plugin = CE\Plugin::instance(); + CE\did_action('template_redirect') or CE\do_action('template_redirect'); + + if ($id_quick_view = Configuration::get('CE_PRODUCT_QUICK_VIEW')) { + $plugin->frontend->hasElementorInPage(true); + } + if (self::$controller instanceof ProductController) { + $this->addViewedProduct(self::$controller->getProduct()->id); + + if ($id_quick_view && Tools::getValue('action') === 'quickview') { + CE\UId::$_ID = new CE\UId($id_quick_view, CE\UId::THEME, $this->context->language->id, $this->context->shop->id); + + self::skipOverrideLayoutTemplate(); + $this->context->smarty->assign('CE_PRODUCT_QUICK_VIEW_ID', $id_quick_view); + } + } + + $uid_preview = self::getPreviewUId(false); + + if ($uid_preview && CE\UId::CONTENT === $uid_preview->id_type) { + Tools::getIsset('maintenance') && $this->displayMaintenancePage(); + } + + // PS fix: OverrideLayoutTemplate hook doesn't exec on forbidden page + http_response_code() !== 403 or $this->hookOverrideLayoutTemplate(); + } + + protected function addViewedProduct($id_product) + { + $products = isset($this->context->cookie->ceViewedProducts) + ? explode(',', $this->context->cookie->ceViewedProducts) + : [] + ; + if (in_array($id_product, $products)) { + $products = array_diff($products, [$id_product]); + } + array_unshift($products, (int) $id_product); + + while (count($products) > self::VIEWED_PRODUCTS_LIMIT) { + array_pop($products); + } + $this->context->cookie->ceViewedProducts = implode(',', $products); + + if (Tools::getValue('action') === 'quickview') { + $this->context->cookie->write(); + } + } + + public static function skipOverrideLayoutTemplate() + { + self::$tplOverride = ''; + } + + public function hookOverrideLayoutTemplate($params = []) + { + if (null !== self::$tplOverride || !self::$controller) { + return self::$tplOverride; + } + self::$tplOverride = ''; + + if (self::isMaintenance()) { + return self::$tplOverride; + } + // Page Content + $controller = self::$controller; + $tpl_vars = &$this->context->smarty->tpl_vars; + $front = Tools::strtolower(preg_replace('/(ModuleFront)?Controller(Override)?$/i', '', get_class($controller))); + // PrestaBlog fix for non-default blog URL + stripos($front, 'prestablog') === 0 && property_exists($controller, 'news') && $front = 'prestablogblog'; + + switch ($front) { + case 'creativeelementspreview': + $model = self::getPreviewUId(false)->getModel(); + $key = $model::${'definition'}['table']; + + if (isset($tpl_vars[$key]->value['id'])) { + $id = $tpl_vars[$key]->value['id']; + $desc = ['description' => &$tpl_vars[$key]->value['content']]; + } + break; + case 'cms': + $model = class_exists('CMS') ? 'CMS' : 'CMSCategory'; + $key = $model::${'definition'}['table']; + + if (isset($tpl_vars[$key]->value['id'])) { + $id = $tpl_vars[$key]->value['id']; + $desc = ['description' => &$tpl_vars[$key]->value['content']]; + + CE\add_action('wp_head', 'print_og_image'); + } elseif (isset($tpl_vars['cms_category']->value['id'])) { + $model = 'CMSCategory'; + $id = $tpl_vars['cms_category']->value['id']; + $desc = &$tpl_vars['cms_category']->value; + } + break; + case 'product': + case 'category': + case 'manufacturer': + case 'supplier': + $model = $front; + + if (isset($tpl_vars[$model]->value['id'])) { + $id = $tpl_vars[$model]->value['id']; + $desc = &$tpl_vars[$model]->value; + } + break; + case 'ybc_blogblog': + $model = 'Ybc_blog_post_class'; + + if (isset($tpl_vars['blog_post']->value['id_post'])) { + $id = $tpl_vars['blog_post']->value['id_post']; + $desc = &$tpl_vars['blog_post']->value; + + if (Tools::getIsset('adtoken') && self::hasAdminToken('AdminModules')) { + // override post status for preview + $tpl_vars['blog_post']->value['enabled'] = 1; + } + } + break; + case 'xipblogsingle': + $model = 'XipPostsClass'; + + if (isset($tpl_vars['xipblogpost']->value['id_xipposts'])) { + $id = $tpl_vars['xipblogpost']->value['id_xipposts']; + $desc = ['description' => &$tpl_vars['xipblogpost']->value['post_content']]; + } + break; + case 'stblogarticle': + $model = 'StBlogClass'; + + if (isset($tpl_vars['blog']->value['id'])) { + $id = $tpl_vars['blog']->value['id']; + $desc = ['description' => &$tpl_vars['blog']->value['content']]; + break; + } + $blogProp = new ReflectionProperty($controller, 'blog'); + $blogProp->setAccessible(true); + $blog = $blogProp->getValue($controller); + + if (isset($blog->id)) { + $id = $blog->id; + $desc = ['description' => &$blog->content]; + } + break; + case 'advanceblogdetail': + $model = 'BlogPosts'; + + if (isset($tpl_vars['postData']->value['id_post'])) { + $id = $tpl_vars['postData']->value['id_post']; + $desc = ['description' => &$tpl_vars['postData']->value['post_content']]; + } + break; + case 'prestablogblog': + $model = 'NewsClass'; + $newsProp = new ReflectionProperty($controller, 'news'); + $newsProp->setAccessible(true); + $news = $newsProp->getValue($controller); + + if (isset($news->id)) { + $id = $news->id; + + if (isset($tpl_vars['tpl_unique'])) { + $desc = ['description' => &$tpl_vars['tpl_unique']->value]; + } else { + $desc = ['description' => &$news->content]; + } + } + break; + case 'hiblogpostdetails': + $model = 'HiBlogPost'; + + if (isset($tpl_vars['post']->value['id_post'])) { + $id = $tpl_vars['post']->value['id_post']; + $desc = &$tpl_vars['post']->value; + + if (Tools::getIsset('adtoken') && self::hasAdminToken('AdminModules')) { + // override post status for preview + $tpl_vars['post']->value['enabled'] = 1; + } + } + break; + case 'tvcmsblogsingle': + $model = 'TvcmsPostsClass'; + + if (isset($tpl_vars['tvcmsblogpost']->value['id_tvcmsposts'])) { + $id = $tpl_vars['tvcmsblogpost']->value['id_tvcmsposts']; + $desc = ['description' => &$tpl_vars['tvcmsblogpost']->value['post_content']]; + } + break; + } + + if (isset($id)) { + $uid_preview = self::getPreviewUId(); + + if ($uid_preview && $uid_preview->id === (int) $id && $uid_preview->id_type === CE\UId::getTypeId($model)) { + CE\UId::$_ID = $uid_preview; + } elseif (!CE\UId::$_ID || in_array(CE\UId::$_ID->id_type, [CE\UId::CONTENT, CE\UId::THEME, CE\UId::TEMPLATE])) { + CE\UId::$_ID = new CE\UId($id, CE\UId::getTypeId($model), $this->context->language->id, $this->context->shop->id); + } + + if (CE\UId::$_ID) { + $this->filterBodyClasses(); + + $desc['description'] = CE\apply_filters('the_content', $desc['description']); + } + } + + // Theme Builder + $themes = [ + 'header' => Configuration::get('CE_HEADER'), + 'footer' => Configuration::get('CE_FOOTER'), + ]; + $pages = [ + 'index' => 'page-index', + 'contact' => 'page-contact', + 'product' => 'product', + 'pagenotfound' => 'page-not-found', + ]; + foreach ($pages as $page_type => $theme_type) { + if ($front === $page_type) { + $themes[$theme_type] = Configuration::get(self::getThemeVarName($theme_type)); + break; + } + } + $uid = CE\UId::$_ID; + $uid_preview = self::getPreviewUId(false); + + if ($uid_preview && (CE\UId::THEME === $uid_preview->id_type || CE\UId::TEMPLATE === $uid_preview->id_type)) { + $preview = self::renderTheme($uid_preview); + $document = CE\Plugin::$instance->documents->getDocForFrontend($uid_preview); + $type_preview = $document->getTemplateType(); + $this->context->smarty->assign(self::getThemeVarName($type_preview), $preview); + + if ('product-quick-view' === $type_preview) { + unset($desc); + $desc = ['description' => &$preview]; + CE\Plugin::$instance->modules_manager->getModules('catalog')->handleProductQuickView(); + + $this->context->smarty->assign('CE_PRODUCT_QUICK_VIEW_ID', $uid_preview->id); + } elseif ('product-miniature' === $type_preview) { + unset($desc); + $desc = ['description' => &$preview]; + CE\Plugin::$instance->modules_manager->getModules('catalog')->handleProductMiniature(); + + $this->context->smarty->assign('CE_PRODUCT_MINIATURE_ID', $uid_preview->id); + } elseif ('product' === $type_preview) { + $this->context->smarty->assign('CE_PRODUCT_ID', $uid_preview->id); + } elseif (stripos($type_preview, 'page-') === 0) { + $desc = ['description' => &$preview]; + CE\add_action('wp_head', 'print_og_image'); + } + array_search($type_preview, $pages) && $this->filterBodyClasses($uid_preview->id); + unset($themes[$type_preview]); + } + if (isset($pages[$front]) && !empty($themes[$pages[$front]])) { + $theme_type = $pages[$front]; + $uid_theme = new CE\UId($themes[$theme_type], CE\UId::THEME, $this->context->language->id, $this->context->shop->id); + + if ('product' === $page_type) { + $this->context->smarty->assign([ + 'CE_PRODUCT_ID' => $uid_theme->id, + 'CE_PRODUCT' => self::renderTheme($uid_theme), + ]); + } else { + $desc = ['description' => self::renderTheme($uid_theme)]; + $this->context->smarty->assign(self::getThemeVarName($theme_type), $desc['description']); + CE\add_action('wp_head', 'print_og_image'); + } + $this->filterBodyClasses($uid_theme->id); + unset($themes[$theme_type]); + } + + self::$tplOverride = CE\apply_filters('template_include', self::$tplOverride); + + if (strrpos(self::$tplOverride, 'layout-canvas') !== false) { + empty($desc) or $this->context->smarty->assign('ce_desc', $desc); + } else { + foreach ($themes as $theme_type => $id_ce_theme) { + empty($id_ce_theme) or $this->context->smarty->assign( + self::getThemeVarName($theme_type), + self::renderTheme( + new CE\UId($id_ce_theme, CE\UId::THEME, $this->context->language->id, $this->context->shop->id) + ) + ); + } + } + CE\UId::$_ID = $uid; + + return self::$tplOverride; + } + + protected function filterBodyClasses($id_ce_theme = 0) + { + $body_classes = &$this->context->smarty->tpl_vars['page']->value['body_classes']; + + if ($id_ce_theme) { + $body_classes['ce-theme'] = 1; + $body_classes["ce-theme-$id_ce_theme"] = 1; + } else { + $body_classes['elementor-page'] = 1; + $body_classes['elementor-page-' . CE\get_the_ID()->toDefault()] = 1; + } + } + + protected function displayMaintenancePage() + { + Configuration::set('PS_SHOP_ENABLE', false); + Configuration::set('PS_MAINTENANCE_IP', ''); + + $displayMaintenancePage = new ReflectionMethod($this->context->controller, 'displayMaintenancePage'); + $displayMaintenancePage->setAccessible(true); + $displayMaintenancePage->invoke($this->context->controller); + } + + public function hookDisplayMaintenance($params = []) + { + if (self::getPreviewUId(false)) { + http_response_code(200); + header_remove('Retry-After'); + } else { + $this->hookDisplayHeader(); + } + + CE\add_filter('the_content', function () { + $uid = CE\get_the_ID(); + ${'this'}->context->smarty->assign('ce_content', new CEContent($uid->id, $uid->id_lang, $uid->id_shop)); + + CE\remove_all_filters('the_content'); + }, 0); + + if (!$maintenance = $this->renderContent('displayMaintenance', $params)) { + return; + } + self::$controller->registerJavascript('jquery', 'js/jquery/jquery-1.11.0.min.js'); + + $this->context->smarty->assign([ + 'iso_code' => $this->context->language->iso_code, + 'favicon' => Configuration::get('PS_FAVICON'), + 'favicon_update_time' => Configuration::get('PS_IMG_UPDATE_TIME'), + ]); + return $maintenance; + } + + public function hookDisplayFooterProduct($params = []) + { + return $this->renderContent('displayFooterProduct', $params); + } + + public function __call($method, $args) + { + if (stripos($method, 'hookActionObject') === 0 && stripos($method, 'DeleteAfter') !== false) { + call_user_func_array([$this, 'hookActionObjectDeleteAfter'], $args); + } elseif (stripos($method, 'hook') === 0) { + // render hook only after Header init or if it's Home + if (null !== self::$tplOverride || !strcasecmp($method, 'hookDisplayHome')) { + return $this->renderContent(Tools::substr($method, 4), $args); + } + } else { + throw new Exception('Can not find method: ' . $method); + } + } + + public function renderContent($hook_name = null) + { + if (!$hook_name) { + return; + } + $out = ''; + $rows = CEContent::getIdsByHook( + $hook_name, + $id_lang = $this->context->language->id, + $id_shop = $this->context->shop->id, + Tools::getValue('id_product', 0), + self::getPreviewUId() + ); + if ($rows) { + $uid = CE\UId::$_ID; + + foreach ($rows as $row) { + CE\UId::$_ID = new CE\UId($row['id'], CE\UId::CONTENT, $id_lang, $id_shop); + + $out .= CE\apply_filters('the_content', ''); + } + CE\UId::$_ID = $uid; + } + return $out; + } + + public static function renderTheme($uid) + { + CE\UId::$_ID = $uid; + + return CE\apply_filters('the_content', ''); + } + + public function registerHook($hook_name, $shop_list = null, $position = null) + { + $res = parent::registerHook($hook_name, $shop_list); + + if ($res && is_numeric($position)) { + $this->updatePosition(Hook::getIdByName($hook_name), 0, $position); + } + return $res; + } + + public function hookCETemplate($params = []) + { + if (empty($params['id']) || !Validate::isLoadedObject($tpl = new CETemplate($params['id'])) || !$tpl->active) { + return; + } + $uid = CE\UId::$_ID; + CE\UId::$_ID = new CE\UId($params['id'], CE\UId::TEMPLATE); + $out = CE\apply_filters('the_content', ''); + CE\UId::$_ID = $uid; + + return $out; + } + + public function hookActionObjectDeleteAfter($params = []) + { + $model = get_class($params['object']); + $id_type = CE\UId::getTypeId($model); + $id_start = sprintf('%d%02d', $params['object']->id, $id_type); + + // Delete meta data + Db::getInstance()->delete('ce_meta', "id LIKE '{$id_start}____'"); + + // Delete CSS files + array_map('unlink', glob(_CE_PATH_ . "views/css/ce/$id_start????.css", GLOB_NOSORT)); + } + + public function hookActionObjectProductDeleteAfter($params = []) + { + $this->hookActionObjectDeleteAfter($params); + + // Delete displayFooterProduct content + if ($id = CEContent::getFooterProductId($params['object']->id)) { + $content = new CEContent($id); + Validate::isLoadedObject($content) && $content->delete(); + } + } + + public function hookActionProductAdd($params = []) + { + if (isset($params['request']) && $params['request']->attributes->get('action') === 'duplicate') { + $id_product_duplicate = (int) $params['request']->attributes->get('id'); + } elseif (Tools::getIsset('duplicateproduct')) { + $id_product_duplicate = (int) Tools::getValue('id_product'); + } + + if (isset($id_product_duplicate, $params['id_product']) && + $built_list = CE\UId::getBuiltList($id_product_duplicate, CE\UId::PRODUCT) + ) { + $db = CE\Plugin::instance()->db; + $uid = new CE\UId($params['id_product'], CE\UId::PRODUCT, 0); + + foreach ($built_list as $id_shop => &$langs) { + foreach ($langs as $id_lang => $uid_from) { + $uid->id_lang = $id_lang; + $uid->id_shop = $id_shop; + + $db->copyElementorMeta($uid_from, $uid); + } + } + } + } + + protected function checkThemeChange() + { + if (!$theme = Configuration::get('CE_THEME')) { + Configuration::updateValue('CE_THEME', _THEME_NAME_); + } elseif (_THEME_NAME_ !== $theme) { + require_once _CE_PATH_ . 'classes/CEDatabase.php'; + + // register missing hooks after changing theme + foreach (CEDatabase::getHooks() as $hook) { + $this->registerHook($hook, null, 1); + } + Configuration::updateValue('CE_THEME', _THEME_NAME_); + } + } + + public static function getPreviewUId($embed = true) + { + static $res = null; + + if (null === $res && $res = Tools::getIsset('preview_id') && + $uid = CE\UId::parse(Tools::getValue('preview_id')) + ) { + $admin = $uid->getAdminController(); + $key = 'AdminBlogPosts' === $admin ? 'blogtoken' : 'adtoken'; + $res = self::hasAdminToken($admin, $key) ? $uid : false; + } + return !$embed || Tools::getIsset('ver') ? $res : false; + } + + public static function hasAdminToken($tab, $key = 'adtoken') + { + $adtoken = Tools::getAdminToken($tab . (int) Tab::getIdFromClassName($tab) . (int) Tools::getValue('id_employee')); + + return Tools::getValue($key) == $adtoken; + } + + public static function getThemeVarName($theme_type) + { + if ('product' === $theme_type && Tools::getValue('quickview')) { + return 'CE_PRODUCT_QUICK_VIEW'; + } elseif ('product' === $theme_type && Tools::getValue('miniature')) { + return 'CE_PRODUCT_MINIATURE'; + } + return 'CE_' . Tools::strtoupper(str_replace('-', '_', $theme_type)); + } + + public static function isMaintenance() + { + return !Configuration::get('PS_SHOP_ENABLE') && + !in_array(Tools::getRemoteAddr(), explode(',', Configuration::get('PS_MAINTENANCE_IP'))); + } +} diff --git a/modules/creativeelements/includes/api.php b/modules/creativeelements/includes/api.php new file mode 100644 index 00000000..5b0971e6 --- /dev/null +++ b/modules/creativeelements/includes/api.php @@ -0,0 +1,302 @@ + $timeout, + 'body' => [ + // Which API version is used. + 'api_version' => _CE_VERSION_, + // Which language to return. + 'site_lang' => get_locale(), + ], + ]); + + if (empty($response)) { + set_transient($cache_key, [], 2 * HOUR_IN_SECONDS); + + return false; + } + + $info_data = json_decode($response, true); + + if (empty($info_data) || !is_array($info_data)) { + set_transient($cache_key, [], 2 * HOUR_IN_SECONDS); + + return false; + } + + if (isset($info_data['library'], $info_data['templates'])) { + $info_data['library']['templates'] = &$info_data['templates']; + update_post_meta(0, self::LIBRARY_OPTION_KEY, $info_data['library']); + + unset($info_data['library'], $info_data['templates']); + } + + if (isset($info_data['feed'])) { + update_post_meta(0, self::FEED_OPTION_KEY, $info_data['feed']); + + unset($info_data['feed']); + } + + set_transient($cache_key, $info_data, 12 * HOUR_IN_SECONDS); + } + + return $info_data; + } + + /** + * Get upgrade notice. + * + * Retrieve the upgrade notice if one exists, or false otherwise. + * + * @since 1.0.0 + * @access public + * @static + * + * @return array|false Upgrade notice, or false none exist. + */ + public static function getUpgradeNotice() + { + $data = self::getInfoData(); + + if (empty($data['upgrade_notice'])) { + return false; + } + + return $data['upgrade_notice']; + } + + /** + * Get templates data. + * + * Retrieve the templates data from a remote server. + * + * @since 2.0.0 + * @access public + * @static + * + * @param bool $force_update Optional. Whether to force the data update or + * not. Default is false. + * + * @return array The templates data. + */ + public static function getLibraryData($force_update = false) + { + self::getInfoData($force_update); + + $library_data = get_post_meta(0, self::LIBRARY_OPTION_KEY, true); + + if (empty($library_data)) { + return []; + } + + return $library_data; + } + + /** + * Get feed data. + * + * Retrieve the feed info data from remote elementor server. + * + * @since 1.9.0 + * @access public + * @static + * + * @param bool $force_update Optional. Whether to force the data update or + * not. Default is false. + * + * @return array Feed data. + */ + public static function getFeedData($force_update = false) + { + self::getInfoData($force_update); + + $feed = get_post_meta(0, self::FEED_OPTION_KEY, true); + + if (empty($feed)) { + return []; + } + + return $feed; + } + + /** + * Get template content. + * + * Retrieve the templates content received from a remote server. + * + * @since 1.0.0 + * @access public + * @static + * + * @param int $template_id The template ID. + * + * @return array The template content. + */ + public static function getTemplateContent($template_id) + { + $url = sprintf(self::$api_get_template_content_url, $template_id); + + $body_args = [ + // Which API version is used. + 'api_version' => _CE_VERSION_, + // Which language to return. + 'site_lang' => get_locale(), + ]; + + /** + * API: Template body args. + * + * Filters the body arguments send with the GET request when fetching the content. + * + * @since 1.0.0 + * + * @param array $body_args Body arguments. + */ + $body_args = apply_filters('elementor/api/get_templates/body_args', $body_args); + + $response = wp_remote_get($url, [ + 'timeout' => 40, + 'body' => $body_args, + ]); + + if (empty($response)) { + return $response; + } + + $template_content = json_decode($response, true); + /** + * API: Template content. + * + * Filters the remote template content. + * + * @since 2.5.0 + * + * @param array $template_content Template content. + */ + $template_content = apply_filters('elementor/api/get_templates/content', $template_content); + + if (isset($template_content['error'])) { + return new WPError('response_error', $template_content['error']); + } + + if (empty($template_content['data']) && empty($template_content['content'])) { + return new WPError('template_data_error', 'An invalid data was returned.'); + } + + return $template_content; + } + + // public static function sendFeedback($feedback_key, $feedback_text) + + /** + * Ajax reset API data. + * + * Reset Elementor library API data using an ajax call. + * + * @since 1.0.0 + * @access public + * @static + */ + public static function ajaxResetApiData() + { + check_ajax_referer('elementor_reset_library', '_nonce'); + + self::getInfoData(true); + + wp_send_json_success(); + } + + /** + * Init. + * + * Initialize Elementor API. + * + * @since 1.0.0 + * @access public + * @static + */ + public static function init() + { + add_action('wp_ajax_elementor_reset_library', [__CLASS__, 'ajax_reset_api_data']); + } +} diff --git a/modules/creativeelements/includes/autoloader.php b/modules/creativeelements/includes/autoloader.php new file mode 100644 index 00000000..b7e414a2 --- /dev/null +++ b/modules/creativeelements/includes/autoloader.php @@ -0,0 +1,279 @@ + 'includes/api.php', + 'BaseControl' => 'includes/controls/base.php', + 'BaseDataControl' => 'includes/controls/base-data.php', + 'BaseUIControl' => 'includes/controls/base-ui.php', + 'Conditions' => 'includes/conditions.php', + 'ControlsManager' => 'includes/managers/controls.php', + 'ControlsStack' => 'includes/base/controls-stack.php', + 'DB' => 'includes/db.php', + 'Editor' => 'includes/editor.php', + 'ElementsManager' => 'includes/managers/elements.php', + 'Embed' => 'includes/embed.php', + 'Fonts' => 'includes/fonts.php', + 'Frontend' => 'includes/frontend.php', + 'GroupControlBase' => 'includes/controls/groups/base.php', + 'GroupControlInterface' => 'includes/interfaces/group-control.php', + 'Heartbeat' => 'includes/heartbeat.php', + // 'ImagesManager' => 'includes/managers/image.php', + // 'PostsCSSManager' => 'includes/managers/css-files.php', + 'Preview' => 'includes/preview.php', + 'SchemeBase' => 'includes/schemes/base.php', + 'SchemeColor' => 'includes/schemes/color.php', + 'SchemeColorPicker' => 'includes/schemes/color-picker.php', + 'SchemeTypography' => 'includes/schemes/typography.php', + 'SchemeInterface' => 'includes/interfaces/scheme.php', + 'SchemesManager' => 'includes/managers/schemes.php', + 'Shapes' => 'includes/shapes.php', + 'SkinsManager' => 'includes/managers/skins.php', + 'Stylesheet' => 'includes/stylesheet.php', + 'TemplateLibraryXClassesXImportImages' => 'includes/template-library/classes/class-import-images.php', + 'TemplateLibraryXManager' => 'includes/template-library/manager.php', + 'TemplateLibraryXSourceBase' => 'includes/template-library/sources/base.php', + 'TemplateLibraryXSourceLocal' => 'includes/template-library/sources/local.php', + 'TemplateLibraryXSourceRemote' => 'includes/template-library/sources/remote.php', + 'User' => 'includes/user.php', + 'Utils' => 'includes/utils.php', + 'WidgetsManager' => 'includes/managers/widgets.php', + ]; + + $controls_names = ControlsManager::getControlsNames(); + + $controls_names = array_merge($controls_names, [ + 'base_multiple', + 'base_units', + ]); + + foreach ($controls_names as $control_name) { + $class_name = 'Control' . self::normalizeClassName($control_name, '_'); + + self::$classes_map[$class_name] = 'includes/controls/' . str_replace('_', '-', $control_name) . '.php'; + } + + $controls_groups_names = ControlsManager::getGroupsNames(); + + foreach ($controls_groups_names as $group_name) { + $class_name = 'GroupControl' . self::normalizeClassName(str_replace('-', '_', $group_name), '_'); + + self::$classes_map[$class_name] = 'includes/controls/groups/' . $group_name . '.php'; + } + } + + /** + * Normalize Class Name + * + * Used to convert control names to class name, + * a ucwords polyfill for php versions not supporting delimiter parameter + * reference : https://github.com/elementor/elementor/issues/7310#issuecomment-469593385 + * + * @param $string + * @param string $delimiter + * + * @todo Remove once we bump minimum php version to 5.6 + * @return mixed + */ + private static function normalizeClassName($string, $delimiter = ' ') + { + return str_replace(' ', '', ucwords(str_replace($delimiter, ' ', $string))); + } + + private static function initClassesAliases() + { + self::$classes_aliases = [ + 'CSSFile' => [ + 'replacement' => 'CoreXFilesXCSSXBase', + 'version' => '2.1.0', + ], + 'GlobalCSSFile' => [ + 'replacement' => 'CoreXFilesXCSSXGlobalCSS', + 'version' => '2.1.0', + ], + 'PostCSSFile' => [ + 'replacement' => 'CoreXFilesXCSSXPost', + 'version' => '2.1.0', + ], + 'PostsCSSManager' => [ + 'replacement' => 'CoreXFilesXManager', + 'version' => '2.1.0', + ], + 'PostPreviewCSS' => [ + 'replacement' => 'CoreXFilesXCSSXPostPreview', + 'version' => '2.1.0', + ], + 'Responsive' => [ + 'replacement' => 'CoreXResponsiveXResponsive', + 'version' => '2.1.0', + ], + 'Ajax' => [ + 'replacement' => 'CoreXCommonXModulesXAjaxXModule', + 'version' => '2.3.0', + ], + ]; + } + + /** + * Load class. + * + * For a given class name, require the class file. + * + * @since 1.6.0 + * @access private + * @static + * + * @param string $relative_class_name Class name. + */ + private static function loadClass($relative_class_name) + { + $classes_map = self::getClassesMap(); + + if (isset($classes_map[$relative_class_name])) { + $filename = _CE_PATH_ . '/' . $classes_map[$relative_class_name]; + } else { + $filename = call_user_func( + 'strtolower', + preg_replace( + ['/X/', '/([a-z])([A-Z])/'], + ['/', '$1-$2'], + $relative_class_name + ) + ); + + $filename = _CE_PATH_ . $filename . '.php'; + } + + if (is_readable($filename)) { + require $filename; + } + } + + /** + * Autoload. + * + * For a given class, check if it exist and load it. + * + * @since 1.6.0 + * @access private + * @static + * + * @param string $class Class name. + */ + private static function autoload($class) + { + if (0 !== strpos($class, __NAMESPACE__ . '\\')) { + return; + } + + $relative_class_name = preg_replace('/^' . __NAMESPACE__ . '\\\/', '', $class); + + $classes_aliases = self::getClassesAliases(); + + $has_class_alias = isset($classes_aliases[$relative_class_name]); + + // Backward Compatibility: Save old class name for set an alias after the new class is loaded + if ($has_class_alias) { + $alias_data = $classes_aliases[$relative_class_name]; + + $relative_class_name = $alias_data['replacement']; + } + + $final_class_name = __NAMESPACE__ . '\\' . $relative_class_name; + + if (!class_exists($final_class_name)) { + self::loadClass($relative_class_name); + } + } +} diff --git a/modules/creativeelements/includes/base/controls-stack.php b/modules/creativeelements/includes/base/controls-stack.php new file mode 100644 index 00000000..ffa07419 --- /dev/null +++ b/modules/creativeelements/includes/base/controls-stack.php @@ -0,0 +1,2015 @@ +getName(); + } + + /** + * Get element ID. + * + * Retrieve the element generic ID. + * + * @since 1.4.0 + * @access public + * + * @return string The ID. + */ + public function getId() + { + return $this->id; + } + + /** + * Get element ID. + * + * Retrieve the element generic ID as integer. + * + * @since 1.8.0 + * @access public + * + * @return string The converted ID. + */ + public function getIdInt() + { + return hexdec($this->id); + } + + /** + * Get the type. + * + * Retrieve the type, e.g. 'stack', 'section', 'widget' etc. + * + * @since 1.4.0 + * @access public + * @static + * + * @return string The type. + */ + public static function getType() + { + return 'stack'; + } + + /** + * Get items. + * + * Utility method that receives an array with a needle and returns all the + * items that match the needle. If needle is not defined the entire haystack + * will be returned. + * + * @since 1.4.0 + * @deprecated 2.3.0 Use `ControlsStack::getItems()` instead + * @access protected + * @static + * + * @param array $haystack An array of items. + * @param string $needle Optional. Needle. Default is null. + * + * @return mixed The whole haystack or the needle from the haystack when requested. + */ + protected static function _getItems(array $haystack, $needle = null) + { + if ($needle) { + return isset($haystack[$needle]) ? $haystack[$needle] : null; + } + + return $haystack; + } + + /** + * Get current section. + * + * When inserting new controls, this method will retrieve the current section. + * + * @since 1.7.1 + * @access public + * + * @return null|array Current section. + */ + public function getCurrentSection() + { + return $this->current_section; + } + + /** + * Get current tab. + * + * When inserting new controls, this method will retrieve the current tab. + * + * @since 1.7.1 + * @access public + * + * @return null|array Current tab. + */ + public function getCurrentTab() + { + return $this->current_tab; + } + + /** + * Get controls. + * + * Retrieve all the controls or, when requested, a specific control. + * + * @since 1.4.0 + * @access public + * + * @param string $control_id The ID of the requested control. Optional field, + * when set it will return a specific control. + * Default is null. + * + * @return mixed Controls list. + */ + public function getControls($control_id = null) + { + return self::getItems($this->getStack()['controls'], $control_id); + } + + /** + * Get active controls. + * + * Retrieve an array of active controls that meet the condition field. + * + * If specific controls was given as a parameter, retrieve active controls + * from that list, otherwise check for all the controls available. + * + * @since 1.4.0 + * @since 2.0.9 Added the `controls` and the `settings` parameters. + * @access public + * + * @param array $controls Optional. An array of controls. Default is null. + * @param array $settings Optional. Controls settings. Default is null. + * + * @return array Active controls. + */ + public function getActiveControls(array $controls = null, array $settings = null) + { + if (!$controls) { + $controls = $this->getControls(); + } + + if (!$settings) { + $settings = $this->getControlsSettings(); + } + + $active_controls = array_reduce( + array_keys($controls), + function ($active_controls, $control_key) use ($controls, $settings) { + $control = $controls[$control_key]; + + if (${'this'}->isControlVisible($control, $settings)) { + $active_controls[$control_key] = $control; + } + + return $active_controls; + }, + [] + ); + + return $active_controls; + } + + /** + * Get controls settings. + * + * Retrieve the settings for all the controls that represent them. + * + * @since 1.5.0 + * @access public + * + * @return array Controls settings. + */ + public function getControlsSettings() + { + return array_intersect_key($this->getSettings(), $this->getControls()); + } + + /** + * Add new control to stack. + * + * Register a single control to allow the user to set/update data. + * + * This method should be used inside `_register_controls()`. + * + * @since 1.4.0 + * @access public + * + * @param string $id Control ID. + * @param array $args Control arguments. + * @param array $options Optional. Control options. Default is an empty array. + * + * @return bool True if control added, False otherwise. + */ + public function addControl($id, array $args, $options = []) + { + $default_options = [ + 'overwrite' => false, + 'position' => null, + ]; + + $options = array_merge($default_options, $options); + + if ($options['position']) { + $this->startInjection($options['position']); + } + + if ($this->injection_point) { + $options['index'] = $this->injection_point['index']++; + } + + if (empty($args['type']) || $args['type'] !== ControlsManager::SECTION) { + $target_section_args = $this->current_section; + + $target_tab = $this->current_tab; + + if ($this->injection_point) { + $target_section_args = $this->injection_point['section']; + + if (!empty($this->injection_point['tab'])) { + $target_tab = $this->injection_point['tab']; + } + } + + if (null !== $target_section_args) { + if (!empty($args['section']) || !empty($args['tab'])) { + _doing_it_wrong(sprintf('%s::%s', get_called_class(), __FUNCTION__), sprintf('Cannot redeclare control with `tab` or `section` args inside section "%s".', $id), '1.0.0'); + } + + $args = array_replace_recursive($target_section_args, $args); + + if (null !== $target_tab) { + $args = array_replace_recursive($target_tab, $args); + } + } elseif (empty($args['section']) && (!$options['overwrite'] || is_wp_error(Plugin::$instance->controls_manager->getControlFromStack($this->getUniqueName(), $id)))) { + die(sprintf('%s::%s: Cannot add a control outside of a section (use `startControlsSection`).', get_called_class(), __FUNCTION__)); + } + } + + if ($options['position']) { + $this->endInjection(); + } + + unset($options['position']); + + if ($this->current_popover && !$this->current_popover['initialized']) { + $args['popover'] = [ + 'start' => true, + ]; + + $this->current_popover['initialized'] = true; + } + + return Plugin::$instance->controls_manager->addControlToStack($this, $id, $args, $options); + } + + /** + * Remove control from stack. + * + * Unregister an existing control and remove it from the stack. + * + * @since 1.4.0 + * @access public + * + * @param string $control_id Control ID. + * + * @return bool|WPError + */ + public function removeControl($control_id) + { + return Plugin::$instance->controls_manager->removeControlFromStack($this->getUniqueName(), $control_id); + } + + /** + * Update control in stack. + * + * Change the value of an existing control in the stack. When you add new + * control you set the `$args` parameter, this method allows you to update + * the arguments by passing new data. + * + * @since 1.4.0 + * @since 1.8.1 New `$options` parameter added. + * + * @access public + * + * @param string $control_id Control ID. + * @param array $args Control arguments. Only the new fields you want + * to update. + * @param array $options Optional. Some additional options. Default is + * an empty array. + * + * @return bool + */ + public function updateControl($control_id, array $args, array $options = []) + { + $is_updated = Plugin::$instance->controls_manager->updateControlInStack($this, $control_id, $args, $options); + + if (!$is_updated) { + return false; + } + + $control = $this->getControls($control_id); + + if (ControlsManager::SECTION === $control['type']) { + $section_args = $this->getSectionArgs($control_id); + + $section_controls = $this->getSectionControls($control_id); + + foreach ($section_controls as $section_control_id => $section_control) { + $this->updateControl($section_control_id, $section_args, $options); + } + } + + return true; + } + + /** + * Get stack. + * + * Retrieve the stack of controls. + * + * @since 1.9.2 + * @access public + * + * @return array Stack of controls. + */ + public function getStack() + { + $stack = Plugin::$instance->controls_manager->getElementStack($this); + + if (null === $stack) { + $this->initControls(); + + return Plugin::$instance->controls_manager->getElementStack($this); + } + + return $stack; + } + + /** + * Get position information. + * + * Retrieve the position while injecting data, based on the element type. + * + * @since 1.7.0 + * @access public + * + * @param array $position { + * The injection position. + * + * @type string $type Injection type, either `control` or `section`. + * Default is `control`. + * @type string $at Where to inject. If `$type` is `control` accepts + * `before` and `after`. If `$type` is `section` + * accepts `start` and `end`. Default values based on + * the `type`. + * @type string $of Control/Section ID. + * @type array $fallback Fallback injection position. When the position is + * not found it will try to fetch the fallback + * position. + * } + * + * @return bool|array Position info. + */ + final public function getPositionInfo(array $position) + { + $default_position = [ + 'type' => 'control', + 'at' => 'after', + ]; + + if (!empty($position['type']) && 'section' === $position['type']) { + $default_position['at'] = 'end'; + } + + $position = array_merge($default_position, $position); + + if ('control' === $position['type'] && in_array($position['at'], ['start', 'end'], true) || + 'section' === $position['type'] && in_array($position['at'], ['before', 'after'], true) + ) { + _doing_it_wrong(sprintf('%s::%s', get_called_class(), __FUNCTION__), 'Invalid position arguments. Use `before` / `after` for control or `start` / `end` for section.', '1.7.0'); + + return false; + } + + $target_control_index = $this->getControlIndex($position['of']); + + if (false === $target_control_index) { + if (!empty($position['fallback'])) { + return $this->getPositionInfo($position['fallback']); + } + + return false; + } + + $target_section_index = $target_control_index; + + $registered_controls = $this->getControls(); + + $controls_keys = array_keys($registered_controls); + + while (ControlsManager::SECTION !== $registered_controls[$controls_keys[$target_section_index]]['type']) { + $target_section_index--; + } + + if ('section' === $position['type']) { + $target_control_index++; + + if ('end' === $position['at']) { + while (ControlsManager::SECTION !== $registered_controls[$controls_keys[$target_control_index]]['type']) { + if (++$target_control_index >= count($registered_controls)) { + break; + } + } + } + } + + $target_control = $registered_controls[$controls_keys[$target_control_index]]; + + if ('after' === $position['at']) { + $target_control_index++; + } + + $section_id = $registered_controls[$controls_keys[$target_section_index]]['name']; + + $position_info = [ + 'index' => $target_control_index, + 'section' => $this->getSectionArgs($section_id), + ]; + + if (!empty($target_control['tabs_wrapper'])) { + $position_info['tab'] = [ + 'tabs_wrapper' => $target_control['tabs_wrapper'], + 'inner_tab' => $target_control['inner_tab'], + ]; + } + + return $position_info; + } + + /** + * Get control key. + * + * Retrieve the key of the control based on a given index of the control. + * + * @since 1.9.2 + * @access public + * + * @param string $control_index Control index. + * + * @return int Control key. + */ + final public function getControlKey($control_index) + { + $registered_controls = $this->getControls(); + + $controls_keys = array_keys($registered_controls); + + return $controls_keys[$control_index]; + } + + /** + * Get control index. + * + * Retrieve the index of the control based on a given key of the control. + * + * @since 1.7.6 + * @access public + * + * @param string $control_key Control key. + * + * @return false|int Control index. + */ + final public function getControlIndex($control_key) + { + $controls = $this->getControls(); + + $controls_keys = array_keys($controls); + + return array_search($control_key, $controls_keys); + } + + /** + * Get section controls. + * + * Retrieve all controls under a specific section. + * + * @since 1.7.6 + * @access public + * + * @param string $section_id Section ID. + * + * @return array Section controls + */ + final public function getSectionControls($section_id) + { + $section_index = $this->getControlIndex($section_id); + + $section_controls = []; + + $registered_controls = $this->getControls(); + + $controls_keys = array_keys($registered_controls); + + while (true) { + $section_index++; + + if (!isset($controls_keys[$section_index])) { + break; + } + + $control_key = $controls_keys[$section_index]; + + if (ControlsManager::SECTION === $registered_controls[$control_key]['type']) { + break; + } + + $section_controls[$control_key] = $registered_controls[$control_key]; + }; + + return $section_controls; + } + + /** + * Add new group control to stack. + * + * Register a set of related controls grouped together as a single unified + * control. For example grouping together like typography controls into a + * single, easy-to-use control. + * + * @since 1.4.0 + * @access public + * + * @param string $group_name Group control name. + * @param array $args Group control arguments. Default is an empty array. + * @param array $options Optional. Group control options. Default is an + * empty array. + */ + final public function addGroupControl($group_name, array $args = [], array $options = []) + { + $group = Plugin::$instance->controls_manager->getControlGroups($group_name); + + if (!$group) { + die(sprintf('%s::%s: Group "%s" not found.', get_called_class(), __FUNCTION__, $group_name)); + } + + $group->addControls($this, $args, $options); + } + + /** + * Get scheme controls. + * + * Retrieve all the controls that use schemes. + * + * @since 1.4.0 + * @access public + * + * @return array Scheme controls. + */ + final public function getSchemeControls() + { + $enabled_schemes = SchemesManager::getEnabledSchemes(); + + return array_filter( + $this->getControls(), + function ($control) use ($enabled_schemes) { + return (!empty($control['scheme']) && in_array($control['scheme']['type'], $enabled_schemes)); + } + ); + } + + /** + * Get style controls. + * + * Retrieve style controls for all active controls or, when requested, from + * a specific set of controls. + * + * @since 1.4.0 + * @since 2.0.9 Added the `settings` parameter. + * @access public + * + * @param array $controls Optional. Controls list. Default is null. + * @param array $settings Optional. Controls settings. Default is null. + * + * @return array Style controls. + */ + final public function getStyleControls(array $controls = null, array $settings = null) + { + $controls = $this->getActiveControls($controls, $settings); + + $style_controls = []; + + foreach ($controls as $control_name => $control) { + $control_obj = Plugin::$instance->controls_manager->getControl($control['type']); + + if (!$control_obj instanceof BaseDataControl) { + continue; + } + + $control = array_merge($control_obj->getSettings(), $control); + + if (ControlsManager::REPEATER === $control['type']) { + $style_fields = []; + + foreach ($this->getSettings($control_name) as $item) { + $style_fields[] = $this->getStyleControls($control['fields'], $item); + } + + $control['style_fields'] = $style_fields; + } + + if (!empty($control['selectors']) || !empty($control['dynamic']) || !empty($control['style_fields'])) { + $style_controls[$control_name] = $control; + } + } + + return $style_controls; + } + + /** + * Get tabs controls. + * + * Retrieve all the tabs assigned to the control. + * + * @since 1.4.0 + * @access public + * + * @return array Tabs controls. + */ + final public function getTabsControls() + { + return $this->getStack()['tabs']; + } + + /** + * Add new responsive control to stack. + * + * Register a set of controls to allow editing based on user screen size. + * This method registers three screen sizes: Desktop, Tablet and Mobile. + * + * @since 1.4.0 + * @access public + * + * @param string $id Responsive control ID. + * @param array $args Responsive control arguments. + * @param array $options Optional. Responsive control options. Default is + * an empty array. + */ + final public function addResponsiveControl($id, array $args, $options = []) + { + $args['responsive'] = []; + + $devices = [ + self::RESPONSIVE_DESKTOP, + self::RESPONSIVE_TABLET, + self::RESPONSIVE_MOBILE, + ]; + + if (isset($args['devices'])) { + $devices = array_intersect($devices, $args['devices']); + + $args['responsive']['devices'] = $devices; + + unset($args['devices']); + } + + if (isset($args['default'])) { + $args['desktop_default'] = $args['default']; + + unset($args['default']); + } + + foreach ($devices as $device_name) { + $control_args = $args; + + if (isset($control_args['device_args'])) { + if (!empty($control_args['device_args'][$device_name])) { + $control_args = array_merge($control_args, $control_args['device_args'][$device_name]); + } + + unset($control_args['device_args']); + } + + if (!empty($args['prefix_class'])) { + $device_to_replace = self::RESPONSIVE_DESKTOP === $device_name ? '' : '-' . $device_name; + + $control_args['prefix_class'] = sprintf($args['prefix_class'], $device_to_replace); + } + + $control_args['responsive']['max'] = $device_name; + + if (isset($control_args['min_affected_device'])) { + if (!empty($control_args['min_affected_device'][$device_name])) { + $control_args['responsive']['min'] = $control_args['min_affected_device'][$device_name]; + } + + unset($control_args['min_affected_device']); + } + + if (isset($control_args[$device_name . '_default'])) { + $control_args['default'] = $control_args[$device_name . '_default']; + } + + unset($control_args['desktop_default']); + unset($control_args['tablet_default']); + unset($control_args['mobile_default']); + + $id_suffix = self::RESPONSIVE_DESKTOP === $device_name ? '' : '_' . $device_name; + + if (!empty($options['overwrite'])) { + $this->updateControl($id . $id_suffix, $control_args, [ + 'recursive' => !empty($options['recursive']), + ]); + } else { + $this->addControl($id . $id_suffix, $control_args, $options); + } + } + } + + /** + * Update responsive control in stack. + * + * Change the value of an existing responsive control in the stack. When you + * add new control you set the `$args` parameter, this method allows you to + * update the arguments by passing new data. + * + * @since 1.4.0 + * @access public + * + * @param string $id Responsive control ID. + * @param array $args Responsive control arguments. + * @param array $options Optional. Additional options. + */ + final public function updateResponsiveControl($id, array $args, array $options = []) + { + $this->addResponsiveControl($id, $args, [ + 'overwrite' => true, + 'recursive' => !empty($options['recursive']), + ]); + } + + /** + * Remove responsive control from stack. + * + * Unregister an existing responsive control and remove it from the stack. + * + * @since 1.4.0 + * @access public + * + * @param string $id Responsive control ID. + */ + final public function removeResponsiveControl($id) + { + $devices = [ + self::RESPONSIVE_DESKTOP, + self::RESPONSIVE_TABLET, + self::RESPONSIVE_MOBILE, + ]; + + foreach ($devices as $device_name) { + $id_suffix = self::RESPONSIVE_DESKTOP === $device_name ? '' : '_' . $device_name; + + $this->removeControl($id . $id_suffix); + } + } + + /** + * Get class name. + * + * Retrieve the name of the current class. + * + * @since 1.4.0 + * @access public + * + * @return string Class name. + */ + final public function getClassName() + { + return get_called_class(); + } + + /** + * Get the config. + * + * Retrieve the config or, if non set, use the initial config. + * + * @since 1.4.0 + * @access public + * + * @return array|null The config. + */ + final public function getConfig() + { + if (null === $this->config) { + $this->config = $this->_getInitialConfig(); + } + + return $this->config; + } + + /** + * Get frontend settings keys. + * + * Retrieve settings keys for all frontend controls. + * + * @since 1.6.0 + * @access public + * + * @return array Settings keys for each control. + */ + final public function getFrontendSettingsKeys() + { + $controls = []; + + foreach ($this->getControls() as $control) { + if (!empty($control['frontend_available'])) { + $controls[] = $control['name']; + } + } + + return $controls; + } + + /** + * Get controls pointer index. + * + * Retrieve pointer index where the next control should be added. + * + * While using injection point, it will return the injection point index. + * Otherwise index of the last control plus one. + * + * @since 1.9.2 + * @access public + * + * @return int Controls pointer index. + */ + public function getPointerIndex() + { + if (null !== $this->injection_point) { + return $this->injection_point['index']; + } + + return count($this->getControls()); + } + + /** + * Get the raw data. + * + * Retrieve all the items or, when requested, a specific item. + * + * @since 1.4.0 + * @access public + * + * @param string $item Optional. The requested item. Default is null. + * + * @return mixed The raw data. + */ + public function getData($item = null) + { + if (!$this->settings_sanitized && (!$item || 'settings' === $item)) { + $this->data['settings'] = $this->sanitizeSettings($this->data['settings']); + + $this->settings_sanitized = true; + } + + return self::getItems($this->data, $item); + } + + /** + * @since 2.0.14 + * @access public + */ + public function getParsedDynamicSettings($setting = null) + { + if (null === $this->parsed_dynamic_settings) { + $this->parsed_dynamic_settings = $this->parseDynamicSettings($this->getSettings()); + } + + return self::getItems($this->parsed_dynamic_settings, $setting); + } + + /** + * Get active settings. + * + * Retrieve the settings from all the active controls. + * + * @since 1.4.0 + * @since 2.1.0 Added the `controls` and the `settings` parameters. + * @access public + * + * @param array $controls Optional. An array of controls. Default is null. + * @param array $settings Optional. Controls settings. Default is null. + * + * @return array Active settings. + */ + public function getActiveSettings($settings = null, $controls = null) + { + $is_first_request = !$settings && !$this->active_settings; + + if (!$settings) { + if ($this->active_settings) { + return $this->active_settings; + } + + $settings = $this->getControlsSettings(); + + $controls = $this->getControls(); + } + + $active_settings = []; + + foreach ($settings as $setting_key => $setting) { + if (!isset($controls[$setting_key])) { + $active_settings[$setting_key] = $setting; + + continue; + } + + $control = $controls[$setting_key]; + + if ($this->isControlVisible($control, $settings)) { + if (ControlsManager::REPEATER === $control['type']) { + foreach ($setting as &$item) { + $item = $this->getActiveSettings($item, $control['fields']); + } + } + + $active_settings[$setting_key] = $setting; + } else { + $active_settings[$setting_key] = null; + } + } + + if ($is_first_request) { + $this->active_settings = $active_settings; + } + + return $active_settings; + } + + /** + * Get settings for display. + * + * Retrieve all the settings or, when requested, a specific setting for display. + * + * Unlike `getSettings()` method, this method retrieves only active settings + * that passed all the conditions, rendered all the shortcodes and all the dynamic + * tags. + * + * @since 2.0.0 + * @access public + * + * @param string $setting_key Optional. The key of the requested setting. + * Default is null. + * + * @return mixed The settings. + */ + public function getSettingsForDisplay($setting_key = null) + { + if (!$this->parsed_active_settings) { + $this->parsed_active_settings = $this->getActiveSettings($this->getParsedDynamicSettings(), $this->getControls()); + } + + return self::getItems($this->parsed_active_settings, $setting_key); + } + + /** + * Parse dynamic settings. + * + * Retrieve the settings with rendered dynamic tags. + * + * @since 2.0.0 + * @access public + * + * @param array $settings Optional. The requested setting. Default is null. + * @param array $controls Optional. The controls array. Default is null. + * @param array $all_settings Optional. All the settings. Default is null. + * + * @return array The settings with rendered dynamic tags. + */ + public function parseDynamicSettings($settings, $controls = null, $all_settings = null) + { + if (null === $all_settings) { + $all_settings = $this->getSettings(); + } + + if (null === $controls) { + $controls = $this->getControls(); + } + + foreach ($controls as $control) { + $control_name = $control['name']; + $control_obj = Plugin::$instance->controls_manager->getControl($control['type']); + + if (!$control_obj instanceof BaseDataControl) { + continue; + } + + if ('repeater' === $control_obj->getType()) { + foreach ($settings[$control_name] as &$field) { + $field = $this->parseDynamicSettings($field, $control['fields'], $field); + } + + continue; + } + + if (empty($control['dynamic']) || !isset($all_settings['__dynamic__'][$control_name])) { + continue; + } + + $dynamic_settings = array_merge($control_obj->getSettings('dynamic'), $control['dynamic']); + + if (!empty($dynamic_settings['active']) && !empty($all_settings['__dynamic__'][$control_name])) { + $parsed_value = $control_obj->parseTags($all_settings['__dynamic__'][$control_name], $dynamic_settings); + + $dynamic_property = !empty($dynamic_settings['property']) ? $dynamic_settings['property'] : null; + + if ($dynamic_property) { + $settings[$control_name][$dynamic_property] = $parsed_value; + } else { + $settings[$control_name] = $parsed_value; + } + } + } + + return $settings; + } + + /** + * Get frontend settings. + * + * Retrieve the settings for all frontend controls. + * + * @since 1.6.0 + * @access public + * + * @return array Frontend settings. + */ + public function getFrontendSettings() + { + $frontend_settings = array_intersect_key($this->getActiveSettings(), array_flip($this->getFrontendSettingsKeys())); + + foreach ($frontend_settings as $key => $setting) { + if (in_array($setting, [null, ''], true)) { + unset($frontend_settings[$key]); + } + } + + return $frontend_settings; + } + + /** + * Filter controls settings. + * + * Receives controls, settings and a callback function to filter the settings by + * and returns filtered settings. + * + * @since 1.5.0 + * @access public + * + * @param callable $callback The callback function. + * @param array $settings Optional. Control settings. Default is an empty + * array. + * @param array $controls Optional. Controls list. Default is an empty + * array. + * + * @return array Filtered settings. + */ + public function filterControlsSettings(callable $callback, array $settings = [], array $controls = []) + { + if (!$settings) { + $settings = $this->getSettings(); + } + + if (!$controls) { + $controls = $this->getControls(); + } + + return array_reduce( + array_keys($settings), + function ($filtered_settings, $setting_key) use ($controls, $settings, $callback) { + if (isset($controls[$setting_key])) { + $result = $callback($settings[$setting_key], $controls[$setting_key]); + + if (null !== $result) { + $filtered_settings[$setting_key] = $result; + } + } + + return $filtered_settings; + }, + [] + ); + } + + /** + * Whether the control is visible or not. + * + * Used to determine whether the control is visible or not. + * + * @since 1.4.0 + * @access public + * + * @param array $control The control. + * @param array $values Optional. Condition values. Default is null. + * + * @return bool Whether the control is visible. + */ + public function isControlVisible($control, $values = null) + { + if (null === $values) { + $values = $this->getSettings(); + } + + if (!empty($control['conditions'])) { + return Conditions::check($control['conditions'], $values); + } + + if (empty($control['condition'])) { + return true; + } + + foreach ($control['condition'] as $condition_key => $condition_value) { + preg_match('/([a-z_0-9]+)(?:\[([a-z_]+)])?(!?)$/i', $condition_key, $condition_key_parts); + + $pure_condition_key = $condition_key_parts[1]; + $condition_sub_key = $condition_key_parts[2]; + $is_negative_condition = !!$condition_key_parts[3]; + + if (!isset($values[$pure_condition_key]) || null === $values[$pure_condition_key]) { + return false; + } + + $instance_value = $values[$pure_condition_key]; + + if ($condition_sub_key && is_array($instance_value)) { + if (!isset($instance_value[$condition_sub_key])) { + return false; + } + + $instance_value = $instance_value[$condition_sub_key]; + } + + /** + * If the $condition_value is a non empty array - check if the $condition_value contains the $instance_value, + * If the $instance_value is a non empty array - check if the $instance_value contains the $condition_value + * otherwise check if they are equal. ( and give the ability to check if the value is an empty array ) + */ + if (is_array($condition_value) && !empty($condition_value)) { + $is_contains = in_array($instance_value, $condition_value, true); + } elseif (is_array($instance_value) && !empty($instance_value)) { + $is_contains = in_array($condition_value, $instance_value, true); + } else { + $is_contains = $instance_value === $condition_value; + } + + if ($is_negative_condition && $is_contains || !$is_negative_condition && !$is_contains) { + return false; + } + } + + return true; + } + + /** + * Start controls section. + * + * Used to add a new section of controls. When you use this method, all the + * registered controls from this point will be assigned to this section, + * until you close the section using `end_controls_section()` method. + * + * This method should be used inside `_register_controls()`. + * + * @since 1.4.0 + * @access public + * + * @param string $section_id Section ID. + * @param array $args Section arguments Optional. + */ + public function startControlsSection($section_id, array $args = []) + { + $section_name = $this->getName(); + + /** + * Before section start. + * + * Fires before Elementor section starts in the editor panel. + * + * @since 1.4.0 + * + * @param ControlsStack $this The control. + * @param string $section_id Section ID. + * @param array $args Section arguments. + */ + do_action('elementor/element/before_section_start', $this, $section_id, $args); + + /** + * Before section start. + * + * Fires before Elementor section starts in the editor panel. + * + * The dynamic portions of the hook name, `$section_name` and `$section_id`, refers to the section name and section ID, respectively. + * + * @since 1.4.0 + * + * @param ControlsStack $this The control. + * @param array $args Section arguments. + */ + do_action("elementor/element/{$section_name}/{$section_id}/before_section_start", $this, $args); + + $args['type'] = ControlsManager::SECTION; + + $this->addControl($section_id, $args); + + if (null !== $this->current_section) { + die(sprintf('Elementor: You can\'t start a section before the end of the previous section "%s".', $this->current_section['section'])); // XSS ok. + } + + $this->current_section = $this->getSectionArgs($section_id); + + if ($this->injection_point) { + $this->injection_point['section'] = $this->current_section; + } + + /** + * After section start. + * + * Fires after Elementor section starts in the editor panel. + * + * @since 1.4.0 + * + * @param ControlsStack $this The control. + * @param string $section_id Section ID. + * @param array $args Section arguments. + */ + do_action('elementor/element/after_section_start', $this, $section_id, $args); + + /** + * After section start. + * + * Fires after Elementor section starts in the editor panel. + * + * The dynamic portions of the hook name, `$section_name` and `$section_id`, refers to the section name and section ID, respectively. + * + * @since 1.4.0 + * + * @param ControlsStack $this The control. + * @param array $args Section arguments. + */ + do_action("elementor/element/{$section_name}/{$section_id}/after_section_start", $this, $args); + } + + /** + * End controls section. + * + * Used to close an existing open controls section. When you use this method + * it stops adding new controls to this section. + * + * This method should be used inside `_register_controls()`. + * + * @since 1.4.0 + * @access public + */ + public function endControlsSection() + { + $stack_name = $this->getName(); + + // Save the current section for the action. + $current_section = $this->current_section; + $section_id = $current_section['section']; + $args = [ + 'tab' => $current_section['tab'], + ]; + + /** + * Before section end. + * + * Fires before Elementor section ends in the editor panel. + * + * @since 1.4.0 + * + * @param ControlsStack $this The control. + * @param string $section_id Section ID. + * @param array $args Section arguments. + */ + do_action('elementor/element/before_section_end', $this, $section_id, $args); + + /** + * Before section end. + * + * Fires before Elementor section ends in the editor panel. + * + * The dynamic portions of the hook name, `$stack_name` and `$section_id`, refers to the stack name and section ID, respectively. + * + * @since 1.4.0 + * + * @param ControlsStack $this The control. + * @param array $args Section arguments. + */ + do_action("elementor/element/{$stack_name}/{$section_id}/before_section_end", $this, $args); + + $this->current_section = null; + + /** + * After section end. + * + * Fires after Elementor section ends in the editor panel. + * + * @since 1.4.0 + * + * @param ControlsStack $this The control. + * @param string $section_id Section ID. + * @param array $args Section arguments. + */ + do_action('elementor/element/after_section_end', $this, $section_id, $args); + + /** + * After section end. + * + * Fires after Elementor section ends in the editor panel. + * + * The dynamic portions of the hook name, `$stack_name` and `$section_id`, refers to the section name and section ID, respectively. + * + * @since 1.4.0 + * + * @param ControlsStack $this The control. + * @param array $args Section arguments. + */ + do_action("elementor/element/{$stack_name}/{$section_id}/after_section_end", $this, $args); + } + + /** + * Start controls tabs. + * + * Used to add a new set of tabs inside a section. You should use this + * method before adding new individual tabs using `start_controls_tab()`. + * Each tab added after this point will be assigned to this group of tabs, + * until you close it using `end_controls_tabs()` method. + * + * This method should be used inside `_register_controls()`. + * + * @since 1.4.0 + * @access public + * + * @param string $tabs_id Tabs ID. + * @param array $args Tabs arguments. + */ + public function startControlsTabs($tabs_id, array $args = []) + { + if (null !== $this->current_tab) { + die(sprintf('Elementor: You can\'t start tabs before the end of the previous tabs "%s".', $this->current_tab['tabs_wrapper'])); // XSS ok. + } + + $args['type'] = ControlsManager::TABS; + + $this->addControl($tabs_id, $args); + + $this->current_tab = [ + 'tabs_wrapper' => $tabs_id, + ]; + + foreach (['condition', 'conditions'] as $key) { + if (!empty($args[$key])) { + $this->current_tab[$key] = $args[$key]; + } + } + + if ($this->injection_point) { + $this->injection_point['tab'] = $this->current_tab; + } + } + + /** + * End controls tabs. + * + * Used to close an existing open controls tabs. When you use this method it + * stops adding new controls to this tabs. + * + * This method should be used inside `_register_controls()`. + * + * @since 1.4.0 + * @access public + */ + public function endControlsTabs() + { + $this->current_tab = null; + } + + /** + * Start controls tab. + * + * Used to add a new tab inside a group of tabs. Use this method before + * adding new individual tabs using `start_controls_tab()`. + * Each tab added after this point will be assigned to this group of tabs, + * until you close it using `end_controls_tab()` method. + * + * This method should be used inside `_register_controls()`. + * + * @since 1.4.0 + * @access public + * + * @param string $tab_id Tab ID. + * @param array $args Tab arguments. + */ + public function startControlsTab($tab_id, $args) + { + if (!empty($this->current_tab['inner_tab'])) { + die(sprintf('Elementor: You can\'t start a tab before the end of the previous tab "%s".', $this->current_tab['inner_tab'])); // XSS ok. + } + + $args['type'] = ControlsManager::TAB; + $args['tabs_wrapper'] = $this->current_tab['tabs_wrapper']; + + $this->addControl($tab_id, $args); + + $this->current_tab['inner_tab'] = $tab_id; + + if ($this->injection_point) { + $this->injection_point['tab']['inner_tab'] = $this->current_tab['inner_tab']; + } + } + + /** + * End controls tab. + * + * Used to close an existing open controls tab. When you use this method it + * stops adding new controls to this tab. + * + * This method should be used inside `_register_controls()`. + * + * @since 1.4.0 + * @access public + */ + public function endControlsTab() + { + unset($this->current_tab['inner_tab']); + } + + /** + * Start popover. + * + * Used to add a new set of controls in a popover. When you use this method, + * all the registered controls from this point will be assigned to this + * popover, until you close the popover using `end_popover()` method. + * + * This method should be used inside `_register_controls()`. + * + * @since 1.9.0 + * @access public + */ + final public function startPopover() + { + $this->current_popover = [ + 'initialized' => false, + ]; + } + + /** + * End popover. + * + * Used to close an existing open popover. When you use this method it stops + * adding new controls to this popover. + * + * This method should be used inside `_register_controls()`. + * + * @since 1.9.0 + * @access public + */ + final public function endPopover() + { + $this->current_popover = null; + + $last_control_key = $this->getControlKey($this->getPointerIndex() - 1); + + $args = [ + 'popover' => [ + 'end' => true, + ], + ]; + + $options = [ + 'recursive' => true, + ]; + + $this->updateControl($last_control_key, $args, $options); + } + + /** + * Print element template. + * + * Used to generate the element template on the editor. + * + * @since 2.0.0 + * @access public + */ + public function printTemplate() + { + ob_start(); + + $this->_contentTemplate(); + + $template_content = ob_get_clean(); + + $element_type = $this->getType(); + + /** + * Template content. + * + * Filters the controls stack template content before it's printed in the editor. + * + * The dynamic portion of the hook name, `$element_type`, refers to the element type. + * + * @since 1.0.0 + * + * @param string $content_template The controls stack template in the editor. + * @param ControlsStack $this The controls stack. + */ + $template_content = apply_filters("elementor/{$element_type}/print_template", $template_content, $this); + + if (empty($template_content)) { + return; + } + ?> + + injection_point) { + die('A controls injection is already opened. Please close current injection before starting a new one (use `endInjection`).'); + } + + $this->injection_point = $this->getPositionInfo($position); + } + + /** + * End injection. + * + * Used to close an existing opened injection point. + * + * When you use this method it stops adding new controls and sections to + * this point and continue to add controls to the regular position in the + * stack. + * + * @since 1.7.1 + * @access public + */ + final public function endInjection() + { + $this->injection_point = null; + } + + /** + * Get injection point. + * + * Retrieve the injection point in the stack where new controls and sections + * will be inserted. + * + * @since 1.9.2 + * @access public + * + * @return array|null An array when an injection point is defined, null + * otherwise. + */ + final public function getInjectionPoint() + { + return $this->injection_point; + } + + /** + * Register controls. + * + * Used to add new controls to any element type. For example, external + * developers use this method to register controls in a widget. + * + * Should be inherited and register new controls using `add_control()`, + * `add_responsive_control()` and `add_group_control()`, inside control + * wrappers like `start_controls_section()`, `start_controls_tabs()` and + * `start_controls_tab()`. + * + * @since 1.4.0 + * @access protected + */ + protected function _registerControls() + { + } + + /** + * Get default data. + * + * Retrieve the default data. Used to reset the data on initialization. + * + * @since 1.4.0 + * @access protected + * + * @return array Default data. + */ + protected function getDefaultData() + { + return [ + 'id' => 0, + 'settings' => [], + ]; + } + + /** + * @since 2.3.0 + * @access protected + */ + protected function getInitSettings() + { + $settings = $this->getData('settings'); + + foreach ($this->getControls() as $control) { + $control_obj = Plugin::$instance->controls_manager->getControl($control['type']); + + if (!$control_obj instanceof BaseDataControl) { + continue; + } + + $control = array_merge_recursive($control_obj->getSettings(), $control); + + $settings[$control['name']] = $control_obj->getValue($control, $settings); + } + + return $settings; + } + + /** + * Get initial config. + * + * Retrieve the current element initial configuration - controls list and + * the tabs assigned to the control. + * + * @since 1.4.0 + * @access protected + * + * @return array The initial config. + */ + protected function _getInitialConfig() + { + return [ + 'controls' => $this->getControls(), + ]; + } + + /** + * Get section arguments. + * + * Retrieve the section arguments based on section ID. + * + * @since 1.4.0 + * @access protected + * + * @param string $section_id Section ID. + * + * @return array Section arguments. + */ + protected function getSectionArgs($section_id) + { + $section_control = $this->getControls($section_id); + + $section_args_keys = ['tab', 'condition']; + + $args = array_intersect_key($section_control, array_flip($section_args_keys)); + + $args['section'] = $section_id; + + return $args; + } + + /** + * Render element. + * + * Generates the final HTML on the frontend. + * + * @since 2.0.0 + * @access protected + */ + protected function render() + { + } + + /** + * Print content template. + * + * Used to generate the content template on the editor, using a + * Backbone JavaScript template. + * + * @access protected + * @since 2.0.0 + * + * @param string $template_content Template content. + */ + protected function printTemplateContent($template_content) + { + echo $template_content; + } + + /** + * Render element output in the editor. + * + * Used to generate the live preview, using a Backbone JavaScript template. + * + * @since 2.0.0 + * @access protected + */ + protected function _contentTemplate() + { + } + + /** + * Initialize controls. + * + * Register the all controls added by `_register_controls()`. + * + * @since 2.0.0 + * @access protected + */ + protected function initControls() + { + Plugin::$instance->controls_manager->openStack($this); + + $this->_registerControls(); + } + + /** + * Initialize the class. + * + * Set the raw data, the ID and the parsed settings. + * + * @since 1.4.0 + * @access protected + * + * @param array $data Initial data. + */ + protected function _init($data) + { + $this->data = array_merge($this->getDefaultData(), $data); + + $this->id = $data['id']; + } + + /** + * Sanitize initial data. + * + * Performs settings cleaning and sanitization. + * + * @since 2.1.5 + * @access private + * + * @param array $settings Settings to sanitize. + * @param array $controls Optional. An array of controls. Default is an + * empty array. + * + * @return array Sanitized settings. + */ + private function sanitizeSettings(array $settings, array $controls = []) + { + if (!$controls) { + $controls = $this->getControls(); + } + + foreach ($controls as $control) { + if ('repeater' === $control['type']) { + if (empty($settings[$control['name']])) { + continue; + } + + foreach ($settings[$control['name']] as $index => $repeater_row_data) { + $sanitized_row_data = $this->sanitizeSettings($repeater_row_data, $control['fields']); + + $settings[$control['name']][$index] = $sanitized_row_data; + } + + continue; + } + + $is_dynamic = isset($settings['__dynamic__'][$control['name']]); + + if (!$is_dynamic) { + continue; + } + + $value_to_check = $settings['__dynamic__'][$control['name']]; + + $tag_text_data = Plugin::$instance->dynamic_tags->tagTextToTagData($value_to_check); + + if (!Plugin::$instance->dynamic_tags->getTagInfo($tag_text_data['name'])) { + unset($settings['__dynamic__'][$control['name']]); + } + } + + return $settings; + } + + /** + * Controls stack constructor. + * + * Initializing the control stack class using `$data`. The `$data` is required + * for a normal instance. It is optional only for internal `type instance`. + * + * @since 1.4.0 + * @access public + * + * @param array $data Optional. Control stack data. Default is an empty array. + */ + public function __construct(array $data = []) + { + if ($data) { + $this->_init($data); + } + } +} diff --git a/modules/creativeelements/includes/base/element-base.php b/modules/creativeelements/includes/base/element-base.php new file mode 100644 index 00000000..82ca15ad --- /dev/null +++ b/modules/creativeelements/includes/base/element-base.php @@ -0,0 +1,1044 @@ +depended_scripts[] = $handler; + } + + /** + * Add style depends. + * + * Register new style to enqueue by the handler. + * + * @since 1.9.0 + * @access public + * + * @param string $handler Depend style handler. + */ + public function addStyleDepends($handler) + { + $this->depended_styles[] = $handler; + } + + /** + * Get script dependencies. + * + * Retrieve the list of script dependencies the element requires. + * + * @since 1.3.0 + * @access public + * + * @return array Element scripts dependencies. + */ + public function getScriptDepends() + { + return $this->depended_scripts; + } + + /** + * Enqueue scripts. + * + * Registers all the scripts defined as element dependencies and enqueues + * them. Use `get_script_depends()` method to add custom script dependencies. + * + * @since 1.3.0 + * @access public + */ + final public function enqueueScripts() + { + foreach ($this->getScriptDepends() as $script) { + wp_enqueue_script($script); + } + } + + /** + * Get style dependencies. + * + * Retrieve the list of style dependencies the element requires. + * + * @since 1.9.0 + * @access public + * + * @return array Element styles dependencies. + */ + public function getStyleDepends() + { + return $this->depended_styles; + } + + /** + * Enqueue styles. + * + * Registers all the styles defined as element dependencies and enqueues + * them. Use `get_style_depends()` method to add custom style dependencies. + * + * @since 1.9.0 + * @access public + */ + final public function enqueueStyles() + { + foreach ($this->getStyleDepends() as $style) { + wp_enqueue_style($style); + } + } + + /** + * Get element edit tools. + * + * Used to retrieve the element edit tools. + * + * @since 1.0.0 + * @access public + * @static + * + * @return array Element edit tools. + */ + final public static function getEditTools() + { + // if (!Plugin::instance()->role_manager->userCan('design')) { + // return []; + // } + + if (null === static::$_edit_tools) { + self::initEditTools(); + } + + return static::$_edit_tools; + } + + /** + * Add new edit tool. + * + * Register new edit tool for the element. + * + * @since 1.0.0 + * @access public + * @static + * + * @param string $tool_name Edit tool name. + * @param string[] $tool_data Edit tool data. + * @param string $after Optional. If tool ID defined, the new edit tool + * will be added after it. If null, the new edit + * tool will be added at the end. Default is null. + * + */ + final public static function addEditTool($tool_name, $tool_data, $after = null) + { + if (null === static::$_edit_tools) { + self::initEditTools(); + } + + // Adding the tool at specific position + // in the tools array if requested + if ($after) { + $after_index = array_search($after, array_keys(static::$_edit_tools), true) + 1; + + static::$_edit_tools = array_slice(static::$_edit_tools, 0, $after_index, true) + + [ + $tool_name => $tool_data, + ] + + array_slice(static::$_edit_tools, $after_index, null, true); + } else { + static::$_edit_tools[$tool_name] = $tool_data; + } + } + + /** + * @since 2.2.0 + * @access public + * @static + */ + final public static function isEditButtonsEnabled() + { + return get_option('elementor_edit_buttons'); + } + + /** + * Get default edit tools. + * + * Retrieve the element default edit tools. Used to set initial tools. + * By default the element has no edit tools. + * + * @since 1.0.0 + * @access protected + * @static + * + * @return array Default edit tools. + */ + protected static function getDefaultEditTools() + { + return []; + } + + /** + * Initialize edit tools. + * + * Register default edit tools. + * + * @since 2.0.0 + * @access private + * @static + */ + private static function initEditTools() + { + static::$_edit_tools = static::getDefaultEditTools(); + } + + /** + * Get default child type. + * + * Retrieve the default child type based on element data. + * + * Note that not all elements support children. + * + * @since 1.0.0 + * @access protected + * @abstract + * + * @param array $element_data Element data. + * + * @return ElementBase + */ + abstract protected function _getDefaultChildType(array $element_data); + + /** + * Before element rendering. + * + * Used to add stuff before the element. + * + * @since 1.0.0 + * @access public + */ + public function beforeRender() + { + } + + /** + * After element rendering. + * + * Used to add stuff after the element. + * + * @since 1.0.0 + * @access public + */ + public function afterRender() + { + } + + /** + * Get element title. + * + * Retrieve the element title. + * + * @since 1.0.0 + * @access public + * + * @return string Element title. + */ + public function getTitle() + { + return ''; + } + + /** + * Get element icon. + * + * Retrieve the element icon. + * + * @since 1.0.0 + * @access public + * + * @return string Element icon. + */ + public function getIcon() + { + return 'eicon-columns'; + } + + /** + * Whether the reload preview is required. + * + * Used to determine whether the reload preview is required or not. + * + * @since 1.0.0 + * @access public + * + * @return bool Whether the reload preview is required. + */ + public function isReloadPreviewRequired() + { + return false; + } + + /** + * @since 2.3.1 + * @access protected + */ + protected function shouldPrintEmpty() + { + return true; + } + + /** + * Print element content template. + * + * Used to generate the element content template on the editor, using a + * Backbone JavaScript template. + * + * @access protected + * @since 2.0.0 + * + * @param string $template_content Template content. + */ + protected function printTemplateContent($template_content) + { + $this->renderEditTools(); + + echo $template_content; // XSS ok. + } + + /** + * Get child elements. + * + * Retrieve all the child elements of this element. + * + * @since 1.0.0 + * @access public + * + * @return ElementBase[] Child elements. + */ + public function getChildren() + { + if (null === $this->children) { + $this->initChildren(); + } + + return $this->children; + } + + /** + * Get default arguments. + * + * Retrieve the element default arguments. Used to return all the default + * arguments or a specific default argument, if one is set. + * + * @since 1.0.0 + * @access public + * + * @param array $item Optional. Default is null. + * + * @return array Default argument(s). + */ + public function getDefaultArgs($item = null) + { + return self::_getItems($this->default_args, $item); + } + + /** + * Add new child element. + * + * Register new child element to allow hierarchy. + * + * @since 1.0.0 + * @access public + * @param array $child_data Child element data. + * @param array $child_args Child element arguments. + * + * @return ElementBase|false Child element instance, or false if failed. + */ + public function addChild(array $child_data, array $child_args = []) + { + if (null === $this->children) { + $this->initChildren(); + } + + $child_type = $this->getChildType($child_data); + + if (!$child_type) { + return false; + } + + $child = Plugin::$instance->elements_manager->createElementInstance($child_data, $child_args, $child_type); + + if ($child) { + $this->children[] = $child; + } + + return $child; + } + + /** + * Add render attribute. + * + * Used to add attributes to a specific HTML element. + * + * The HTML tag is represented by the element parameter, then you need to + * define the attribute key and the attribute key. The final result will be: + * ``. + * + * Example usage: + * + * `$this->addRenderAttribute( 'wrapper', 'class', 'custom-widget-wrapper-class' );` + * `$this->addRenderAttribute( 'widget', 'id', 'custom-widget-id' );` + * `$this->addRenderAttribute( 'button', [ 'class' => 'custom-button-class', 'id' => 'custom-button-id' ] );` + * + * @since 1.0.0 + * @access public + * + * @param array|string $element The HTML element. + * @param array|string $key Optional. Attribute key. Default is null. + * @param array|string $value Optional. Attribute value. Default is null. + * @param bool $overwrite Optional. Whether to overwrite existing + * attribute. Default is false, not to overwrite. + * + * @return ElementBase Current instance of the element. + */ + public function addRenderAttribute($element, $key = null, $value = null, $overwrite = false) + { + if (is_array($element)) { + foreach ($element as $element_key => $attributes) { + $this->addRenderAttribute($element_key, $attributes, null, $overwrite); + } + + return $this; + } + + if (is_array($key)) { + foreach ($key as $attribute_key => $attributes) { + $this->addRenderAttribute($element, $attribute_key, $attributes, $overwrite); + } + + return $this; + } + + if (empty($this->render_attributes[$element][$key])) { + $this->render_attributes[$element][$key] = []; + } + + settype($value, 'array'); + + if ($overwrite) { + $this->render_attributes[$element][$key] = $value; + } else { + $this->render_attributes[$element][$key] = array_merge($this->render_attributes[$element][$key], $value); + } + + return $this; + } + + /** + * Get Render Attributes + * + * Used to retrieve render attribute. + * + * The returned array is either all elements and their attributes if no `$element` is specified, an array of all + * attributes of a specific element or a specific attribute properties if `$key` is specified. + * + * Returns null if one of the requested parameters isn't set. + * + * @since 2.2.6 + * @access public + * @param string $element + * @param string $key + * + * @return array + */ + public function getRenderAttributes($element = '', $key = '') + { + $attributes = $this->render_attributes; + + if ($element) { + if (!isset($attributes[$element])) { + return null; + } + + $attributes = $attributes[$element]; + + if ($key) { + if (!isset($attributes[$key])) { + return null; + } + + $attributes = $attributes[$key]; + } + } + + return $attributes; + } + + /** + * Set render attribute. + * + * Used to set the value of the HTML element render attribute or to update + * an existing render attribute. + * + * @since 1.0.0 + * @access public + * + * @param array|string $element The HTML element. + * @param array|string $key Optional. Attribute key. Default is null. + * @param array|string $value Optional. Attribute value. Default is null. + * + * @return ElementBase Current instance of the element. + */ + public function setRenderAttribute($element, $key = null, $value = null) + { + return $this->addRenderAttribute($element, $key, $value, true); + } + + /** + * Get render attribute string. + * + * Used to retrieve the value of the render attribute. + * + * @since 1.0.0 + * @access public + * + * @param string $element The element. + * + * @return string Render attribute string, or an empty string if the attribute + * is empty or not exist. + */ + public function getRenderAttributeString($element) + { + if (empty($this->render_attributes[$element])) { + return ''; + } + + return Utils::renderHtmlAttributes($this->render_attributes[$element]); + } + + /** + * Print render attribute string. + * + * Used to output the rendered attribute. + * + * @since 2.0.0 + * @access public + * + * @param array|string $element The element. + */ + public function printRenderAttributeString($element) + { + echo $this->getRenderAttributeString($element); // XSS ok. + } + + /** + * Print element. + * + * Used to generate the element final HTML on the frontend and the editor. + * + * @since 1.0.0 + * @access public + */ + public function printElement() + { + $element_type = $this->getType(); + + /** + * Before frontend element render. + * + * Fires before Elementor element is rendered in the frontend. + * + * @since 2.2.0 + * + * @param ElementBase $this The element. + */ + do_action('elementor/frontend/before_render', $this); + + /** + * Before frontend element render. + * + * Fires before Elementor element is rendered in the frontend. + * + * The dynamic portion of the hook name, `$element_type`, refers to the element type. + * + * @since 1.0.0 + * + * @param ElementBase $this The element. + */ + do_action("elementor/frontend/{$element_type}/before_render", $this); + + ob_start(); + $this->_printContent(); + $content = ob_get_clean(); + + $should_render = !empty($content) || $this->shouldPrintEmpty(); + + /** + * Should the element be rendered for frontend + * + * Filters if the element should be rendered on frontend. + * + * @since 2.3.3 + * + * @param bool true The element. + * @param ElementBase $this The element. + */ + $should_render = apply_filters("elementor/frontend/{$element_type}/should_render", $should_render, $this); + + if ($should_render) { + $this->_addRenderAttributes(); + + $this->beforeRender(); + echo $content; + $this->afterRender(); + + // $this->enqueueScripts(); + // $this->enqueueStyles(); + add_action('wp_enqueue_scripts', [$this, 'enqueueScripts']); + add_action('wp_enqueue_scripts', [$this, 'enqueueStyles']); + } + + /** + * After frontend element render. + * + * Fires after Elementor element is rendered in the frontend. + * + * The dynamic portion of the hook name, `$element_type`, refers to the element type. + * + * @since 1.0.0 + * + * @param ElementBase $this The element. + */ + do_action("elementor/frontend/{$element_type}/after_render", $this); + + /** + * After frontend element render. + * + * Fires after Elementor element is rendered in the frontend. + * + * @since 2.3.0 + * + * @param ElementBase $this The element. + */ + do_action('elementor/frontend/after_render', $this); + } + + /** + * Get the element raw data. + * + * Retrieve the raw element data, including the id, type, settings, child + * elements and whether it is an inner element. + * + * The data with the HTML used always to display the data, but the Elementor + * editor uses the raw data without the HTML in order not to render the data + * again. + * + * @since 1.0.0 + * @access public + * + * @param bool $with_html_content Optional. Whether to return the data with + * HTML content or without. Used for caching. + * Default is false, without HTML. + * + * @return array Element raw data. + */ + public function getRawData($with_html_content = false) + { + $data = $this->getData(); + + $elements = []; + + foreach ($this->getChildren() as $child) { + $elements[] = $child->getRawData($with_html_content); + } + + return [ + 'id' => $this->getId(), + 'elType' => $data['elType'], + 'settings' => $data['settings'], + 'elements' => $elements, + 'isInner' => $data['isInner'], + ]; + } + + /** + * Get unique selector. + * + * Retrieve the unique selector of the element. Used to set a unique HTML + * class for each HTML element. This way Elementor can set custom styles for + * each element. + * + * @since 1.0.0 + * @access public + * + * @return string Unique selector. + */ + public function getUniqueSelector() + { + return '.elementor-element-' . $this->getId(); + } + + /** + * Render element edit tools. + * + * Used to generate the edit tools HTML. + * + * @since 1.8.0 + * @access protected + */ + protected function renderEditTools() + { + ?> +
+
    + $edit_tool) : ?> +
  • + + +
  • + +
+
+ is_type_instance; + } + + /** + * Add render attributes. + * + * Used to add attributes to the current element wrapper HTML tag. + * + * @since 1.3.0 + * @access protected + */ + protected function _addRenderAttributes() + { + $id = $this->getId(); + + $settings = $this->getSettingsForDisplay(); + $frontend_settings = $this->getFrontendSettings(); + $controls = $this->getControls(); + + $this->addRenderAttribute('_wrapper', [ + 'class' => [ + 'elementor-element', + 'elementor-element-' . $id, + ], + 'data-id' => $id, + 'data-element_type' => $this->getType(), + ]); + + $class_settings = []; + + foreach ($settings as $setting_key => $setting) { + if (isset($controls[$setting_key]['prefix_class'])) { + $class_settings[$setting_key] = $setting; + } + } + + foreach ($class_settings as $setting_key => $setting) { + if (empty($setting) && '0' !== $setting) { + continue; + } + + $this->addRenderAttribute('_wrapper', 'class', $controls[$setting_key]['prefix_class'] . $setting); + } + + if (!empty($settings['animation']) || !empty($settings['_animation'])) { + // Hide the element until the animation begins + $this->addRenderAttribute('_wrapper', 'class', 'elementor-invisible'); + } + + if (!empty($settings['_element_id'])) { + $this->addRenderAttribute('_wrapper', 'id', trim($settings['_element_id'])); + } + + if ($frontend_settings) { + $this->addRenderAttribute('_wrapper', 'data-settings', json_encode($frontend_settings)); + } + + /** + * After element attribute rendered. + * + * Fires after the attributes of the element HTML tag are rendered. + * + * @since 2.3.0 + * + * @param ElementBase $this The element. + */ + do_action('elementor/element/after_add_attributes', $this); + } + + /** + * Get default data. + * + * Retrieve the default element data. Used to reset the data on initialization. + * + * @since 1.0.0 + * @access protected + * + * @return array Default data. + */ + protected function getDefaultData() + { + $data = parent::getDefaultData(); + + return array_merge($data, [ + 'elements' => [], + 'isInner' => false, + ]); + } + + /** + * Print element content. + * + * Output the element final HTML on the frontend. + * + * @since 1.0.0 + * @access protected + */ + protected function _printContent() + { + foreach ($this->getChildren() as $child) { + $child->printElement(); + } + } + + /** + * Get initial config. + * + * Retrieve the current element initial configuration. + * + * Adds more configuration on top of the controls list and the tabs assigned + * to the control. This method also adds element name, type, icon and more. + * + * @since 1.0.10 + * @access protected + * + * @return array The initial config. + */ + protected function _getInitialConfig() + { + $config = [ + 'name' => $this->getName(), + 'elType' => $this->getType(), + 'title' => $this->getTitle(), + 'icon' => $this->getIcon(), + 'reload_preview' => $this->isReloadPreviewRequired(), + ]; + + return $config; + } + + /** + * Get child type. + * + * Retrieve the element child type based on element data. + * + * @since 2.0.0 + * @access private + * + * @param array $element_data Element ID. + * + * @return ElementBase|false Child type or false if type not found. + */ + private function getChildType($element_data) + { + $child_type = $this->_getDefaultChildType($element_data); + + // If it's not a valid widget ( like a deactivated plugin ) + if (!$child_type) { + return false; + } + + /** + * Element child type. + * + * Filters the child type of the element. + * + * @since 1.0.0 + * + * @param ElementBase $child_type The child element. + * @param array $element_data The original element ID. + * @param ElementBase $this The original element. + */ + $child_type = apply_filters('elementor/element/get_child_type', $child_type, $element_data, $this); + + return $child_type; + } + + /** + * Initialize children. + * + * Initializing the element child elements. + * + * @since 2.0.0 + * @access private + */ + private function initChildren() + { + $this->children = []; + + $children_data = $this->getData('elements'); + + if (!$children_data) { + return; + } + + foreach ($children_data as $child_data) { + if (!$child_data) { + continue; + } + + $this->addChild($child_data); + } + } + + /** + * Element base constructor. + * + * Initializing the element base class using `$data` and `$args`. + * + * The `$data` parameter is required for a normal instance because of the + * way Elementor renders data when initializing elements. + * + * @since 1.0.0 + * @access public + * + * @param array $data Optional. Element data. Default is an empty array. + * @param array|null $args Optional. Element default arguments. Default is null. + */ + public function __construct(array $data = [], array $args = null) + { + if ($data) { + $this->is_type_instance = false; + } elseif ($args) { + $this->default_args = $args; + } + + parent::__construct($data); + } +} diff --git a/modules/creativeelements/includes/base/index.php b/modules/creativeelements/includes/base/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/includes/base/index.php @@ -0,0 +1,8 @@ +parent = $parent; + + $this->_registerControlsActions(); + } + + /** + * Get skin ID. + * + * Retrieve the skin ID. + * + * @since 1.0.0 + * @access public + * @abstract + */ + abstract public function getId(); + + /** + * Get skin title. + * + * Retrieve the skin title. + * + * @since 1.0.0 + * @access public + * @abstract + */ + abstract public function getTitle(); + + /** + * Render skin. + * + * Generates the final HTML on the frontend. + * + * @since 1.0.0 + * @access public + * @abstract + */ + abstract public function render(); + + /** + * Register skin controls actions. + * + * Run on init and used to register new skins to be injected to the widget. + * This method is used to register new actions that specify the location of + * the skin in the widget. + * + * Example usage: + * `add_action( 'elementor/element/{widget_id}/{section_id}/before_section_end', [ $this, 'register_controls' ] );` + * + * @since 1.0.0 + * @access protected + */ + protected function _registerControlsActions() + { + } + + /** + * Get skin control ID. + * + * Retrieve the skin control ID. Note that skin controls have special prefix + * to distinguish them from regular controls, and from controls in other + * skins. + * + * @since 1.0.0 + * @access protected + * + * @param string $control_base_id Control base ID. + * + * @return string Control ID. + */ + protected function getControlId($control_base_id) + { + $skin_id = str_replace('-', '_', $this->getId()); + return $skin_id . '_' . $control_base_id; + } + + /** + * Get skin settings. + * + * Retrieve all the skin settings or, when requested, a specific setting. + * + * @since 1.0.0 + * @TODO: rename to get_setting() and create backward compatibility. + * + * @access public + * + * @param string $control_base_id Control base ID. + * + * @return WidgetBase Widget instance. + */ + public function getInstanceValue($control_base_id) + { + $control_id = $this->getControlId($control_base_id); + return $this->parent->getSettings($control_id); + } + + /** + * Start skin controls section. + * + * Used to add a new section of controls to the skin. + * + * @since 1.3.0 + * @access public + * + * @param string $id Section ID. + * @param array $args Section arguments. + */ + public function startControlsSection($id, $args) + { + $args['condition']['_skin'] = $this->getId(); + $this->parent->startControlsSection($this->getControlId($id), $args); + } + + /** + * End skin controls section. + * + * Used to close an existing open skin controls section. + * + * @since 1.3.0 + * @access public + */ + public function endControlsSection() + { + $this->parent->endControlsSection(); + } + + /** + * Add new skin control. + * + * Register a single control to the allow the user to set/update skin data. + * + * @since 1.0.0 + * @access public + * + * @param string $id Control ID. + * @param array $args Control arguments. + * + * @return bool True if skin added, False otherwise. + */ + public function addControl($id, $args) + { + $args['condition']['_skin'] = $this->getId(); + return $this->parent->addControl($this->getControlId($id), $args); + } + + /** + * Update skin control. + * + * Change the value of an existing skin control. + * + * @since 1.3.0 + * @since 1.8.1 New `$options` parameter added. + * + * @access public + * + * @param string $id Control ID. + * @param array $args Control arguments. Only the new fields you want to update. + * @param array $options Optional. Some additional options. + */ + public function updateControl($id, $args, array $options = []) + { + $args['condition']['_skin'] = $this->getId(); + $this->parent->updateControl($this->getControlId($id), $args, $options); + } + + /** + * Remove skin control. + * + * Unregister an existing skin control. + * + * @since 1.3.0 + * @access public + * + * @param string $id Control ID. + */ + public function removeControl($id) + { + $this->parent->removeControl($this->getControlId($id)); + } + + /** + * Add new responsive skin control. + * + * Register a set of controls to allow editing based on user screen size. + * + * @since 1.0.5 + * @access public + * + * @param string $id Responsive control ID. + * @param array $args Responsive control arguments. + */ + public function addResponsiveControl($id, $args) + { + $args['condition']['_skin'] = $this->getId(); + $this->parent->addResponsiveControl($this->getControlId($id), $args); + } + + /** + * Update responsive skin control. + * + * Change the value of an existing responsive skin control. + * + * @since 1.3.5 + * @access public + * + * @param string $id Responsive control ID. + * @param array $args Responsive control arguments. + */ + public function updateResponsiveControl($id, $args) + { + $this->parent->updateResponsiveControl($this->getControlId($id), $args); + } + + /** + * Remove responsive skin control. + * + * Unregister an existing skin responsive control. + * + * @since 1.3.5 + * @access public + * + * @param string $id Responsive control ID. + */ + public function removeResponsiveControl($id) + { + $this->parent->removeResponsiveControl($this->getControlId($id)); + } + + /** + * Start skin controls tab. + * + * Used to add a new tab inside a group of tabs. + * + * @since 1.5.0 + * @access public + * + * @param string $id Control ID. + * @param array $args Control arguments. + */ + public function startControlsTab($id, $args) + { + $args['condition']['_skin'] = $this->getId(); + $this->parent->startControlsTab($this->getControlId($id), $args); + } + + /** + * End skin controls tab. + * + * Used to close an existing open controls tab. + * + * @since 1.5.0 + * @access public + */ + public function endControlsTab() + { + $this->parent->endControlsTab(); + } + + /** + * Start skin controls tabs. + * + * Used to add a new set of tabs inside a section. + * + * @since 1.5.0 + * @access public + * + * @param string $id Control ID. + */ + public function startControlsTabs($id) + { + // $args['condition']['_skin'] = $this->getId(); + $this->parent->startControlsTabs($this->getControlId($id)); + } + + /** + * End skin controls tabs. + * + * Used to close an existing open controls tabs. + * + * @since 1.5.0 + * @access public + */ + public function endControlsTabs() + { + $this->parent->endControlsTabs(); + } + + /** + * Add new group control. + * + * Register a set of related controls grouped together as a single unified + * control. + * + * @since 1.0.0 + * @access public + * + * @param string $group_name Group control name. + * @param array $args Group control arguments. Default is an empty array. + */ + final public function addGroupControl($group_name, $args = []) + { + $args['name'] = $this->getControlId($args['name']); + $args['condition']['_skin'] = $this->getId(); + $this->parent->addGroupControl($group_name, $args); + } + + /** + * Set parent widget. + * + * Used to define the parent widget of the skin. + * + * @since 1.0.0 + * @access public + * + * @param WidgetBase $parent Parent widget. + */ + public function setParent($parent) + { + $this->parent = $parent; + } +} diff --git a/modules/creativeelements/includes/base/widget-base.php b/modules/creativeelements/includes/base/widget-base.php new file mode 100644 index 00000000..18b233eb --- /dev/null +++ b/modules/creativeelements/includes/base/widget-base.php @@ -0,0 +1,870 @@ +isTypeInstance(); + + if (!$is_type_instance && null === $args) { + throw new \Exception('`$args` argument is required when initializing a full widget instance.'); + } + + if ($is_type_instance) { + $this->_registerSkins(); + + $widget_name = $this->getName(); + + /** + * Widget skin init. + * + * Fires when Elementor widget is being initialized. + * + * The dynamic portion of the hook name, `$widget_name`, refers to the widget name. + * + * @since 1.0.0 + * + * @param WidgetBase $this The current widget. + */ + do_action("elementor/widget/{$widget_name}/skins_init", $this); + } + } + + /** + * Get stack. + * + * Retrieve the widget stack of controls. + * + * @since 1.9.2 + * @access public + * + * @param bool $with_common_controls Optional. Whether to include the common controls. Default is true. + * + * @return array Widget stack of controls. + */ + public function getStack($with_common_controls = true) + { + $stack = parent::getStack(); + + if ($with_common_controls && 'common' !== $this->getUniqueName()) { + /** @var WidgetCommon $common_widget */ + $common_widget = Plugin::$instance->widgets_manager->getWidgetTypes('common'); + + $stack['controls'] = array_merge($stack['controls'], $common_widget->getControls()); + + $stack['tabs'] = array_merge($stack['tabs'], $common_widget->getTabsControls()); + } + + return $stack; + } + + /** + * Get widget controls pointer index. + * + * Retrieve widget pointer index where the next control should be added. + * + * While using injection point, it will return the injection point index. Otherwise index of the last control of the + * current widget itself without the common controls, plus one. + * + * @since 1.9.2 + * @access public + * + * @return int Widget controls pointer index. + */ + public function getPointerIndex() + { + $injection_point = $this->getInjectionPoint(); + + if (null !== $injection_point) { + return $injection_point['index']; + } + + return count($this->getStack(false)['controls']); + } + + /** + * Show in panel. + * + * Whether to show the widget in the panel or not. By default returns true. + * + * @since 1.0.0 + * @access public + * + * @return bool Whether to show the widget in the panel or not. + */ + public function showInPanel() + { + return true; + } + + /** + * Start widget controls section. + * + * Used to add a new section of controls to the widget. Regular controls and + * skin controls. + * + * Note that when you add new controls to widgets they must be wrapped by + * `start_controls_section()` and `end_controls_section()`. + * + * @since 1.0.0 + * @access public + * + * @param string $section_id Section ID. + * @param array $args Section arguments Optional. + */ + public function startControlsSection($section_id, array $args = []) + { + parent::startControlsSection($section_id, $args); + + static $is_first_section = true; + + if ($is_first_section) { + $this->registerSkinControl(); + + $is_first_section = false; + } + } + + /** + * Register the Skin Control if the widget has skins. + * + * An internal method that is used to add a skin control to the widget. + * Added at the top of the controls section. + * + * @since 2.0.0 + * @access private + */ + private function registerSkinControl() + { + $skins = $this->getSkins(); + + if (!empty($skins)) { + $skin_options = []; + + if ($this->_has_template_content) { + $skin_options[''] = __('Default'); + } + + foreach ($skins as $skin_id => $skin) { + $skin_options[$skin_id] = $skin->getTitle(); + } + + // Get the first item for default value + $default_value = array_keys($skin_options); + $default_value = array_shift($default_value); + + if (1 >= count($skin_options)) { + $this->addControl( + '_skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::HIDDEN, + 'default' => $default_value, + ] + ); + } else { + $this->addControl( + '_skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'default' => $default_value, + 'options' => $skin_options, + ] + ); + } + } + } + + /** + * Get default edit tools. + * + * Retrieve the element default edit tools. Used to set initial tools. + * By default the element has no edit tools. + * + * @since 1.0.0 + * @access protected + * @static + * + * @return array Default edit tools. + */ + protected static function getDefaultEditTools() + { + $widget_label = __('Widget'); + + $edit_tools = [ + 'edit' => [ + 'title' => __('Edit'), + 'icon' => 'edit', + ], + ]; + + if (self::isEditButtonsEnabled()) { + $edit_tools += [ + 'duplicate' => [ + /* translators: %s: Widget label */ + 'title' => sprintf(__('Duplicate %s'), $widget_label), + 'icon' => 'clone', + ], + 'remove' => [ + /* translators: %s: Widget label */ + 'title' => sprintf(__('Remove %s'), $widget_label), + 'icon' => 'close', + ], + ]; + } + + return $edit_tools; + } + + /** + * Register widget skins. + * + * This method is activated while initializing the widget base class. It is + * used to assign skins to widgets with `addSkin()` method. + * + * Usage: + * + * protected function _registerSkins() { + * $this->addSkin( new SkinClassic( $this ) ); + * } + * + * @since 1.7.12 + * @access protected + */ + protected function _registerSkins() + { + } + + /** + * Get initial config. + * + * Retrieve the current widget initial configuration. + * + * Adds more configuration on top of the controls list, the tabs assigned to + * the control, element name, type, icon and more. This method also adds + * widget type, keywords and categories. + * + * @since 1.0.10 + * @access protected + * + * @return array The initial widget config. + */ + protected function _getInitialConfig() + { + $config = [ + 'widget_type' => $this->getName(), + 'keywords' => $this->getKeywords(), + 'categories' => $this->getCategories(), + 'html_wrapper_class' => $this->getHtmlWrapperClass(), + 'show_in_panel' => $this->showInPanel(), + ]; + + $stack = Plugin::$instance->controls_manager->getElementStack($this); + + if ($stack) { + $config['controls'] = $this->getStack(false)['controls']; + $config['tabs_controls'] = $this->getTabsControls(); + } + + return array_merge(parent::_getInitialConfig(), $config); + } + + /** + * @since 2.3.1 + * @access protected + */ + protected function shouldPrintEmpty() + { + return false; + } + + /** + * Print widget content template. + * + * Used to generate the widget content template on the editor, using a + * Backbone JavaScript template. + * + * @since 2.0.0 + * @access protected + * + * @param string $template_content Template content. + */ + protected function printTemplateContent($template_content) + { + $this->renderEditTools(); + ?> +
+ getSettings()); + + if ('renderSmarty' === self::$render_method) { + return $content; + } + + // if ($GLOBALS['wp_embed'] instanceof \WP_Embed) { + // $content = $GLOBALS['wp_embed']->autoembed($content); + // } + + return 'render' === self::$render_method ? do_shortcode($content) : $content; + } + + /** + * Get HTML wrapper class. + * + * Retrieve the widget container class. Can be used to override the + * container class for specific widgets. + * + * @since 2.0.9 + * @access protected + */ + protected function getHtmlWrapperClass() + { + return 'elementor-widget-' . $this->getName(); + } + + /** + * Add widget render attributes. + * + * Used to add attributes to the current widget wrapper HTML tag. + * + * @since 1.0.0 + * @access protected + */ + protected function _addRenderAttributes() + { + parent::_addRenderAttributes(); + + $this->addRenderAttribute('_wrapper', 'class', [ + 'elementor-widget', + $this->getHtmlWrapperClass(), + ]); + + $this->addRenderAttribute('_wrapper', 'data-widget_type', $this->getName() . '.' . ($this->getSettings('_skin') ?: 'default')); + } + + /** + * Render widget output on the frontend. + * + * Used to generate the final HTML displayed on the frontend. + * + * Note that if skin is selected, it will be rendered by the skin itself, + * not the widget. + * + * @since 1.0.0 + * @access public + */ + public function renderContent() + { + if (static::REMOTE_RENDER && is_admin() && 'render' === self::$render_method) { + return print '
'; + } + + /** + * Before widget render content. + * + * Fires before Elementor widget is being rendered. + * + * @since 1.0.0 + * + * @param WidgetBase $this The current widget. + */ + do_action('elementor/widget/before_render_content', $this); + + ob_start(); + + $skin = $this->getCurrentSkin(); + if ($skin) { + $skin->setParent($this); + $skin->{self::$render_method}(); + } else { + $this->{self::$render_method}(); + } + + $widget_content = ob_get_clean(); + + if (empty($widget_content)) { + return; + } + + if (Plugin::$instance->editor->isEditMode()) { + $this->renderEditTools(); + } + + echo '
'; + + /** + * Render widget content. + * + * Filters the widget content before it's rendered. + * + * @since 1.0.0 + * + * @param string $widget_content The content of the widget. + * @param WidgetBase $this The widget. + */ + echo apply_filters('elementor/widget/render_content', $widget_content, $this); // XSS ok. + + echo '
'; + } + + /** + * Render widget smarty template. + * + * @since 2.5.10 + * @access protected + */ + protected function renderSmarty() + { + $this->render(); + } + + /** + * Render widget plain content. + * + * Elementor saves the page content in a unique way, but it's not the way + * PretaShop saves data. This method is used to save generated HTML to the + * database as plain content the PretaShop way. + * + * When rendering plain content, it allows other PretaShop modules to + * interact with the content - to search, check SEO and other purposes. It + * also allows the site to keep working even if Elementor is deactivated. + * + * Note that if the widget uses shortcodes to display the data, the best + * practice is to return the shortcode itself. + * + * Also note that if the widget don't display any content it should return + * an empty string. + * + * @since 1.0.0 + * @access public + */ + public function renderPlainContent() + { + $this->renderContent(); + } + + /** + * Before widget rendering. + * + * Used to add stuff before the widget `_wrapper` element. + * + * @since 1.0.0 + * @access public + */ + public function beforeRender() + { + ?> +
getRenderAttributeString('_wrapper') ?>> + +
+ getData('widgetType'); + + if ($with_html_content) { + ob_start(); + + $this->renderContent(); + + $data['htmlCache'] = ob_get_clean(); + } + + return $data; + } + + /** + * Print widget content. + * + * Output the widget final HTML on the frontend. + * + * @since 1.0.0 + * @access protected + */ + protected function _printContent() + { + $this->renderContent(); + } + + /** + * Get default data. + * + * Retrieve the default widget data. Used to reset the data on initialization. + * + * @since 1.0.0 + * @access protected + * + * @return array Default data. + */ + protected function getDefaultData() + { + $data = parent::getDefaultData(); + + $data['widgetType'] = ''; + + return $data; + } + + /** + * Get default child type. + * + * Retrieve the widget child type based on element data. + * + * @since 1.0.0 + * @access protected + * + * @param array $element_data Widget ID. + * + * @return array|false Child type or false if it's not a valid widget. + */ + protected function _getDefaultChildType(array $element_data) + { + return Plugin::$instance->elements_manager->getElementTypes('section'); + } + + /** + * Get repeater setting key. + * + * Retrieve the unique setting key for the current repeater item. Used to connect the current element in the + * repeater to it's settings model and it's control in the panel. + * + * @since 1.8.0 + * @access protected + * + * @param string $setting_key The current setting key inside the repeater item (e.g. `tab_title`). + * @param string $repeater_key The repeater key containing the array of all the items in the repeater (e.g. `tabs`). + * @param int $repeater_item_index The current item index in the repeater array (e.g. `3`). + * + * @return string The repeater setting key (e.g. `tabs.3.tab_title`). + */ + protected function getRepeaterSettingKey($setting_key, $repeater_key, $repeater_item_index) + { + return implode('.', [$repeater_key, $repeater_item_index, $setting_key]); + } + + /** + * Add inline editing attributes. + * + * Define specific area in the element to be editable inline. The element can have several areas, with this method + * you can set the area inside the element that can be edited inline. You can also define the type of toolbar the + * user will see, whether it will be a basic toolbar or an advanced one. + * + * Note: When you use wysiwyg control use the advanced toolbar, with textarea control use the basic toolbar. Text + * control should not have toolbar. + * + * PHP usage (inside `WidgetBase::render()` method): + * + * $this->addInlineEditingAttributes( 'text', 'advanced' ); + * echo '
getRenderAttributeString( 'text' ) . '>' . $this->getSettings( 'text' ) . '
'; + * + * @since 1.8.0 + * @access protected + * + * @param string $key Element key. + * @param string $toolbar Optional. Toolbar type. Accepted values are `advanced`, `basic` or `none`. Default is + * `basic`. + */ + protected function addInlineEditingAttributes($key, $toolbar = 'basic') + { + if (!Plugin::$instance->editor->isEditMode()) { + return; + } + + $this->addRenderAttribute($key, [ + 'class' => 'elementor-inline-editing', + 'data-elementor-setting-key' => $key, + ]); + + if ('basic' !== $toolbar) { + $this->addRenderAttribute($key, [ + 'data-elementor-inline-editing-toolbar' => $toolbar, + ]); + } + } + + /** + * Add new skin. + * + * Register new widget skin to allow the user to set custom designs. Must be + * called inside the `_register_skins()` method. + * + * @since 1.0.0 + * @access public + * + * @param SkinBase $skin Skin instance. + */ + public function addSkin(SkinBase $skin) + { + Plugin::$instance->skins_manager->addSkin($this, $skin); + } + + /** + * Get single skin. + * + * Retrieve a single skin based on skin ID, from all the skin assigned to + * the widget. If the skin does not exist or not assigned to the widget, + * return false. + * + * @since 1.0.0 + * @access public + * + * @param string $skin_id Skin ID. + * + * @return string|false Single skin, or false. + */ + public function getSkin($skin_id) + { + $skins = $this->getSkins(); + if (isset($skins[$skin_id])) { + return $skins[$skin_id]; + } + + return false; + } + + /** + * Get current skin ID. + * + * Retrieve the ID of the current skin. + * + * @since 1.0.0 + * @access public + * + * @return string Current skin. + */ + public function getCurrentSkinId() + { + return $this->getSettings('_skin'); + } + + /** + * Get current skin. + * + * Retrieve the current skin, or if non exist return false. + * + * @since 1.0.0 + * @access public + * + * @return SkinBase|false Current skin or false. + */ + public function getCurrentSkin() + { + return $this->getSkin($this->getCurrentSkinId()); + } + + /** + * Remove widget skin. + * + * Unregister an existing skin and remove it from the widget. + * + * @since 1.0.0 + * @access public + * + * @param string $skin_id Skin ID. + * + * @return WPError|true Whether the skin was removed successfully from the widget. + */ + public function removeSkin($skin_id) + { + return Plugin::$instance->skins_manager->removeSkin($this, $skin_id); + } + + /** + * Get widget skins. + * + * Retrieve all the skin assigned to the widget. + * + * @since 1.0.0 + * @access public + * + * @return SkinBase[] + */ + public function getSkins() + { + return Plugin::$instance->skins_manager->getSkins($this); + } +} diff --git a/modules/creativeelements/includes/base/widget-category-base.php b/modules/creativeelements/includes/base/widget-category-base.php new file mode 100644 index 00000000..844bfa2c --- /dev/null +++ b/modules/creativeelements/includes/base/widget-category-base.php @@ -0,0 +1,191 @@ +startControlsSection( + 'section_category_tree', + [ + 'label' => __('Category Tree'), + ] + $args + ); + + $this->addControl( + 'root_category', + [ + 'label' => __('Category Root'), + 'type' => ControlsManager::SELECT, + 'default' => '0', + 'options' => [ + '0' => __('Home Category'), + '1' => __('Current Category'), + '2' => __('Parent Category'), + '3' => __('Current Category') . ' / ' . __('Parent Category'), + ], + ] + ); + + $this->addControl( + 'max_depth', + [ + 'label' => __('Maximum Depth'), + 'type' => ControlsManager::NUMBER, + 'min' => 0, + 'default' => 4, + ] + ); + + $this->addControl( + 'sort', + [ + 'label' => __('Sort'), + 'type' => ControlsManager::SELECT, + 'default' => '0', + 'options' => [ + '0' => __('By Position'), + '1' => __('By Name'), + ], + ] + ); + + $this->addControl( + 'sort_way', + [ + 'label' => __('Sort Order'), + 'type' => ControlsManager::SELECT, + 'default' => '0', + 'options' => [ + '0' => __('Ascending'), + '1' => __('Descending'), + ], + ] + ); + + $this->endControlsSection(); + } + + protected function setLastVisitedCategory() + { + static $isset; + + if ($isset) { + return; + } + $isset = true; + + if (method_exists($this->context->controller, 'getCategory') && $category = $this->context->controller->getCategory()) { + $this->context->cookie->last_visited_category = $category->id; + } elseif (method_exists($this->context->controller, 'getProduct') && $product = $this->context->controller->getProduct()) { + if (!isset($this->context->cookie->last_visited_category) || + !\Product::idIsOnCategoryId($product->id, [['id_category' => $this->context->cookie->last_visited_category]]) || + !\Category::inShopStatic($this->context->cookie->last_visited_category, $this->context->shop) + ) { + $this->context->cookie->last_visited_category = (int) $product->id_category_default; + } + } + } + + protected function getRootCategory($root_category) + { + $this->setLastVisitedCategory(); + + if ($root_category && isset($this->context->cookie->last_visited_category) && $this->context->cookie->last_visited_category) { + $category = new \Category($this->context->cookie->last_visited_category, $this->context->language->id); + + if ($root_category == 2 && !$category->is_root_category && $category->id_parent || + $root_category == 3 && !$category->is_root_category && !$category->getSubCategories($category->id, true) + ) { + $category = new \Category($category->id_parent, $this->context->language->id); + } + } else { + $category = new \Category((int) \Configuration::get('PS_HOME_CATEGORY'), $this->context->language->id); + } + + return $category; + } + + protected function getCategoryTree(\Category $category, array &$settings) + { + $range = ''; + $maxdepth = $settings['max_depth']; + if (\Validate::isLoadedObject($category)) { + if ($maxdepth > 0) { + $maxdepth += $category->level_depth; + } + $range = 'AND nleft >= ' . (int) $category->nleft . ' AND nright <= ' . (int) $category->nright; + } + + $resultIds = []; + $resultParents = []; + $result = \Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS( + 'SELECT c.id_parent, c.id_category, cl.name, cl.link_rewrite + FROM `' . _DB_PREFIX_ . 'category` c + INNER JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = ' . (int) $this->context->language->id . \Shop::addSqlRestrictionOnLang('cl') . ') + INNER JOIN `' . _DB_PREFIX_ . 'category_shop` cs ON (cs.`id_category` = c.`id_category` AND cs.`id_shop` = ' . (int) $this->context->shop->id . ') + WHERE (c.`active` = 1 OR c.`id_category` = ' . (int) \Configuration::get('PS_HOME_CATEGORY') . ') + AND c.`id_category` != ' . (int) \Configuration::get('PS_ROOT_CATEGORY') . ' + ' . ((int) $maxdepth != 0 ? ' AND `level_depth` <= ' . (int) $maxdepth : '') . ' + ' . $range . ' + AND c.id_category IN ( + SELECT id_category + FROM `' . _DB_PREFIX_ . 'category_group` + WHERE `id_group` IN (' . pSQL(implode(', ', \Customer::getGroupsStatic((int) $this->context->customer->id))) . ') + ) + ORDER BY `level_depth` ASC, ' . ($settings['sort'] ? 'cl.`name`' : 'cs.`position`') . ' ' . ($settings['sort_way'] ? 'DESC' : 'ASC') + ); + foreach ($result as &$row) { + $resultParents[$row['id_parent']][] = &$row; + $resultIds[$row['id_category']] = &$row; + } + + return $this->getTree($resultParents, $resultIds, $maxdepth, $category->id); + } + + private function getTree($resultParents, $resultIds, $maxDepth, $id_category, $currentDepth = 0) + { + $children = []; + + if (isset($resultParents[$id_category]) && count($resultParents[$id_category]) && ($maxDepth == 0 || $currentDepth < $maxDepth)) { + foreach ($resultParents[$id_category] as $subcat) { + $children[] = $this->getTree($resultParents, $resultIds, $maxDepth, $subcat['id_category'], $currentDepth + 1); + } + } + + if (isset($resultIds[$id_category])) { + $link = $this->context->link->getCategoryLink($id_category, $resultIds[$id_category]['link_rewrite']); + $name = $resultIds[$id_category]['name']; + } else { + $link = $name = ''; + } + + return [ + 'id' => $id_category, + 'link' => $link, + 'name' => $name, + 'children' => &$children, + ]; + } + + public function renderPlainContent() + { + } + + public function __construct($data = [], $args = []) + { + $this->context = \Context::getContext(); + + parent::__construct($data, $args); + } +} diff --git a/modules/creativeelements/includes/base/widget-premium-base.php b/modules/creativeelements/includes/base/widget-premium-base.php new file mode 100644 index 00000000..94cc6db0 --- /dev/null +++ b/modules/creativeelements/includes/base/widget-premium-base.php @@ -0,0 +1,68 @@ +startControlsSection( + 'section_premium', + [ + 'label' => $this->getTitle(), + ] + ); + + $this->addControl( + 'premium', + [ + 'type' => ControlsManager::RAW_HTML, + 'raw' => ( + '
' . + ' +
' . + __('Premium Widget') . + '
+
' . + sprintf(__('Use %s widget and dozens more premium features to extend your toolbox and build sites faster and better.'), $this->getTitle()) . + '
+ ' . + __('Buy License') . + '' . ( + !$this->getDemoLink() ? '' : '

+ ' . + __('See it in action') . + '' + ) . ' +
' + ), + ] + ); + + $this->endControlsSection(); + } + + protected function _contentTemplate() + { + echo ''; + } +} diff --git a/modules/creativeelements/includes/base/widget-product-base.php b/modules/creativeelements/includes/base/widget-product-base.php new file mode 100644 index 00000000..e31205e6 --- /dev/null +++ b/modules/creativeelements/includes/base/widget-product-base.php @@ -0,0 +1,2582 @@ +context = \Context::getContext(); + $this->catalog = \Configuration::get('PS_CATALOG_MODE'); + $this->show_prices = !\Configuration::isCatalogMode(); + $this->imageSize = \ImageType::getFormattedName('home'); + $this->loading = strrpos($this->getName(), 'carousel') === false ? 'lazy' : 'auto'; + + if (is_admin()) { + isset($this->context->customer->id) or $this->context->customer = new \Customer(); + } + parent::__construct($data, $args); + } + + public function getCategories() + { + return ['premium']; + } + + public function getSkinTemplate($skin) + { + $path = "catalog/_partials/miniatures/$skin.tpl"; + + return ( + file_exists(_CE_TEMPLATES_ . "front/theme/$path") || + file_exists(_PS_THEME_DIR_ . "templates/$path") || + _PARENT_THEME_NAME_ && file_exists(_PS_PARENT_THEME_DIR_ . "templates/$path") + ) ? $path : ''; + } + + protected function getSkinOptions() + { + static $opts; + + if (is_admin() && null === $opts) { + $context = \Context::getContext(); + $_uid = sprintf('17%02d%02d', $context->language->id, $context->shop->id); + $labels = [ + 'product' => __('Default'), + ]; + foreach (\CETheme::getOptions('product-miniature', $context->language->id, $context->shop->id) as $label) { + $labels["product-{$label['value']}$_uid"] = $label['name']; + } + $pattern = 'templates/catalog/_partials/miniatures/*product*.tpl'; + $tpls = array_merge( + _PARENT_THEME_NAME_ ? glob(_PS_PARENT_THEME_DIR_ . $pattern) : [], + glob(_PS_THEME_DIR_ . $pattern), + glob(_CE_TEMPLATES_ . "front/theme/catalog/_partials/miniatures/product-*$_uid.tpl") + ); + $opts = []; + + foreach ($tpls as $tpl) { + $opt = basename($tpl, '.tpl'); + $opts[$opt] = isset($labels[$opt]) ? $labels[$opt] : \Tools::ucFirst($opt); + } + $opts['custom'] = __('Custom'); + unset($opts['pack-product']); + } + return $opts ?: []; + } + + protected function getListingOptions() + { + $opts = [ + 'category' => __('Featured Products'), + 'prices-drop' => __('Prices Drop'), + 'new-products' => __('New Products'), + 'best-sales' => __('Best Sales'), + 'related' => __('Related Products'), + 'viewed' => __('Recently Viewed'), + 'manufacturer' => __('Products by Brand'), + 'supplier' => __('Products by Supplier'), + 'products' => __('Custom Products'), + ]; + if ($this->catalog) { + unset($opts['best-sales']); + } + return $opts; + } + + protected function registerListingControls($limit = 'limit') + { + $this->addControl( + 'heading', + [ + 'label' => __('Heading'), + 'type' => ControlsManager::TEXT, + 'label_block' => true, + 'default' => '', + 'placeholder' => __('Enter your title'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'heading_size', + [ + 'label' => __('HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => 'H1', + 'h2' => 'H2', + 'h3' => 'H3', + 'h4' => 'H4', + 'h5' => 'H5', + 'h6' => 'H6', + 'div' => 'div', + 'span' => 'span', + 'p' => 'p', + ], + 'default' => 'h2', + ] + ); + + $this->addControl( + 'listing', + [ + 'label' => __('Listing'), + 'type' => ControlsManager::SELECT, + 'default' => 'category', + 'options' => $this->getListingOptions(), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'products', + [ + 'type' => ControlsManager::REPEATER, + 'item_actions' => [ + 'add' => [ + 'product' => Helper::getAjaxProductsListLink(), + 'placeholder' => __('Add Product'), + ], + 'duplicate' => false, + ], + 'fields' => [ + [ + 'name' => 'id', + 'type' => ControlsManager::HIDDEN, + 'default' => '', + ], + ], + 'title_field' => + '<# var prodImg = elementor.getProductImage( id ), prodName = elementor.getProductName( id ); #>' . + '<# if ( prodImg ) { #><# } #>' . + '<# if ( prodName ) { #>{{{ prodName }}}<# } #>', + 'condition' => [ + 'listing' => 'products', + ], + ] + ); + + $this->addControl( + 'related_product_id', + [ + 'label' => __('Product'), + 'type' => ControlsManager::SELECT2, + 'label_block' => true, + 'select2options' => [ + 'placeholder' => __('Current Product'), + 'product' => true, + 'ajax' => [ + 'url' => Helper::getAjaxProductsListLink(), + ], + ], + 'default' => '', + 'condition' => [ + 'listing' => 'related', + ], + ] + ); + + $this->addControl( + 'category_id', + [ + 'label' => __('Category'), + 'label_block' => true, + 'type' => SelectCategory::CONTROL_TYPE, + 'select2options' => [ + 'allowClear' => false, + ], + 'extend' => [ + '0' => __('Products in the same category'), + ], + 'default' => 2, + 'condition' => [ + 'listing' => 'category', + ], + ] + ); + + $this->addControl( + 'manufacturer_id', + [ + 'label' => __('Brand'), + 'label_block' => true, + 'type' => SelectManufacturer::CONTROL_TYPE, + 'select2options' => [ + 'allowClear' => false, + ], + 'extend' => [ + '0' => __('Products with the same brand'), + ], + 'default' => 0, + 'condition' => [ + 'listing' => 'manufacturer', + ], + ] + ); + + $this->addControl( + 'supplier_id', + [ + 'label' => __('Supplier'), + 'label_block' => true, + 'type' => SelectSupplier::CONTROL_TYPE, + 'select2options' => [ + 'allowClear' => false, + ], + 'extend' => [ + '0' => __('Products with the same supplier'), + ], + 'default' => 0, + 'condition' => [ + 'listing' => 'supplier', + ], + ] + ); + + $this->addControl( + 'order_by', + [ + 'label' => __('Order By'), + 'type' => ControlsManager::SELECT, + 'default' => 'position', + 'options' => [ + 'name' => __('Name'), + 'price' => __('Price'), + 'position' => __('Popularity'), + 'quantity' => __('Sales Volume'), + 'date_add' => __('Arrival'), + 'date_upd' => __('Update'), + ], + 'condition' => [ + 'listing!' => ['related', 'viewed', 'products'], + ], + ] + ); + + $this->addControl( + 'order_dir', + [ + 'label' => __('Order Direction'), + 'type' => ControlsManager::SELECT, + 'default' => 'asc', + 'options' => [ + 'asc' => __('Ascending'), + 'desc' => __('Descending'), + ], + 'condition' => [ + 'listing!' => ['related', 'viewed', 'products'], + ], + ] + ); + + $this->addControl( + 'randomize', + [ + 'label' => __('Randomize'), + 'type' => ControlsManager::SWITCHER, + 'condition' => [ + 'listing' => ['category', 'viewed', 'products', 'related'], + ], + ] + ); + + $this->addControl( + $limit, + [ + 'label' => __('Product Limit'), + 'type' => ControlsManager::NUMBER, + 'min' => 1, + 'default' => 8, + 'condition' => [ + 'listing!' => 'products', + ], + ] + ); + } + + protected function registerMiniatureSections() + { + $this->startControlsSection( + 'section_content', + [ + 'label' => __('Content'), + 'condition' => [ + 'skin' => 'custom', + ], + ] + ); + + $image_size_options = GroupControlImageSize::getAllImageSizes('products'); + + if (empty($image_size_options[$this->imageSize])) { + // Set first image size as default when home doesn't exists + $this->imageSize = key($image_size_options); + } + + $this->addResponsiveControl( + 'image_size', + [ + 'label' => __('Image Size'), + 'type' => ControlsManager::SELECT, + 'options' => &$image_size_options, + 'default' => $this->imageSize, + ] + ); + + $this->addControl( + 'show_second_image', + [ + 'label' => __('Second Image'), + 'description' => __('Show second image on hover if exists'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + ] + ); + + $this->addControl( + 'show_category', + [ + 'label' => __('Category'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + ] + ); + + $this->addControl( + 'show_description', + [ + 'label' => __('Description'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + ] + ); + + $this->addControl( + 'description_length', + [ + 'label' => __('Max. Length'), + 'type' => ControlsManager::NUMBER, + 'min' => 1, + 'condition' => [ + 'show_description!' => '', + ], + ] + ); + + $this->addControl( + 'show_regular_price', + [ + 'label' => __('Regular Price'), + 'type' => $this->catalog ? ControlsManager::HIDDEN : ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'show_atc', + [ + 'label' => __('Add to Cart'), + 'type' => $this->catalog ? ControlsManager::HIDDEN : ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'show_qv', + [ + 'label' => __('Quick View'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'show_badges', + [ + 'label' => __('Badges'), + 'type' => ControlsManager::SELECT2, + 'options' => [ + 'sale' => __('Sale'), + 'new' => __('New'), + 'pack' => __('Pack'), + 'out' => __('Out-of-Stock'), + ], + 'default' => ['sale', 'new', 'pack', 'out'], + 'label_block' => true, + 'multiple' => true, + ] + ); + + $this->addControl( + 'heading_label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::HEADING, + 'condition' => [ + 'show_badges!' => [], + ], + ] + ); + + $this->addControl( + 'badge_sale_text', + [ + 'label' => __('Sale'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'show_badges', + 'operator' => 'contains', + 'value' => 'sale', + ], + ], + ], + ] + ); + + $this->addControl( + 'badge_new_text', + [ + 'label' => __('New'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'show_badges', + 'operator' => 'contains', + 'value' => 'new', + ], + ], + ], + ] + ); + + $this->addControl( + 'badge_pack_text', + [ + 'label' => __('Pack'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'show_badges', + 'operator' => 'contains', + 'value' => 'pack', + ], + ], + ], + ] + ); + + $this->addControl( + 'badge_out_text', + [ + 'label' => __('Out-of-Stock'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'show_badges', + 'operator' => 'contains', + 'value' => 'out', + ], + ], + ], + ] + ); + + $this->addControl( + 'title_tag', + [ + 'label' => __('Title HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => 'H1', + 'h2' => 'H2', + 'h3' => 'H3', + 'h4' => 'H4', + 'h5' => 'H5', + 'h6' => 'H6', + 'div' => 'div', + 'span' => 'span', + 'p' => 'p', + ], + 'separator' => 'before', + 'default' => 'h3', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_atc', + [ + 'label' => __('Add to Cart'), + 'condition' => [ + 'skin' => 'custom', + 'show_atc' => $this->catalog ? 'hide' : 'yes', + ], + ] + ); + + $this->addControl( + 'atc_text', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'default' => __('Add to Cart'), + ] + ); + + $this->addControl( + 'atc_icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => false, + 'default' => '', + ] + ); + + $this->addControl( + 'atc_icon_align', + [ + 'label' => __('Icon Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'left', + 'options' => [ + 'left' => __('Before'), + 'right' => __('After'), + ], + 'condition' => [ + 'atc_icon!' => '', + ], + ] + ); + + $this->addControl( + 'atc_icon_indent', + [ + 'label' => __('Icon Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'condition' => [ + 'atc_icon!' => '', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-atc .elementor-button-content-wrapper' => 'gap: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-atc .elementor-button-text' => 'flex-grow: min(0, {{SIZE}})', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_qv', + [ + 'label' => __('Quick View'), + 'condition' => [ + 'skin' => 'custom', + 'show_qv!' => '', + ], + ] + ); + + $this->addControl( + 'qv_text', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'default' => __('Quick View'), + ] + ); + + $this->addControl( + 'qv_icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => false, + 'default' => '', + ] + ); + + $this->addControl( + 'qv_icon_align', + [ + 'label' => __('Icon Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'left', + 'options' => [ + 'left' => __('Before'), + 'right' => __('After'), + ], + 'condition' => [ + 'qv_icon!' => '', + ], + ] + ); + + $this->addControl( + 'qv_icon_indent', + [ + 'label' => __('Icon Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'condition' => [ + 'qv_icon!' => '', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-quick-view .elementor-button-content-wrapper' => 'gap: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + } + + protected function registerHeadingStyleSection() + { + $this->startControlsSection( + 'section_heading_style', + [ + 'label' => __('Heading'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'heading!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'heading_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 20, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-heading-title' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'heading_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-heading-title' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'heading_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-heading-title' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'heading_typography', + 'selector' => '{{WRAPPER}} .elementor-heading-title', + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-heading-title', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'heading_shadow', + 'selector' => '{{WRAPPER}} .elementor-heading-title', + ] + ); + + $this->endControlsSection(); + + } + + protected function registerMiniatureStyleSections() + { + $this->startControlsSection( + 'section_style_image', + [ + 'label' => __('Image'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'custom', + ], + ] + ); + + $this->addControl( + 'hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('None'), + 'grow' => __('Grow'), + 'shrink' => __('Shrink'), + 'rotate' => __('Rotate'), + 'grow-rotate' => __('Grow Rotate'), + 'float' => __('Float'), + 'sink' => __('Sink'), + 'bob' => __('Bob'), + 'hang' => __('Hang'), + 'buzz-out' => __('Buzz Out'), + ], + 'prefix_class' => 'elementor-img-hover-', + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'image_border', + 'separator' => 'before', + 'selector' => '{{WRAPPER}} .elementor-image', + ] + ); + + $this->addControl( + 'image_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-image' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_content', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'custom', + ], + ] + ); + + $this->addControl( + 'content_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-content' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'content_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'content_min_height', + [ + 'label' => __('Min Height'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}} .elementor-content' => 'min-height: {{SIZE}}{{UNIT}};', + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 300, + ], + ], + ] + ); + + $this->startControlsTabs('content_style_tabs'); + + $this->startControlsTab( + 'content_style_title', + [ + 'label' => __('Title'), + ] + ); + + $this->addControl( + 'title_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-title' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'title_multiline', + [ + 'label' => __('Allow Multiline'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Yes'), + 'label_off' => __('No'), + 'selectors' => [ + '{{WRAPPER}} .elementor-title' => 'white-space: normal;', + ], + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-title' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-title', + + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'content_style_category', + [ + 'label' => __('Category'), + 'condition' => [ + 'show_category!' => '', + ], + ] + ); + + $this->addControl( + 'category_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-category' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'category_multiline', + [ + 'label' => __('Allow Multiline'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Yes'), + 'label_off' => __('No'), + 'selectors' => [ + '{{WRAPPER}} .elementor-category' => 'white-space: normal;', + ], + ] + ); + + $this->addControl( + 'category_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-category' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'category_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_2, + 'selector' => '{{WRAPPER}} .elementor-category', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'content_style_description', + [ + 'label' => __('Description'), + 'condition' => [ + 'show_description!' => '', + ], + ] + ); + + $this->addControl( + 'description_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-description' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'description_line_clamp', + [ + 'label' => __('Max Lines'), + 'type' => ControlsManager::NUMBER, + 'min' => 1, + 'selectors' => [ + '{{WRAPPER}} .elementor-description' => '-webkit-line-clamp: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'description_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-description' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'description_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} .elementor-description', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'content_style_price', + [ + 'label' => __('Price'), + ] + ); + + $this->addControl( + 'price_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-price-wrapper' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'price_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-price' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'price_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-price-wrapper', + ] + ); + + $this->addControl( + 'heading_style_regular_price', + [ + 'label' => __('Regular Price'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + 'condition' => [ + 'show_regular_price' => $this->catalog ? 'hide' : 'yes', + ], + ] + ); + + $this->addControl( + 'regular_price_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-price-regular' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'show_regular_price' => $this->catalog ? 'hide' : 'yes', + ], + ] + ); + + $this->addResponsiveControl( + 'regular_price_size', + [ + 'label' => _x('Size', 'Typography Control'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em', 'rem'], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 200, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-price-regular' => 'font-size: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'show_regular_price' => $this->catalog ? 'hide' : 'yes', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_atc', + [ + 'label' => __('Add to Cart'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'custom', + 'show_atc' => $this->catalog ? 'hide' : 'yes', + ], + ] + ); + + $this->addControl( + 'atc_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}} .elementor-atc' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'atc_align', + [ + 'label' => __('Alignment'), + 'label_block' => false, + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'prefix_class' => 'elementor-atc--align-', + 'default' => 'justify', + ] + ); + + $this->addControl( + 'atc_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'default' => 'sm', + 'options' => [ + 'xs' => __('Extra Small'), + 'sm' => __('Small'), + 'md' => __('Medium'), + 'lg' => __('Large'), + 'xl' => __('Extra Large'), + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'atc_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .elementor-atc .elementor-button', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + ] + ); + + $this->startControlsTabs('atc_style_tabs'); + + $this->startControlsTab( + 'atc_style_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'atc_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-atc .elementor-button' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'atc_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-atc .elementor-button' => 'background-color: {{VALUE}};', + ], + 'default' => '#000', + ] + ); + + $this->addControl( + 'atc_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-atc .elementor-button' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'atc_style_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'atc_color_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-atc .elementor-button:hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'atc_bg_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-atc .elementor-button:hover' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'atc_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-atc .elementor-button:hover' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'atc_style_disabled', + [ + 'label' => __('Disabled'), + ] + ); + + $this->addControl( + 'atc_color_disabled', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button.elementor-button:not(#e):disabled' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'atc_bg_color_disabled', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button.elementor-button:disabled' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'atc_border_color_disabled', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button.elementor-button:disabled' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'atc_cursor_disabled', + [ + 'label' => __('Cursor'), + 'label_block' => false, + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'default' => [ + 'icon' => 'fa fa-mouse-pointer', + ], + 'not-allowed' => [ + 'icon' => 'fa fa-ban', + ], + ], + 'selectors' => [ + '{{WRAPPER}} button.elementor-button:disabled' => 'cursor: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'atc_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-atc .elementor-button' => 'border-width: {{SIZE}}{{UNIT}}; border-style: solid;', + ], + 'default' => [ + 'unit' => 'px', + 'size' => 0, + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'atc_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'default' => [ + 'unit' => 'px', + 'size' => 0, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-atc .elementor-button' => 'border-radius: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_qv', + [ + 'label' => __('Quick View'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'show_qv' => 'yes', + 'skin' => 'custom', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'qv_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .elementor-quick-view', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + ] + ); + + $this->startControlsTabs('qv_style_tabs'); + + $this->startControlsTab( + 'qv_style_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'qv_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-quick-view' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'qv_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-quick-view' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'qv_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-quick-view' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'qv_style_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'qv_color_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-quick-view:hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'qv_bg_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-quick-view:hover' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'qv_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-quick-view:hover' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'qv_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-quick-view' => 'border-width: {{SIZE}}{{UNIT}}; border-style: solid;', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'qv_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-quick-view' => 'border-radius: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_badges', + [ + 'label' => __('Badges'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'custom', + 'show_badges!' => [], + ], + ] + ); + + $this->addControl( + 'badges_top', + [ + 'label' => __('Top Distance'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => -20, + 'max' => 20, + ], + 'em' => [ + 'min' => -2, + 'max' => 2, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-badges-left' => 'margin-top: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} .elementor-badges-right' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'badges_left', + [ + 'label' => __('Left Distance'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => -20, + 'max' => 20, + ], + 'em' => [ + 'min' => -2, + 'max' => 2, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-badges-left' => 'margin-left: {{SIZE}}{{UNIT}};', + ], + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'badge_sale_position', + 'value' => 'left', + ], + [ + 'name' => 'badge_new_position', + 'value' => 'left', + ], + [ + 'name' => 'badge_pack_position', + 'value' => 'left', + ], + [ + 'name' => 'badge_out_position', + 'value' => 'left', + ] + ], + ], + ] + ); + + $this->addControl( + 'badges_right', + [ + 'label' => __('Right Distance'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => -20, + 'max' => 20, + ], + 'em' => [ + 'min' => -2, + 'max' => 2, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-badges-right' => 'margin-right: {{SIZE}}{{UNIT}};', + ], + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'badge_sale_position', + 'value' => 'right', + ], + [ + 'name' => 'badge_new_position', + 'value' => 'right', + ], + [ + 'name' => 'badge_pack_position', + 'value' => 'right', + ], + [ + 'name' => 'badge_out_position', + 'value' => 'right', + ] + ], + ], + ] + ); + + $this->addControl( + 'bagdes_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 150, + ], + 'em' => [ + 'min' => 0, + 'max' => 150, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-badge' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'badges_min_width', + [ + 'label' => __('Min Width'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}} .elementor-badge' => 'min-width: {{SIZE}}{{UNIT}};', + ], + 'default' => [ + 'unit' => 'px', + 'size' => 50, + ], + ] + ); + + $this->addControl( + 'badges_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-badge' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'badges_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}} .elementor-badge' => 'border-radius: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'badges_typography', + 'selector' => '{{WRAPPER}} .elementor-badge', + ] + ); + + $this->startControlsTabs('badge_style_tabs'); + + $this->startControlsTab( + 'badge_style_sale', + [ + 'label' => __('Sale'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'show_badges', + 'operator' => 'contains', + 'value' => 'sale', + ], + ], + ], + ] + ); + + $this->addControl( + 'badge_sale_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'icon' => 'eicon-h-align-left', + 'title' => __('Left'), + ], + 'right' => [ + 'icon' => 'eicon-h-align-right', + 'title' => __('Right'), + ], + ], + 'default' => 'right', + ] + ); + + $this->addControl( + 'badge_sale_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-badge-sale' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'badge_sale_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-badge-sale' => 'background: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'badge_style_new', + [ + 'label' => __('New'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'show_badges', + 'operator' => 'contains', + 'value' => 'new', + ], + ], + ], + ] + ); + + $this->addControl( + 'badge_new_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'icon' => 'eicon-h-align-left', + 'title' => __('Left'), + ], + 'right' => [ + 'icon' => 'eicon-h-align-right', + 'title' => __('Right'), + ], + ], + 'default' => 'right', + ] + ); + + $this->addControl( + 'badge_new_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-badge-new' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'badge_new_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-badge-new' => 'background: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'badge_style_pack', + [ + 'label' => __('Pack'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'show_badges', + 'operator' => 'contains', + 'value' => 'pack', + ], + ], + ], + ] + ); + + $this->addControl( + 'badge_pack_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'icon' => 'eicon-h-align-left', + 'title' => __('Left'), + ], + 'right' => [ + 'icon' => 'eicon-h-align-right', + 'title' => __('Right'), + ], + ], + 'default' => 'right', + ] + ); + + $this->addControl( + 'badge_pack_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-badge-pack' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'badge_pack_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-badge-pack' => 'background: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'badge_style_out', + [ + 'label' => __('Out'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'show_badges', + 'operator' => 'contains', + 'value' => 'out', + ], + ], + ], + ] + ); + + $this->addControl( + 'badge_out_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'icon' => 'eicon-h-align-left', + 'title' => __('Left'), + ], + 'right' => [ + 'icon' => 'eicon-h-align-right', + 'title' => __('Right'), + ], + ], + 'default' => 'right', + ] + ); + + $this->addControl( + 'badge_out_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-badge-out' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'badge_out_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-badge-out' => 'background: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + } + + public function onImport($widget) + { + static $id_product; + + if (null === $id_product) { + $products = \Product::getProducts($this->context->language->id, 0, 1, 'id_product', 'ASC', false, true); + $id_product = !empty($products[0]['id_product']) ? $products[0]['id_product'] : ''; + } + + // Check Skin + if (!in_array($widget['settings']['skin'], ['product', 'custom']) && + !$this->getSkinTemplate($widget['settings']['skin']) + ) { + $widget['settings']['skin'] = 'product'; + } + + // Check Category ID + if (!empty($widget['settings']['category_id'])) { + $category = new \Category($widget['settings']['category_id']); + + if (!$category->id) { + $widget['settings']['category_id'] = $this->context->shop->id_category; + } + } + + // Check Manufacturer ID + if (!empty($widget['settings']['manufacturer_id'])) { + $manufacturer = new \Manufacturer($widget['settings']['manufacturer_id']); + + if (!$manufacturer->id) { + $widget['settings']['manufacturer_id'] = 0; + } + } + + // Check Supplier ID + if (!empty($widget['settings']['supplier_id'])) { + $supplier = new \Supplier($widget['settings']['supplier_id']); + + if (!$supplier->id) { + $widget['settings']['supplier_id'] = 0; + } + } + + // Check Product ID + if (!empty($widget['settings']['product_id'])) { + $product = new \Product($widget['settings']['product_id']); + + if (!$product->id) { + $widget['settings']['product_id'] = $id_product; + } + } + + // Check Related Product ID + if (!empty($widget['settings']['related_product_id'])) { + $product = new \Product($widget['settings']['related_product_id']); + + if (!$product->id) { + $widget['settings']['related_product_id'] = $id_product; + } + } + + // Check Product IDs + if (!empty($widget['settings']['products'])) { + $table = _DB_PREFIX_ . 'product'; + $prods = []; + $ids = []; + + foreach ($widget['settings']['products'] as &$prod) { + $ids[] = (int) $prod['id']; + } + $ids = implode(', ', $ids); + $rows = \Db::getInstance()->executeS("SELECT id_product FROM $table WHERE id_product IN ($ids)"); + + foreach ($rows as &$row) { + $prods[$row['id_product']] = true; + } + + foreach ($widget['settings']['products'] as &$prod) { + if ($prod['id'] && empty($prods[$prod['id']])) { + $prod['id'] = $id_product; + } + } + } + + // Check Product Image Sizes + $sizes = array_map(function ($size) { + return $size['name']; + }, \ImageType::getImagesTypes('products')); + + foreach (['image_size', 'image_size_tablet', 'image_size_mobile'] as $image_size) { + if (isset($widget['settings'][$image_size]) && !in_array($widget['settings'][$image_size], $sizes)) { + $home = \ImageType::getFormattedName('home'); + + $widget['settings'][$image_size] = in_array($home, $sizes) ? $home : reset($sizes); + } + } + + return $widget; + } + + public static function getAccessoriesLight($id_product) + { + return \Db::getInstance()->executeS(' + SELECT p.`id_product` FROM ' . _DB_PREFIX_ . 'accessory + LEFT JOIN ' . _DB_PREFIX_ . 'product p ON (p.`id_product` = id_product_2) + ' . \Shop::addSqlAssociation('product', 'p') . ' + WHERE id_product_1 = ' . (int) $id_product . ' AND p.active = 1' + ); + } + + protected function getProduct($id) + { + $presenter = new \PrestaShop\PrestaShop\Core\Product\ProductPresenter( + new \PrestaShop\PrestaShop\Adapter\Image\ImageRetriever($this->context->link), + $this->context->link, + new \PrestaShop\PrestaShop\Adapter\Product\PriceFormatter(), + new \PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever(), + $this->context->getTranslator() + ); + $presenterFactory = new \ProductPresenterFactory($this->context); + $assembler = new \ProductAssembler($this->context); + + try { + return ($assembledProduct = $assembler->assembleProduct(['id_product' => $id])) ? $presenter->present( + $presenterFactory->getPresentationSettings(), + $assembledProduct, + $this->context->language + ) : false; + } catch (\Exception $ex) { + return false; + } + } + + protected function getProducts($listing, $order_by, $order_dir, $limit, $id, $products = []) + { + $tpls = []; + + if ('viewed' === $listing) { + // Recently Viewed + $products = isset($this->context->cookie->ceViewedProducts) + ? explode(',', $this->context->cookie->ceViewedProducts) + : [] + ; + if ($this->context->controller instanceof \ProductController) { + $id_product = $this->context->controller->getProduct()->id; + + if ($id_product && in_array($id_product, $products)) { + $products = array_diff($products, [$id_product]); + } + } + $products = array_slice($products, 0, $limit); + + if ('rand' === $order_by) { + shuffle($products); + } + foreach ($products as $id_product) { + if ($product = $this->getProduct($id_product)) { + $tpls[] = $product; + } + } + return $tpls; + } + if ('products' === $listing) { + // Custom Products + if ('rand' === $order_by) { + shuffle($products); + } + foreach ($products as &$product) { + if ($product['id'] && $product = $this->getProduct($product['id'])) { + $tpls[] = $product; + } + } + return $tpls; + } + + $products = []; + $translator = $this->context->getTranslator(); + $query = new \PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery(); + + if ($this->context->controller instanceof \ProductController) { + $limit++; + } + $query->setResultsPerPage($limit); + $query->setQueryType($listing); + + switch ($listing) { + case 'category': + if ($id) { + $category = new \Category((int) $id); + } elseif ($this->context->controller instanceof \ProductController) { + $category = new \Category((int) $this->context->controller->getProduct()->id_category_default); + } + empty($category) or $searchProvider = new \PrestaShop\PrestaShop\Adapter\Category\CategoryProductSearchProvider($translator, $category); + + $query->setSortOrder( + 'rand' == $order_by + ? \PrestaShop\PrestaShop\Core\Product\Search\SortOrder::random() + : new \PrestaShop\PrestaShop\Core\Product\Search\SortOrder('product', $order_by, $order_dir) + ); + break; + case 'prices-drop': + $searchProvider = new \PrestaShop\PrestaShop\Adapter\PricesDrop\PricesDropProductSearchProvider($translator); + $query->setSortOrder(new \PrestaShop\PrestaShop\Core\Product\Search\SortOrder('product', $order_by, $order_dir)); + break; + case 'new-products': + $searchProvider = new \PrestaShop\PrestaShop\Adapter\NewProducts\NewProductsProductSearchProvider($translator); + $query->setSortOrder(new \PrestaShop\PrestaShop\Core\Product\Search\SortOrder('product', $order_by, $order_dir)); + break; + case 'best-sales': + $searchProvider = new \PrestaShop\PrestaShop\Adapter\BestSales\BestSalesProductSearchProvider($translator); + $query->setSortOrder(new \PrestaShop\PrestaShop\Core\Product\Search\SortOrder('product', $order_by, $order_dir)); + break; + case 'related': + if ($id) { + $products = self::getAccessoriesLight($id); + } elseif ($this->context->controller instanceof \ProductController) { + $products = self::getAccessoriesLight($this->context->controller->getProduct()->id); + } elseif ($this->context->controller instanceof \CartController) { + $cart = $this->context->controller->cart_presenter->present($this->context->cart, true); + $i = count($cart['products']); + + $exclude_ids = array_unique(array_map(function ($product) { + return $product->id; + }, $cart['products'])); + + while ($i--) { + $related_products = self::getAccessoriesLight($cart['products'][$i]->id); + + foreach ($related_products as &$related_product) { + if (!in_array($related_product['id_product'], $exclude_ids)) { + $products[] = $related_product; + $exclude_ids[] = $related_product['id_product']; + } + } + if (count($products) > $limit) { + break; + } + } + } + if ('rand' === $order_by) { + shuffle($products); + } + if (count($products) > $limit) { + $products = array_slice($products, 0, $limit); + } + break; + case 'manufacturer': + if (!$id && $this->context->controller instanceof \ProductController) { + $id = $this->context->controller->getProduct()->id_manufacturer; + } + $manufacturer = new \Manufacturer((int) $id); + $searchProvider = new \PrestaShop\PrestaShop\Adapter\Manufacturer\ManufacturerProductSearchProvider($translator, $manufacturer); + $query->setSortOrder(new \PrestaShop\PrestaShop\Core\Product\Search\SortOrder('product', $order_by, $order_dir)); + break; + case 'supplier': + if (!$id && $this->context->controller instanceof \ProductController) { + $id = $this->context->controller->getProduct()->id_supplier; + } + $supplier = new \Supplier((int) $id); + $searchProvider = new \PrestaShop\PrestaShop\Adapter\Supplier\SupplierProductSearchProvider($translator, $supplier); + $query->setSortOrder(new \PrestaShop\PrestaShop\Core\Product\Search\SortOrder('product', $order_by, $order_dir)); + break; + } + + if ('category' === $listing && !$id && $this->context->controller instanceof \CartController) { + $cart = $this->context->controller->cart_presenter->present($this->context->cart, true); + + $category_ids = array_unique(array_map(function ($product) { + return $product->id_category_default; + }, $cart['products'])); + + $exclude_ids = array_unique(array_map(function ($product) { + return $product->id; + }, $cart['products'])); + + $productSearchContext = new \PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext($this->context); + + foreach ($category_ids as $id_category) { + $category = new \Category($id_category); + $searchProvider = new \PrestaShop\PrestaShop\Adapter\Category\CategoryProductSearchProvider($translator, $category); + $result = $searchProvider->runQuery($productSearchContext, $query); + + foreach ($result->getProducts() as $product) { + if (!in_array($product['id_product'], $exclude_ids)) { + $products[] = $product; + $exclude_ids[] = $product['id_product']; + + if (count($products) > $limit) { + break 2; + } + } + } + } + } elseif ('related' !== $listing && isset($searchProvider)) { + $result = $searchProvider->runQuery(new \PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext($this->context), $query); + $products = $result->getProducts(); + } + + if ($this->context->controller instanceof \ProductController) { + $current_product_id = $this->context->controller->getProduct()->id; + $products = array_filter($products, function($product) use ($current_product_id) { + return $product['id_product'] != $current_product_id; + }); + if (count($products) === $limit) { + array_pop($products); + } + } + + $assembler = new \ProductAssembler($this->context); + $presenterFactory = new \ProductPresenterFactory($this->context); + $presentationSettings = $presenterFactory->getPresentationSettings(); + $presenter = new \PrestaShop\PrestaShop\Core\Product\ProductListingPresenter( + new \PrestaShop\PrestaShop\Adapter\Image\ImageRetriever($this->context->link), + $this->context->link, + new \PrestaShop\PrestaShop\Adapter\Product\PriceFormatter(), + new \PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever(), + $translator + ); + + foreach ($products as &$product) { + $tpls[] = $presenter->present( + $presentationSettings, + $assembler->assembleProduct($product), + $this->context->language + ); + } + return $tpls; + } + + /** + * Use this method to return the result of a product miniature template. + * + * @since 1.0.0 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + * + * @param array $settings + * @param $product + * + * @return string + */ + protected function fetchMiniature(array &$settings, $product) + { + static $flags = [ + 'sale' => 'discount', + 'new' => 'new', + 'pack' => 'pack', + 'out' => 'out_of_stock', + ]; + $title_tag = $settings['title_tag']; + $image_size = !empty($settings['image_size']) ? $settings['image_size'] : $this->imageSize; + $cover = $product['cover'] ?: Helper::getNoImage(); + $cover_url = [ + 'desktop' => $cover['bySize'][$image_size]['url'], + ]; + + if (!empty($settings['image_size_tablet']) && $settings['image_size_tablet'] !== $image_size) { + $cover_url['tablet'] = $cover['bySize'][$settings['image_size_tablet']]['url']; + } + if (!empty($settings['image_size_mobile']) && $settings['image_size_mobile'] !== $settings['image_size_tablet']) { + $cover_url['mobile'] = $cover['bySize'][$settings['image_size_mobile']]['url']; + } + $cover_alt = !empty($product['cover']['legend']) ? $product['cover']['legend'] : $product['name']; + + if (!empty($settings['show_description'])) { + $description = strip_tags($product['description_short']); + + if (!empty($settings['description_length']) && \Tools::strlen($description) > $settings['description_length']) { + $description = rtrim(\Tools::substr($description, 0, \Tools::strpos($description, ' ', $settings['description_length'])), '-,.') . '…'; + } + } + $this->setRenderAttribute('article', [ + 'data-id-product' => $product['id_product'], + 'data-id-product-attribute' => $product['id_product_attribute'], + ]); + + ob_start(); + ?> + + getSettings('skin') != 'custom') { + if ($wrapfix = Helper::getWrapfix()) { + $this->addRenderAttribute('_wrapper', 'class', $wrapfix); + } + } + } + + public function renderPlainContent() + { + } +} diff --git a/modules/creativeelements/includes/conditions.php b/modules/creativeelements/includes/conditions.php new file mode 100644 index 00000000..949ed311 --- /dev/null +++ b/modules/creativeelements/includes/conditions.php @@ -0,0 +1,121 @@ +': + return $left_value > $right_value; + case '>=': + return $left_value >= $right_value; + default: + return $left_value === $right_value; + } + } + + /** + * Check conditions. + * + * Whether the comparison conditions comply. + * + * @since 1.0.0 + * @access public + * @static + * + * @param array $conditions The conditions to check. + * @param array $comparison The comparison parameter. + * + * @return bool Whether the comparison conditions comply. + */ + public static function check(array $conditions, array $comparison) + { + $is_or_condition = isset($conditions['relation']) && 'or' === $conditions['relation']; + + $condition_succeed = !$is_or_condition; + + foreach ($conditions['terms'] as $term) { + if (!empty($term['terms'])) { + $comparison_result = self::check($term, $comparison); + } else { + preg_match('/(\w+)(?:\[(\w+)])?/', $term['name'], $parsed_name); + + $value = $comparison[$parsed_name[1]]; + + if (!empty($parsed_name[2])) { + $value = isset($value[$parsed_name[2]]) ? $value[$parsed_name[2]] : null; + } + + $operator = null; + + if (!empty($term['operator'])) { + $operator = $term['operator']; + } + + $comparison_result = self::compare($value, $term['value'], $operator); + } + + if ($is_or_condition) { + if ($comparison_result) { + return true; + } + } elseif (!$comparison_result) { + return false; + } + } + + return $condition_succeed; + } +} diff --git a/modules/creativeelements/includes/controls/animation.php b/modules/creativeelements/includes/controls/animation.php new file mode 100644 index 00000000..1f57838e --- /dev/null +++ b/modules/creativeelements/includes/controls/animation.php @@ -0,0 +1,195 @@ + [ + 'fadeIn' => 'Fade In', + 'fadeInDown' => 'Fade In Down', + 'fadeInLeft' => 'Fade In Left', + 'fadeInRight' => 'Fade In Right', + 'fadeInUp' => 'Fade In Up', + ], + 'Revealing' => [ + 'reveal' => 'Reveal', + 'revealFromDown' => 'Reveal from Down', + 'revealFromLeft' => 'Reveal from Left', + 'revealFromRight' => 'Reveal from Right', + 'revealFromUp' => 'Reveal from Up', + ], + 'Sliding & Revealing' => [ + 'slideRevealFromDown' => 'Slide & Reveal from Down', + 'slideRevealFromLeft' => 'Slide & Reveal from Left', + 'slideRevealFromRight' => 'Slide & Reveal from Right', + 'slideRevealFromUp' => 'Slide & Reveal from Up', + ], + 'Scaling & Revealing' => [ + 'scaleReveal' => 'Scale & Reveal', + 'scaleRevealFromDown' => 'Scale & Reveal from Down', + 'scaleRevealFromLeft' => 'Scale & Reveal from Left', + 'scaleRevealFromRight' => 'Scale & Reveal from Right', + 'scaleRevealFromUp' => 'Scale & Reveal from Up', + ], + 'Zooming' => [ + 'zoomIn' => 'Zoom In', + 'zoomInDown' => 'Zoom In Down', + 'zoomInLeft' => 'Zoom In Left', + 'zoomInRight' => 'Zoom In Right', + 'zoomInUp' => 'Zoom In Up', + ], + 'Bouncing' => [ + 'bounceIn' => 'Bounce In', + 'bounceInDown' => 'Bounce In Down', + 'bounceInLeft' => 'Bounce In Left', + 'bounceInRight' => 'Bounce In Right', + 'bounceInUp' => 'Bounce In Up', + ], + 'Sliding' => [ + 'slideInDown' => 'Slide In Down', + 'slideInLeft' => 'Slide In Left', + 'slideInRight' => 'Slide In Right', + 'slideInUp' => 'Slide In Up', + ], + 'Rotating' => [ + 'rotateIn' => 'Rotate In', + 'rotateInDownLeft' => 'Rotate In Down Left', + 'rotateInDownRight' => 'Rotate In Down Right', + 'rotateInUpLeft' => 'Rotate In Up Left', + 'rotateInUpRight' => 'Rotate In Up Right', + ], + 'Attention Seekers' => [ + 'bounce' => 'Bounce', + 'flash' => 'Flash', + 'pulse' => 'Pulse', + 'rubberBand' => 'Rubber Band', + 'shake' => 'Shake', + 'headShake' => 'Head Shake', + 'swing' => 'Swing', + 'tada' => 'Tada', + 'wobble' => 'Wobble', + 'jello' => 'Jello', + ], + 'Specials' => [ + 'rollIn' => 'Roll In', + ], + ]; + + /** + * Element appearance animations list. + * + * @since 2.4.0 + * + * @param array $additional_animations Additional Animations array. + */ + $additional_animations = apply_filters('elementor/controls/animations/additional_animations', []); + + return array_merge($animations, $additional_animations); + } + + /** + * Render animations control template. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> + <# var animations = ; #> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + getDefaultValue(); + } + + if (isset($settings[$control['name']])) { + $value = $settings[$control['name']]; + } else { + $value = $control['default']; + } + + return $value; + } + + /** + * Parse dynamic tags. + * + * Iterates through all the controls and renders all the dynamic tags. + * + * @since 2.0.0 + * @access public + * + * @param string $dynamic_value The dynamic tag text. + * @param array $dynamic_settings The dynamic tag settings. + * + * @return string|string[]|mixed A string or an array of strings with the + * return value from each tag callback function. + */ + public function parseTags($dynamic_value, $dynamic_settings) + { + $current_dynamic_settings = $this->getSettings('dynamic'); + + if (is_array($current_dynamic_settings)) { + $dynamic_settings = array_merge($current_dynamic_settings, $dynamic_settings); + } + + return Plugin::$instance->dynamic_tags->parseTagsText($dynamic_value, $dynamic_settings, [Plugin::$instance->dynamic_tags, 'getTagDataContent']); + } + + /** + * Get data control style value. + * + * Retrieve the style of the control. Used when adding CSS rules to the control + * while extracting CSS from the `selectors` data argument. + * + * @since 1.5.0 + * @since 2.3.3 New `$control_data` parameter added. + * @access public + * + * @param string $css_property CSS property. + * @param string $control_value Control value. + * @param array $control_data Control Data. + * + * @return string Control style value. + */ + public function getStyleValue($css_property, $control_value, array $control_data) + { + if ('DEFAULT' === $css_property) { + return $control_data['default']; + } + + return $control_value; + } + + /** + * Get data control unique ID. + * + * Retrieve the unique ID of the control. Used to set a uniq CSS ID for the + * element. + * + * @since 1.5.0 + * @access protected + * + * @param string $input_type Input type. Default is 'default'. + * + * @return string Unique ID. + */ + protected function getControlUid($input_type = 'default') + { + return 'elementor-control-' . $input_type . '-{{{ data._cid }}}'; + } +} diff --git a/modules/creativeelements/includes/controls/base-multiple.php b/modules/creativeelements/includes/controls/base-multiple.php new file mode 100644 index 00000000..baf506a2 --- /dev/null +++ b/modules/creativeelements/includes/controls/base-multiple.php @@ -0,0 +1,98 @@ + value` array. + * + * @since 1.0.0 + * @abstract + */ +abstract class ControlBaseMultiple extends BaseDataControl +{ + /** + * Get multiple control default value. + * + * Retrieve the default value of the multiple control. Used to return the default + * values while initializing the multiple control. + * + * @since 1.0.0 + * @access public + * + * @return array Control default value. + */ + public function getDefaultValue() + { + return []; + } + + /** + * Get multiple control value. + * + * Retrieve the value of the multiple control from a specific Controls_Stack settings. + * + * @since 1.0.0 + * @access public + * + * @param array $control Control + * @param array $settings Settings + * + * @return mixed Control values. + */ + public function getValue($control, $settings) + { + $value = parent::getValue($control, $settings); + + if (empty($control['default'])) { + $control['default'] = []; + } + + if (!is_array($value)) { + $value = []; + } + + $control['default'] = array_merge( + $this->getDefaultValue(), + $control['default'] + ); + + return array_merge( + $control['default'], + $value + ); + } + + /** + * Get multiple control style value. + * + * Retrieve the style of the control. Used when adding CSS rules to the control + * while extracting CSS from the `selectors` data argument. + * + * @since 1.0.5 + * @since 2.3.3 New `$control_data` parameter added. + * @access public + * + * @param string $css_property CSS property. + * @param array $control_value Control value. + * @param array $control_data Control Data. + * + * @return array Control style value. + */ + public function getStyleValue($css_property, $control_value, array $control_data) + { + return $control_value[call_user_func('strtolower', $css_property)]; + } +} diff --git a/modules/creativeelements/includes/controls/base-ui.php b/modules/creativeelements/includes/controls/base-ui.php new file mode 100644 index 00000000..438557cf --- /dev/null +++ b/modules/creativeelements/includes/controls/base-ui.php @@ -0,0 +1,38 @@ + 'px', + ]; + } + + /** + * Get units control default settings. + * + * Retrieve the default settings of the units control. Used to return the default + * settings while initializing the units control. + * + * @since 1.0.0 + * @access protected + * + * @return array Control default settings. + */ + protected function getDefaultSettings() + { + return [ + 'size_units' => ['px'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + 'step' => 1, + ], + 'em' => [ + 'min' => 0.1, + 'max' => 10, + 'step' => 0.1, + ], + 'rem' => [ + 'min' => 0.1, + 'max' => 10, + 'step' => 0.1, + ], + '%' => [ + 'min' => 0, + 'max' => 100, + 'step' => 1, + ], + 'deg' => [ + 'min' => 0, + 'max' => 360, + 'step' => 1, + ], + 'vh' => [ + 'min' => 0, + 'max' => 100, + 'step' => 1, + ], + 'vw' => [ + 'min' => 0, + 'max' => 100, + 'step' => 1, + ], + ], + ]; + } + + /** + * Print units control settings. + * + * Used to generate the units control template in the editor. + * + * @since 1.0.0 + * @access protected + */ + protected function printUnitsTemplate() + { + ?> + <# if ( data.size_units && data.size_units.length > 1 ) { #> +
+ <# _.each( data.size_units, function( unit ) { #> + + + <# } ); #> +
+ <# } #> + '', + 'description' => '', + 'show_label' => true, + 'label_block' => false, + 'separator' => 'default', + ]; + + /** + * Get features. + * + * Retrieve the list of all the available features. Currently Elementor uses only + * the `UI` feature. + * + * @since 1.5.0 + * @access public + * @static + * + * @return array Features array. + */ + public static function getFeatures() + { + return []; + } + + /** + * Get control type. + * + * Retrieve the control type. + * + * @since 1.5.0 + * @access public + * @abstract + */ + abstract public function getType(); + + /** + * Control base constructor. + * + * Initializing the control base class. + * + * @since 1.5.0 + * @access public + */ + public function __construct() + { + $this->setSettings(array_merge($this->_base_settings, $this->getDefaultSettings())); + + $this->setSettings('features', static::getFeatures()); + } + + /** + * Enqueue control scripts and styles. + * + * Used to register and enqueue custom scripts and styles used by the control. + * + * @since 1.5.0 + * @access public + */ + public function enqueue() + { + } + + /** + * Control content template. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * Note that the content template is wrapped by BaseControl::printTemplate(). + * + * @since 1.5.0 + * @access public + * @abstract + */ + abstract public function contentTemplate(); + + /** + * Print control template. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.5.0 + * @access public + */ + final public function printTemplate() + { + ?> + + 0, + 'vertical' => 0, + 'blur' => 10, + 'spread' => 0, + 'color' => 'rgba(0,0,0,0.5)', + ]; + } + + /** + * Get box shadow control sliders. + * + * Retrieve the sliders of the box shadow control. Sliders are used while + * rendering the control output in the editor. + * + * @since 1.0.0 + * @access public + * + * @return array Control sliders. + */ + public function getSliders() + { + return [ + 'horizontal' => [ + 'label' => __('Horizontal'), + 'min' => -100, + 'max' => 100, + ], + 'vertical' => [ + 'label' => __('Vertical'), + 'min' => -100, + 'max' => 100, + ], + 'blur' => [ + 'label' => __('Blur'), + 'min' => 0, + 'max' => 100, + ], + 'spread' => [ + 'label' => __('Spread'), + 'min' => -100, + 'max' => 100, + ], + ]; + } + + /** + * Render box shadow control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + ?> + <# var defaultColorValue = data.default.color ? ' data-default-color=' + data.default.color : ''; #> +
+ +
+ +
+
+ getSliders() as $slider_name => $slider) : ?> + getControlUid($slider_name) ?> +
+ +
+
+
+ +
+
+
+ '', + 'event' => '', + 'button_type' => 'default', + ]; + } + + /** + * Render button control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.9.0 + * @access public + */ + public function contentTemplate() + { + ?> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + getControlUid('{{value}}'); + ?> +
+ +
+
+ <# _.each( data.options, function( options, value ) { #> + + + <# } ); #> +
+
+
+ + <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + true, + 'options' => [], + 'toggle' => true, + ]; + } +} diff --git a/modules/creativeelements/includes/controls/code.php b/modules/creativeelements/includes/controls/code.php new file mode 100644 index 00000000..9baa7a06 --- /dev/null +++ b/modules/creativeelements/includes/controls/code.php @@ -0,0 +1,85 @@ + true, + 'language' => 'html', // html/css + 'rows' => 10, + ]; + } + + /** + * Render code control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + + <# + var defaultValue = data.default ? ' data-default-color=' + data.default : '', + dataAlpha = data.alpha ? ' data-alpha=true' : ''; + #> +
+ +
+ +
+
+ true, + 'scheme' => '', + ]; + } +} diff --git a/modules/creativeelements/includes/controls/date-time.php b/modules/creativeelements/includes/controls/date-time.php new file mode 100644 index 00000000..84a9836a --- /dev/null +++ b/modules/creativeelements/includes/controls/date-time.php @@ -0,0 +1,89 @@ + true, + 'picker_options' => [], + 'dynamic' => [ + 'categories' => [TagsModule::DATE_TIME_CATEGORY], + ], + ]; + } + + /** + * Render date time control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + '', + 'right' => '', + 'bottom' => '', + 'left' => '', + 'isLinked' => true, + ]); + } + + /** + * Get dimensions control default settings. + * + * Retrieve the default settings of the dimensions control. Used to return the + * default settings while initializing the dimensions control. + * + * @since 1.0.0 + * @access protected + * + * @return array Control default settings. + */ + protected function getDefaultSettings() + { + return array_merge(parent::getDefaultSettings(), [ + 'label_block' => true, + 'allowed_dimensions' => 'all', + 'placeholder' => '', + ]); + } + + /** + * Render dimensions control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + public function contentTemplate() + { + $dimensions = [ + 'top' => __('Top'), + 'right' => __('Right'), + 'bottom' => __('Bottom'), + 'left' => __('Left'), + ]; + ?> +
+ + printUnitsTemplate() ?> +
+
    + $dimension_title) : ?> + getControlUid($dimension_key) ?> +
  • + ' ) ) { #>disabled<# } #> + /> + +
  • + +
  • + +
  • +
+
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + 'none', + ]; + } + + /** + * Render divider control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 2.0.0 + * @access public + */ + public function contentTemplate() + { + } +} diff --git a/modules/creativeelements/includes/controls/font.php b/modules/creativeelements/includes/controls/font.php new file mode 100644 index 00000000..bdbc0a28 --- /dev/null +++ b/modules/creativeelements/includes/controls/font.php @@ -0,0 +1,95 @@ + Fonts::getFontGroups(), + 'options' => Fonts::getFonts(), + ]; + } + + /** + * Render font control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + [ + 'title' => _x('Classic', 'Background Control'), + 'icon' => 'fa fa-paint-brush', + ], + 'gradient' => [ + 'title' => _x('Gradient', 'Background Control'), + 'icon' => 'fa fa-barcode', + ], + 'video' => [ + 'title' => _x('Background Video', 'Background Control'), + 'icon' => 'fa fa-video-camera', + ], + ]; + } + + /** + * Init fields. + * + * Initialize background control fields. + * + * @since 1.2.2 + * @access public + * + * @return array Control fields. + */ + public function initFields() + { + $fields = []; + + $fields['background'] = [ + 'label' => _x('Background Type', 'Background Control'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'render_type' => 'ui', + ]; + + $fields['color'] = [ + 'label' => _x('Color', 'Background Control'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'title' => _x('Background Color', 'Background Control'), + 'selectors' => [ + '{{SELECTOR}}' => 'background-color: {{VALUE}};', + ], + 'condition' => [ + 'background' => ['classic', 'gradient'], + ], + ]; + + $fields['color_stop'] = [ + 'label' => _x('Location', 'Background Control'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%'], + 'default' => [ + 'unit' => '%', + 'size' => 0, + ], + 'render_type' => 'ui', + 'condition' => [ + 'background' => ['gradient'], + ], + 'of_type' => 'gradient', + ]; + + $fields['color_b'] = [ + 'label' => _x('Second Color', 'Background Control'), + 'type' => ControlsManager::COLOR, + 'default' => '#f2295b', + 'render_type' => 'ui', + 'condition' => [ + 'background' => ['gradient'], + ], + 'of_type' => 'gradient', + ]; + + $fields['color_b_stop'] = [ + 'label' => _x('Location', 'Background Control'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%'], + 'default' => [ + 'unit' => '%', + 'size' => 100, + ], + 'render_type' => 'ui', + 'condition' => [ + 'background' => ['gradient'], + ], + 'of_type' => 'gradient', + ]; + + $fields['gradient_type'] = [ + 'label' => _x('Type', 'Background Control'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'linear' => _x('Linear', 'Background Control'), + 'radial' => _x('Radial', 'Background Control'), + ], + 'default' => 'linear', + 'render_type' => 'ui', + 'condition' => [ + 'background' => ['gradient'], + ], + 'of_type' => 'gradient', + ]; + + $fields['gradient_angle'] = [ + 'label' => _x('Angle', 'Background Control'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['deg'], + 'default' => [ + 'unit' => 'deg', + 'size' => 180, + ], + 'range' => [ + 'deg' => [ + 'step' => 10, + ], + ], + 'selectors' => [ + '{{SELECTOR}}' => 'background-color: transparent; background-image: linear-gradient({{SIZE}}{{UNIT}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})', + ], + 'condition' => [ + 'background' => ['gradient'], + 'gradient_type' => 'linear', + ], + 'of_type' => 'gradient', + ]; + + $fields['gradient_position'] = [ + 'label' => _x('Position', 'Background Control'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'center center' => _x('Center Center', 'Background Control'), + 'center left' => _x('Center Left', 'Background Control'), + 'center right' => _x('Center Right', 'Background Control'), + 'top center' => _x('Top Center', 'Background Control'), + 'top left' => _x('Top Left', 'Background Control'), + 'top right' => _x('Top Right', 'Background Control'), + 'bottom center' => _x('Bottom Center', 'Background Control'), + 'bottom left' => _x('Bottom Left', 'Background Control'), + 'bottom right' => _x('Bottom Right', 'Background Control'), + ], + 'default' => 'center center', + 'selectors' => [ + '{{SELECTOR}}' => 'background-color: transparent; background-image: radial-gradient(at {{VALUE}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})', + ], + 'condition' => [ + 'background' => ['gradient'], + 'gradient_type' => 'radial', + ], + 'of_type' => 'gradient', + ]; + + $fields['image'] = [ + 'label' => _x('Image', 'Background Control'), + 'type' => ControlsManager::MEDIA, + 'dynamic' => [ + 'active' => true, + ], + 'responsive' => true, + 'title' => _x('Background Image', 'Background Control'), + 'selectors' => [ + '{{SELECTOR}}' => 'background-image: url("{{URL}}");', + ], + 'render_type' => 'template', + 'condition' => [ + 'background' => ['classic'], + ], + ]; + + $fields['position'] = [ + 'label' => _x('Position', 'Background Control'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'responsive' => true, + 'options' => [ + '' => _x('Default', 'Background Control'), + 'top left' => _x('Top Left', 'Background Control'), + 'top center' => _x('Top Center', 'Background Control'), + 'top right' => _x('Top Right', 'Background Control'), + 'center left' => _x('Center Left', 'Background Control'), + 'center center' => _x('Center Center', 'Background Control'), + 'center right' => _x('Center Right', 'Background Control'), + 'bottom left' => _x('Bottom Left', 'Background Control'), + 'bottom center' => _x('Bottom Center', 'Background Control'), + 'bottom right' => _x('Bottom Right', 'Background Control'), + 'initial' => _x('Custom', 'Background Control'), + + ], + 'selectors' => [ + '{{SELECTOR}}' => 'background-position: {{VALUE}};', + ], + 'condition' => [ + 'background' => ['classic'], + 'image[url]!' => '', + ], + ]; + + $fields['xpos'] = [ + 'label' => _x('X Position', 'Background Control'), + 'type' => ControlsManager::SLIDER, + 'responsive' => true, + 'size_units' => ['px', 'em', '%', 'vw'], + 'default' => [ + 'unit' => 'px', + 'size' => 0, + ], + 'tablet_default' => [ + 'unit' => 'px', + 'size' => 0, + ], + 'mobile_default' => [ + 'unit' => 'px', + 'size' => 0, + ], + 'range' => [ + 'px' => [ + 'min' => -800, + 'max' => 800, + ], + 'em' => [ + 'min' => -100, + 'max' => 100, + ], + '%' => [ + 'min' => -100, + 'max' => 100, + ], + 'vw' => [ + 'min' => -100, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{SELECTOR}}' => 'background-position: {{SIZE}}{{UNIT}} {{ypos.SIZE}}{{ypos.UNIT}}', + ], + 'condition' => [ + 'background' => ['classic'], + 'position' => ['initial'], + 'image[url]!' => '', + ], + 'required' => true, + 'device_args' => [ + ControlsStack::RESPONSIVE_TABLET => [ + 'selectors' => [ + '{{SELECTOR}}' => 'background-position: {{SIZE}}{{UNIT}} {{ypos_tablet.SIZE}}{{ypos_tablet.UNIT}}', + ], + 'condition' => [ + 'background' => ['classic'], + 'position_tablet' => ['initial'], + ], + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'selectors' => [ + '{{SELECTOR}}' => 'background-position: {{SIZE}}{{UNIT}} {{ypos_mobile.SIZE}}{{ypos_mobile.UNIT}}', + ], + 'condition' => [ + 'background' => ['classic'], + 'position_mobile' => ['initial'], + ], + ], + ], + ]; + + $fields['ypos'] = [ + 'label' => _x('Y Position', 'Background Control'), + 'type' => ControlsManager::SLIDER, + 'responsive' => true, + 'size_units' => ['px', 'em', '%', 'vh'], + 'default' => [ + 'unit' => 'px', + 'size' => 0, + ], + 'tablet_default' => [ + 'unit' => 'px', + 'size' => 0, + ], + 'mobile_default' => [ + 'unit' => 'px', + 'size' => 0, + ], + 'range' => [ + 'px' => [ + 'min' => -800, + 'max' => 800, + ], + 'em' => [ + 'min' => -100, + 'max' => 100, + ], + '%' => [ + 'min' => -100, + 'max' => 100, + ], + 'vh' => [ + 'min' => -100, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{SELECTOR}}' => 'background-position: {{xpos.SIZE}}{{xpos.UNIT}} {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'background' => ['classic'], + 'position' => ['initial'], + 'image[url]!' => '', + ], + 'required' => true, + 'device_args' => [ + ControlsStack::RESPONSIVE_TABLET => [ + 'selectors' => [ + '{{SELECTOR}}' => 'background-position: {{xpos_tablet.SIZE}}{{xpos_tablet.UNIT}} {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'background' => ['classic'], + 'position_tablet' => ['initial'], + ], + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'selectors' => [ + '{{SELECTOR}}' => 'background-position: {{xpos_mobile.SIZE}}{{xpos_mobile.UNIT}} {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'background' => ['classic'], + 'position_mobile' => ['initial'], + ], + ], + ], + ]; + + $fields['attachment'] = [ + 'label' => _x('Attachment', 'Background Control'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => _x('Default', 'Background Control'), + 'scroll' => _x('Scroll', 'Background Control'), + 'fixed' => _x('Fixed', 'Background Control'), + ], + 'selectors' => [ + '{{SELECTOR}}' => 'background-attachment: {{VALUE}};', + ], + 'condition' => [ + 'background' => ['classic'], + 'image[url]!' => '', + ], + ]; + + $fields['attachment_alert'] = [ + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-control-field-description', + 'raw' => __('Note: Attachment Fixed works only on desktop.'), + 'separator' => 'none', + 'condition' => [ + 'background' => ['classic'], + 'image[url]!' => '', + 'attachment' => 'fixed', + ], + ]; + + $fields['repeat'] = [ + 'label' => _x('Repeat', 'Background Control'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'responsive' => true, + 'options' => [ + '' => _x('Default', 'Background Control'), + 'no-repeat' => _x('No-repeat', 'Background Control'), + 'repeat' => _x('Repeat', 'Background Control'), + 'repeat-x' => _x('Repeat-x', 'Background Control'), + 'repeat-y' => _x('Repeat-y', 'Background Control'), + ], + 'selectors' => [ + '{{SELECTOR}}' => 'background-repeat: {{VALUE}};', + ], + 'condition' => [ + 'background' => ['classic'], + 'image[url]!' => '', + ], + ]; + + $fields['size'] = [ + 'label' => _x('Size', 'Background Control'), + 'type' => ControlsManager::SELECT, + 'responsive' => true, + 'default' => '', + 'options' => [ + '' => _x('Default', 'Background Control'), + 'auto' => _x('Auto', 'Background Control'), + 'cover' => _x('Cover', 'Background Control'), + 'contain' => _x('Contain', 'Background Control'), + 'initial' => _x('Custom', 'Background Control'), + ], + 'selectors' => [ + '{{SELECTOR}}' => 'background-size: {{VALUE}};', + ], + 'condition' => [ + 'background' => ['classic'], + 'image[url]!' => '', + ], + ]; + + $fields['bg_width'] = [ + 'label' => _x('Width', 'Background Control'), + 'type' => ControlsManager::SLIDER, + 'responsive' => true, + 'size_units' => ['px', 'em', '%', 'vw'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 1000, + ], + '%' => [ + 'min' => 0, + 'max' => 100, + ], + 'vw' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'default' => [ + 'size' => 100, + 'unit' => '%', + ], + 'required' => true, + 'selectors' => [ + '{{SELECTOR}}' => 'background-size: {{SIZE}}{{UNIT}} auto', + + ], + 'condition' => [ + 'background' => ['classic'], + 'size' => ['initial'], + 'image[url]!' => '', + ], + 'device_args' => [ + ControlsStack::RESPONSIVE_TABLET => [ + 'selectors' => [ + '{{SELECTOR}}' => 'background-size: {{SIZE}}{{UNIT}} auto', + ], + 'condition' => [ + 'background' => ['classic'], + 'size_tablet' => ['initial'], + ], + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'selectors' => [ + '{{SELECTOR}}' => 'background-size: {{SIZE}}{{UNIT}} auto', + ], + 'condition' => [ + 'background' => ['classic'], + 'size_mobile' => ['initial'], + ], + ], + ], + ]; + + $fields['video_link'] = [ + 'label' => _x('Video Link', 'Background Control'), + 'type' => ControlsManager::TEXT, + 'placeholder' => 'https://www.youtube.com/watch?v=XHOmBV4js_E', + 'description' => __('YouTube link or video file (mp4 is recommended).'), + 'label_block' => true, + 'default' => '', + 'condition' => [ + 'background' => ['video'], + ], + 'of_type' => 'video', + ]; + + $fields['video_start'] = [ + 'label' => __('Start Time'), + 'type' => ControlsManager::NUMBER, + 'description' => __('Specify a start time (in seconds)'), + 'placeholder' => 10, + 'condition' => [ + 'background' => ['video'], + ], + 'of_type' => 'video', + ]; + + $fields['video_end'] = [ + 'label' => __('End Time'), + 'type' => ControlsManager::NUMBER, + 'description' => __('Specify an end time (in seconds)'), + 'placeholder' => 70, + 'condition' => [ + 'background' => ['video'], + ], + 'of_type' => 'video', + ]; + + $fields['video_fallback'] = [ + 'label' => _x('Background Fallback', 'Background Control'), + 'description' => __('This cover image will replace the background video on mobile and tablet devices.'), + 'type' => ControlsManager::MEDIA, + 'label_block' => true, + 'condition' => [ + 'background' => ['video'], + ], + 'selectors' => [ + '{{SELECTOR}}' => 'background: url("{{URL}}") 50% 50%; background-size: cover;', + ], + 'of_type' => 'video', + ]; + + return $fields; + } + + /** + * Get child default args. + * + * Retrieve the default arguments for all the child controls for a specific group + * control. + * + * @since 1.2.2 + * @access protected + * + * @return array Default arguments for all the child controls. + */ + protected function getChildDefaultArgs() + { + return [ + 'types' => ['classic', 'gradient'], + 'selector' => '{{WRAPPER}}:not(.elementor-motion-effects-element-type-background), {{WRAPPER}} > .elementor-motion-effects-container > .elementor-motion-effects-layer', + ]; + } + + /** + * Filter fields. + * + * Filter which controls to display, using `include`, `exclude`, `condition` + * and `of_type` arguments. + * + * @since 1.2.2 + * @access protected + * + * @return array Control fields. + */ + protected function filterFields() + { + $fields = parent::filterFields(); + + $args = $this->getArgs(); + + foreach ($fields as &$field) { + if (isset($field['of_type']) && !in_array($field['of_type'], $args['types'])) { + unset($field); + } + } + + return $fields; + } + + /** + * Prepare fields. + * + * Process background control fields before adding them to `add_control()`. + * + * @since 1.2.2 + * @access protected + * + * @param array $fields Background control fields. + * + * @return array Processed fields. + */ + protected function prepareFields($fields) + { + $args = $this->getArgs(); + + $background_types = self::getBackgroundTypes(); + + $choose_types = []; + + foreach ($args['types'] as $type) { + if (isset($background_types[$type])) { + $choose_types[$type] = $background_types[$type]; + } + } + + $fields['background']['options'] = $choose_types; + + return parent::prepareFields($fields); + } + + /** + * Get default options. + * + * Retrieve the default options of the background control. Used to return the + * default options while initializing the background control. + * + * @since 1.9.0 + * @access protected + * + * @return array Default background control options. + */ + protected function getDefaultOptions() + { + return [ + 'popover' => false, + ]; + } +} diff --git a/modules/creativeelements/includes/controls/groups/base.php b/modules/creativeelements/includes/controls/groups/base.php new file mode 100644 index 00000000..73b738a8 --- /dev/null +++ b/modules/creativeelements/includes/controls/groups/base.php @@ -0,0 +1,587 @@ +options) { + $this->initOptions(); + } + + if ($option) { + if (isset($this->options[$option])) { + return $this->options[$option]; + } + + return null; + } + + return $this->options; + } + + /** + * Add new controls to stack. + * + * Register multiple controls to allow the user to set/update data. + * + * @since 1.0.0 + * @access public + * + * @param ControlsStack $element The element stack. + * @param array $user_args The control arguments defined by the user. + * @param array $options Optional. The element options. Default is + * an empty array. + */ + final public function addControls(ControlsStack $element, array $user_args, array $options = []) + { + $this->initArgs($user_args); + + // Filter which controls to display + $filtered_fields = $this->filterFields(); + $filtered_fields = $this->prepareFields($filtered_fields); + + // For php < 7 + reset($filtered_fields); + + if (isset($this->args['separator'])) { + $filtered_fields[key($filtered_fields)]['separator'] = $this->args['separator']; + } + + $has_injection = false; + + if (!empty($options['position'])) { + $has_injection = true; + + $element->startInjection($options['position']); + + unset($options['position']); + } + + if ($this->getOptions('popover')) { + $this->startPopover($element); + } + + foreach ($filtered_fields as $field_id => $field_args) { + // Add the global group args to the control + $field_args = $this->addGroupArgsToField($field_id, $field_args); + + // Register the control + $id = $this->getControlsPrefix() . $field_id; + + if (!empty($field_args['responsive'])) { + unset($field_args['responsive']); + + $element->addResponsiveControl($id, $field_args, $options); + } else { + $element->addControl($id, $field_args, $options); + } + } + + if ($this->getOptions('popover')) { + $element->endPopover(); + } + + if ($has_injection) { + $element->endInjection(); + } + } + + /** + * Get arguments. + * + * Retrieve group control arguments. + * + * @since 1.0.0 + * @access public + * + * @return array Group control arguments. + */ + final public function getArgs() + { + return $this->args; + } + + /** + * Get fields. + * + * Retrieve group control fields. + * + * @since 1.2.2 + * @access public + * + * @return array Control fields. + */ + final public function getFields() + { + if (null === static::$fields) { + static::$fields = $this->initFields(); + } + + return static::$fields; + } + + /** + * Get controls prefix. + * + * Retrieve the prefix of the group control, which is `{{ControlName}}_`. + * + * @since 1.0.0 + * @access public + * + * @return string Control prefix. + */ + public function getControlsPrefix() + { + return $this->args['name'] . '_'; + } + + /** + * Get group control classes. + * + * Retrieve the classes of the group control. + * + * @since 1.0.0 + * @access public + * + * @return string Group control classes. + */ + public function getBaseGroupClasses() + { + return 'elementor-group-control-' . static::getType() . ' elementor-group-control'; + } + + /** + * Init fields. + * + * Initialize group control fields. + * + * @abstract + * @since 1.2.2 + * @access protected + */ + abstract protected function initFields(); + + /** + * Get default options. + * + * Retrieve the default options of the group control. Used to return the + * default options while initializing the group control. + * + * @since 1.9.0 + * @access protected + * + * @return array Default group control options. + */ + protected function getDefaultOptions() + { + return []; + } + + /** + * Get child default arguments. + * + * Retrieve the default arguments for all the child controls for a specific group + * control. + * + * @since 1.2.2 + * @access protected + * + * @return array Default arguments for all the child controls. + */ + protected function getChildDefaultArgs() + { + return []; + } + + /** + * Filter fields. + * + * Filter which controls to display, using `include`, `exclude` and the + * `condition` arguments. + * + * @since 1.2.2 + * @access protected + * + * @return array Control fields. + */ + protected function filterFields() + { + $args = $this->getArgs(); + + $fields = $this->getFields(); + + if (!empty($args['include'])) { + $fields = array_intersect_key($fields, array_flip($args['include'])); + } + + if (!empty($args['exclude'])) { + $fields = array_diff_key($fields, array_flip($args['exclude'])); + } + + return $fields; + } + + /** + * Add group arguments to field. + * + * Register field arguments to group control. + * + * @since 1.2.2 + * @access protected + * + * @param string $control_id Group control id. + * @param array $field_args Group control field arguments. + * + * @return array + */ + protected function addGroupArgsToField($control_id, $field_args) + { + $args = $this->getArgs(); + + if (!empty($args['tab'])) { + $field_args['tab'] = $args['tab']; + } + + if (!empty($args['section'])) { + $field_args['section'] = $args['section']; + } + + $field_args['classes'] = $this->getBaseGroupClasses() . ' elementor-group-control-' . $control_id; + + foreach (['condition', 'conditions'] as $condition_type) { + if (!empty($args[$condition_type])) { + if (empty($field_args[$condition_type])) { + $field_args[$condition_type] = []; + } + + $field_args[$condition_type] += $args[$condition_type]; + } + } + + return $field_args; + } + + /** + * Prepare fields. + * + * Process group control fields before adding them to `add_control()`. + * + * @since 1.2.2 + * @access protected + * + * @param array $fields Group control fields. + * + * @return array Processed fields. + */ + protected function prepareFields($fields) + { + $popover_options = $this->getOptions('popover'); + + $popover_name = !$popover_options ? null : $popover_options['starter_name']; + + foreach ($fields as $field_key => &$field) { + if ($popover_name) { + $field['condition'][$popover_name . '!'] = ''; + } + + if (isset($this->args['fields_options']['__all'])) { + $field = array_merge($field, $this->args['fields_options']['__all']); + } + + if (isset($this->args['fields_options'][$field_key])) { + $field = array_merge($field, $this->args['fields_options'][$field_key]); + } + + if (!empty($field['condition'])) { + $field = $this->addConditionPrefix($field); + } + + if (!empty($field['conditions'])) { + $field['conditions'] = $this->addConditionsPrefix($field['conditions']); + } + + if (!empty($field['selectors'])) { + $field['selectors'] = $this->handleSelectors($field['selectors']); + } + + if (!empty($field['device_args'])) { + foreach ($field['device_args'] as $device => $device_arg) { + if (!empty($field['device_args'][$device]['condition'])) { + $field['device_args'][$device] = $this->addConditionPrefix($field['device_args'][$device]); + } + + if (!empty($field['device_args'][$device]['conditions'])) { + $field['device_args'][$device]['conditions'] = $this->addConditionsPrefix($field['device_args'][$device]['conditions']); + } + + if (!empty($device_arg['selectors'])) { + $field['device_args'][$device]['selectors'] = $this->handleSelectors($device_arg['selectors']); + } + } + } + } + + return $fields; + } + + /** + * Init options. + * + * Initializing group control options. + * + * @since 1.9.0 + * @access private + */ + private function initOptions() + { + $default_options = [ + 'popover' => [ + 'starter_name' => 'popover_toggle', + 'starter_value' => 'custom', + 'starter_title' => '', + ], + ]; + + $this->options = array_replace_recursive($default_options, $this->getDefaultOptions()); + } + + /** + * Init arguments. + * + * Initializing group control base class. + * + * @since 1.2.2 + * @access protected + * + * @param array $args Group control settings value. + */ + protected function initArgs($args) + { + $this->args = array_merge($this->getDefaultArgs(), $this->getChildDefaultArgs(), $args); + } + + /** + * Get default arguments. + * + * Retrieve the default arguments of the group control. Used to return the + * default arguments while initializing the group control. + * + * @since 1.2.2 + * @access private + * + * @return array Control default arguments. + */ + private function getDefaultArgs() + { + return [ + 'default' => '', + 'selector' => '{{WRAPPER}}', + 'fields_options' => [], + ]; + } + + /** + * Add condition prefix. + * + * Used to add the group prefix to controls with conditions, to + * distinguish them from other controls with the same name. + * + * This way Elementor can apply condition logic to a specific control in a + * group control. + * + * @since 1.2.0 + * @access private + * + * @param array $field Group control field. + * + * @return array Group control field. + */ + private function addConditionPrefix($field) + { + $controls_prefix = $this->getControlsPrefix(); + + $prefixed_condition_keys = array_map( + function ($key) use ($controls_prefix) { + return $controls_prefix . $key; + }, + array_keys($field['condition']) + ); + + $field['condition'] = array_combine( + $prefixed_condition_keys, + $field['condition'] + ); + + return $field; + } + + private function addConditionsPrefix($conditions) + { + $controls_prefix = $this->getControlsPrefix(); + + foreach ($conditions['terms'] as &$condition) { + if (isset($condition['terms'])) { + $condition = $this->addConditionsPrefix($condition); + + continue; + } + + $condition['name'] = $controls_prefix . $condition['name']; + } + + return $conditions; + } + + /** + * Handle selectors. + * + * Used to process the CSS selector of group control fields. When using + * group control, Elementor needs to apply the selector to different fields. + * This method handles the process. + * + * In addition, it handles selector values from other fields and process the + * css. + * + * @since 1.2.2 + * @access private + * + * @param array $selectors An array of selectors to process. + * + * @return array Processed selectors. + */ + private function handleSelectors($selectors) + { + $args = $this->getArgs(); + + $selectors = array_combine( + array_map( + function ($key) use ($args) { + return str_replace('{{SELECTOR}}', $args['selector'], $key); + }, + array_keys($selectors) + ), + $selectors + ); + + if (!$selectors) { + return $selectors; + } + + $controls_prefix = $this->getControlsPrefix(); + + foreach ($selectors as &$selector) { + $selector = preg_replace_callback('/\{\{\K(.*?)(?=}})/', function ($matches) use ($controls_prefix) { + return preg_replace_callback('/[^ ]+(?=\.)/', function ($sub_matches) use ($controls_prefix) { + return $controls_prefix . $sub_matches[0]; + }, $matches[1]); + }, $selector); + } + + return $selectors; + } + + /** + * Start popover. + * + * Starts a group controls popover. + * + * @since 1.9.1 + * @access private + * @param ControlsStack $element Element. + */ + private function startPopover(ControlsStack $element) + { + $popover_options = $this->getOptions('popover'); + + $settings = $this->getArgs(); + + if (!empty($settings['label'])) { + $label = $settings['label']; + } else { + $label = $popover_options['starter_title']; + } + + $control_params = [ + 'type' => ControlsManager::POPOVER_TOGGLE, + 'label' => $label, + 'return_value' => $popover_options['starter_value'], + ]; + + if (!empty($popover_options['settings'])) { + $control_params = array_replace_recursive($control_params, $popover_options['settings']); + } + + foreach (['condition', 'conditions'] as $key) { + if (!empty($settings[$key])) { + $control_params[$key] = $settings[$key]; + } + } + + $starter_name = $popover_options['starter_name']; + + if (isset($this->args['fields_options'][$starter_name])) { + $control_params = array_merge($control_params, $this->args['fields_options'][$starter_name]); + } + + $element->addControl($this->getControlsPrefix() . $starter_name, $control_params); + + $element->startPopover(); + } +} diff --git a/modules/creativeelements/includes/controls/groups/border.php b/modules/creativeelements/includes/controls/groups/border.php new file mode 100644 index 00000000..28e34f1f --- /dev/null +++ b/modules/creativeelements/includes/controls/groups/border.php @@ -0,0 +1,127 @@ + _x('Border Type', 'Border Control'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('None'), + 'solid' => _x('Solid', 'Border Control'), + 'double' => _x('Double', 'Border Control'), + 'dotted' => _x('Dotted', 'Border Control'), + 'dashed' => _x('Dashed', 'Border Control'), + 'groove' => _x('Groove', 'Border Control'), + ], + 'selectors' => [ + '{{SELECTOR}}' => 'border-style: {{VALUE}};', + ], + ]; + + $fields['width'] = [ + 'label' => _x('Width', 'Border Control'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{SELECTOR}}' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'border!' => '', + ], + 'responsive' => true, + ]; + + $fields['color'] = [ + 'label' => _x('Color', 'Border Control'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{SELECTOR}}' => 'border-color: {{VALUE}};', + ], + 'condition' => [ + 'border!' => '', + ], + ]; + + return $fields; + } + + /** + * Get default options. + * + * Retrieve the default options of the border control. Used to return the + * default options while initializing the border control. + * + * @since 1.9.0 + * @access protected + * + * @return array Default border control options. + */ + protected function getDefaultOptions() + { + return [ + 'popover' => false, + ]; + } +} diff --git a/modules/creativeelements/includes/controls/groups/box-shadow.php b/modules/creativeelements/includes/controls/groups/box-shadow.php new file mode 100644 index 00000000..6c97e956 --- /dev/null +++ b/modules/creativeelements/includes/controls/groups/box-shadow.php @@ -0,0 +1,114 @@ + _x('Box Shadow', 'Box Shadow Control'), + 'type' => ControlsManager::BOX_SHADOW, + 'selectors' => [ + '{{SELECTOR}}' => 'box-shadow: {{HORIZONTAL}}px {{VERTICAL}}px {{BLUR}}px {{SPREAD}}px {{COLOR}} {{box_shadow_position.VALUE}};', + ], + ]; + + $controls['box_shadow_position'] = [ + 'label' => _x('Position', 'Box Shadow Control'), + 'type' => ControlsManager::SELECT, + 'options' => [ + ' ' => _x('Outline', 'Box Shadow Control'), + 'inset' => _x('Inset', 'Box Shadow Control'), + ], + 'default' => ' ', + 'render_type' => 'ui', + ]; + + return $controls; + } + + /** + * Get default options. + * + * Retrieve the default options of the box shadow control. Used to return the + * default options while initializing the box shadow control. + * + * @since 1.9.0 + * @access protected + * + * @return array Default box shadow control options. + */ + protected function getDefaultOptions() + { + return [ + 'popover' => [ + 'starter_title' => _x('Box Shadow', 'Box Shadow Control'), + 'starter_name' => 'box_shadow_type', + 'starter_value' => 'yes', + 'settings' => [ + 'render_type' => 'ui', + ], + ], + ]; + } +} diff --git a/modules/creativeelements/includes/controls/groups/css-filter.php b/modules/creativeelements/includes/controls/groups/css-filter.php new file mode 100644 index 00000000..e5936a1e --- /dev/null +++ b/modules/creativeelements/includes/controls/groups/css-filter.php @@ -0,0 +1,182 @@ + _x('Blur', 'Filter Control'), + 'type' => ControlsManager::SLIDER, + 'required' => 'true', + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 10, + 'step' => 0.1, + ], + ], + 'default' => [ + 'size' => 0, + ], + 'selectors' => [ + '{{SELECTOR}}' => 'filter: brightness( {{brightness.SIZE}}% ) contrast( {{contrast.SIZE}}% ) saturate( {{saturate.SIZE}}% ) blur( {{blur.SIZE}}px ) hue-rotate( {{hue.SIZE}}deg )', + ], + ]; + + $controls['brightness'] = [ + 'label' => _x('Brightness', 'Filter Control'), + 'type' => ControlsManager::SLIDER, + 'render_type' => 'ui', + 'required' => 'true', + 'default' => [ + 'size' => 100, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 200, + ], + ], + 'separator' => 'none', + ]; + + $controls['contrast'] = [ + 'label' => _x('Contrast', 'Filter Control'), + 'type' => ControlsManager::SLIDER, + 'render_type' => 'ui', + 'required' => 'true', + 'default' => [ + 'size' => 100, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 200, + ], + ], + 'separator' => 'none', + ]; + + $controls['saturate'] = [ + 'label' => _x('Saturation', 'Filter Control'), + 'type' => ControlsManager::SLIDER, + 'render_type' => 'ui', + 'required' => 'true', + 'default' => [ + 'size' => 100, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 200, + ], + ], + 'separator' => 'none', + ]; + + $controls['hue'] = [ + 'label' => _x('Hue', 'Filter Control'), + 'type' => ControlsManager::SLIDER, + 'render_type' => 'ui', + 'required' => 'true', + 'default' => [ + 'size' => 0, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 360, + ], + ], + 'separator' => 'none', + ]; + + return $controls; + } + + /** + * Get default options. + * + * Retrieve the default options of the CSS filter control. Used to return the + * default options while initializing the CSS filter control. + * + * @since 2.1.0 + * @access protected + * + * @return array Default CSS filter control options. + */ + protected function getDefaultOptions() + { + return [ + 'popover' => [ + 'starter_name' => 'css_filter', + 'starter_title' => _x('CSS Filters', 'Filter Control'), + 'settings' => [ + 'render_type' => 'ui', + ], + ], + ]; + } +} diff --git a/modules/creativeelements/includes/controls/groups/image-size.php b/modules/creativeelements/includes/controls/groups/image-size.php new file mode 100644 index 00000000..9a039aee --- /dev/null +++ b/modules/creativeelements/includes/controls/groups/image-size.php @@ -0,0 +1,318 @@ +'; + + /** + * Get Attachment Image HTML + * + * Filters the Attachment Image HTML + * + * @since 2.4.0 + * @param string $html the attachment image HTML string + * @param array $settings Control settings. + * @param string $image_size_key Optional. Settings key for image size. + * Default is `image`. + * @param string $image_key Optional. Settings key for image. Default + * is null. If not defined uses image size key + * as the image key. + */ + return apply_filters('elementor/image_size/get_attachment_image_html', $html, $settings, $setting_key, $loading); + } + + /** + * Get all image sizes. + * + * @since 2.0.0 + * @access public + * @param string $type Image type [`products`, `categories`, `manufacturers`, `suppliers`, `stores`] + * @param bool $full Add full size option (Optional) + * + * @return array + */ + public static function getAllImageSizes($type, $full = false) + { + static $options = []; + + if (empty($options[$type])) { + $options[$type] = []; + $sizes = \ImageType::getImagesTypes($type); + + usort($sizes, function ($a, $b) { + return ($b['width'] * $b['height']) - ($a['width'] * $a['height']); + }); + foreach ($sizes as &$size) { + $options[$type][$size['name']] = "{$size['name']} ({$size['width']} × {$size['height']})"; + } + } + return $full ? ['' => _x('Full', 'Image Size Control')] + $options[$type] : $options[$type]; + } + + /** + * Get attachment image src. + * + * Retrieve the attachment image source URL. + * + * @since 1.0.0 + * @access public + * @static + * + * @param string $attachment_id The attachment ID. + * @param string $image_size_key Settings key for image size. + * @param array $settings Control settings. + * + * @return string Attachment image source URL. + */ + public static function getAttachmentImageSrc($attachment_id, $image_size_key, array $settings) + { + return false; + } + + /** + * Get child default arguments. + * + * Retrieve the default arguments for all the child controls for a specific group + * control. + * + * @since 1.2.2 + * @access protected + * + * @return array Default arguments for all the child controls. + */ + protected function getChildDefaultArgs() + { + return [ + 'include' => [], + 'exclude' => [], + ]; + } + + /** + * Init fields. + * + * Initialize image size control fields. + * + * @since 1.2.2 + * @access protected + * + * @return array Control fields. + */ + protected function initFields() + { + $fields = []; + + $fields['size'] = [ + 'label' => _x('Image Size', 'Image Size Control'), + 'type' => ControlsManager::SELECT, + 'label_block' => false, + ]; + + // $fields['custom_dimension'] = [ + // 'label' => _x('Image Dimension', 'Image Size Control'), + // 'type' => ControlsManager::IMAGE_DIMENSIONS, + // 'description' => __('You can crop the original image size to any custom size. You can also set a single value for height or width in order to keep the original size ratio.'), + // 'condition' => [ + // 'size' => 'custom', + // ], + // 'separator' => 'none', + // ]; + + return $fields; + } + + /** + * Prepare fields. + * + * Process image size control fields before adding them to `add_control()`. + * + * @since 1.2.2 + * @access protected + * + * @param array $fields Image size control fields. + * + * @return array Processed fields. + */ + protected function prepareFields($fields) + { + $image_sizes = $this->getImageSizes(); + + $args = $this->getArgs(); + + if (!empty($args['default']) && isset($image_sizes[$args['default']])) { + $default_value = $args['default']; + } else { + // Get the first item for default value. + $default_value = array_keys($image_sizes); + $default_value = array_shift($default_value); + } + + $fields['size']['options'] = $image_sizes; + + $fields['size']['default'] = $default_value; + + if (!isset($image_sizes['custom'])) { + unset($fields['custom_dimension']); + } + + return parent::prepareFields($fields); + } + + /** + * Get image sizes. + * + * Retrieve available image sizes after filtering `include` and `exclude` arguments. + * + * @since 2.0.0 + * @access private + * + * @return array Filtered image sizes. + */ + private function getImageSizes() + { + $wp_image_sizes = [ + // todo + ]; + + $args = $this->getArgs(); + + if ($args['include']) { + $wp_image_sizes = array_intersect_key($wp_image_sizes, array_flip($args['include'])); + } elseif ($args['exclude']) { + $wp_image_sizes = array_diff_key($wp_image_sizes, array_flip($args['exclude'])); + } + + $image_sizes = []; + + foreach ($wp_image_sizes as $size_key => $size_attributes) { + $control_title = ucwords(str_replace('_', ' ', $size_key)); + if (is_array($size_attributes)) { + $control_title .= sprintf(' - %d x %d', $size_attributes['width'], $size_attributes['height']); + } + + $image_sizes[$size_key] = $control_title; + } + + $image_sizes['full'] = _x('Full', 'Image Size Control'); + + if (!empty($args['include']['custom']) || !in_array('custom', $args['exclude'])) { + $image_sizes['custom'] = _x('Custom', 'Image Size Control'); + } + + return $image_sizes; + } + + /** + * Get default options. + * + * Retrieve the default options of the image size control. Used to return the + * default options while initializing the image size control. + * + * @since 1.9.0 + * @access protected + * + * @return array Default image size control options. + */ + protected function getDefaultOptions() + { + return [ + 'popover' => false, + ]; + } +} diff --git a/modules/creativeelements/includes/controls/groups/index.php b/modules/creativeelements/includes/controls/groups/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/includes/controls/groups/index.php @@ -0,0 +1,8 @@ + _x('Text Shadow', 'Text Shadow Control'), + 'type' => ControlsManager::TEXT_SHADOW, + 'selectors' => [ + '{{SELECTOR}}' => 'text-shadow: {{HORIZONTAL}}px {{VERTICAL}}px {{BLUR}}px {{COLOR}};', + ], + ]; + + return $controls; + } + + /** + * Get default options. + * + * Retrieve the default options of the text shadow control. Used to return the + * default options while initializing the text shadow control. + * + * @since 1.9.0 + * @access protected + * + * @return array Default text shadow control options. + */ + protected function getDefaultOptions() + { + return [ + 'popover' => [ + 'starter_title' => _x('Text Shadow', 'Text Shadow Control'), + 'starter_name' => 'text_shadow_type', + 'starter_value' => 'yes', + 'settings' => [ + 'render_type' => 'ui', + ], + ], + ]; + } +} diff --git a/modules/creativeelements/includes/controls/groups/text-stroke.php b/modules/creativeelements/includes/controls/groups/text-stroke.php new file mode 100644 index 00000000..34602cba --- /dev/null +++ b/modules/creativeelements/includes/controls/groups/text-stroke.php @@ -0,0 +1,130 @@ + __('Text Stroke'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em', 'rem'], + 'range' => [ + 'px' => [ + 'max' => 10, + ], + 'em' => [ + 'min' => 0, + 'max' => 1, + 'step' => 0.01, + ], + 'rem' => [ + 'min' => 0, + 'max' => 1, + 'step' => 0.01, + ], + ], + 'responsive' => true, + 'selector' => '{{WRAPPER}}', + 'selectors' => [ + '{{SELECTOR}}' => '-webkit-text-stroke-width: {{SIZE}}{{UNIT}}; stroke-width: {{SIZE}}{{UNIT}};', + ], + ]; + + $controls['stroke_color'] = [ + 'label' => __('Stroke Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#000', + 'selector' => '{{WRAPPER}}', + 'selectors' => [ + '{{SELECTOR}}' => '-webkit-text-stroke-color: {{VALUE}}; stroke: {{VALUE}};', + ], + ]; + + return $controls; + } + + /** + * Get default options. + * + * Retrieve the default options of the text stroke control. Used to return the + * default options while initializing the text stroke control. + * + * @since 2.5.9 + * @access protected + * + * @return array Default text stroke control options. + */ + protected function getDefaultOptions() + { + return [ + 'popover' => [ + 'starter_title' => _x('Text Stroke', 'Text Stroke Control'), + 'starter_name' => 'text_stroke_type', + 'starter_value' => 'yes', + 'settings' => [ + 'render_type' => 'ui', + ], + ], + ]; + } +} diff --git a/modules/creativeelements/includes/controls/groups/typography.php b/modules/creativeelements/includes/controls/groups/typography.php new file mode 100644 index 00000000..e2325ee3 --- /dev/null +++ b/modules/creativeelements/includes/controls/groups/typography.php @@ -0,0 +1,309 @@ +getModel()->getSettings('elementor_default_generic_fonts'); + + if ($default_fonts) { + $default_fonts = ', ' . $default_fonts; + } + + $fields['font_family'] = [ + 'label' => _x('Family', 'Typography Control'), + 'type' => ControlsManager::FONT, + 'default' => '', + 'selector_value' => 'font-family: "{{VALUE}}"' . $default_fonts . ';', + ]; + + $fields['font_size'] = [ + 'label' => _x('Size', 'Typography Control'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em', 'rem', 'vw'], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 200, + ], + 'vw' => [ + 'min' => 0.1, + 'max' => 10, + 'step' => 0.1, + ], + ], + 'responsive' => true, + 'selector_value' => 'font-size: {{SIZE}}{{UNIT}}', + ]; + + $typo_weight_options = [ + '' => __('Default'), + ]; + + foreach (array_merge(['normal', 'bold'], range(100, 900, 100)) as $weight) { + $typo_weight_options[$weight] = call_user_func('ucfirst', $weight); + } + + $fields['font_weight'] = [ + 'label' => _x('Weight', 'Typography Control'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => &$typo_weight_options, + ]; + + $fields['text_transform'] = [ + 'label' => _x('Transform', 'Typography Control'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'uppercase' => _x('Uppercase', 'Typography Control'), + 'lowercase' => _x('Lowercase', 'Typography Control'), + 'capitalize' => _x('Capitalize', 'Typography Control'), + 'none' => _x('Normal', 'Typography Control'), + ], + ]; + + $fields['font_style'] = [ + 'label' => _x('Style', 'Typography Control'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'normal' => _x('Normal', 'Typography Control'), + 'italic' => _x('Italic', 'Typography Control'), + 'oblique' => _x('Oblique', 'Typography Control'), + ], + ]; + + $fields['text_decoration'] = [ + 'label' => _x('Decoration', 'Typography Control'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'underline' => _x('Underline', 'Typography Control'), + 'overline' => _x('Overline', 'Typography Control'), + 'line-through' => _x('Line Through', 'Typography Control'), + 'none' => _x('None', 'Typography Control'), + ], + ]; + + $fields['line_height'] = [ + 'label' => _x('Line-Height', 'Typography Control'), + 'type' => ControlsManager::SLIDER, + 'desktop_default' => [ + 'unit' => 'em', + ], + 'tablet_default' => [ + 'unit' => 'em', + ], + 'mobile_default' => [ + 'unit' => 'em', + ], + 'range' => [ + 'px' => [ + 'min' => 1, + ], + ], + 'responsive' => true, + 'size_units' => ['px', 'em'], + 'selector_value' => 'line-height: {{SIZE}}{{UNIT}}', + ]; + + $fields['letter_spacing'] = [ + 'label' => _x('Letter Spacing', 'Typography Control'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -5, + 'max' => 10, + 'step' => 0.1, + ], + ], + 'responsive' => true, + 'selector_value' => 'letter-spacing: {{SIZE}}{{UNIT}}', + ]; + + return $fields; + } + + /** + * Prepare fields. + * + * Process typography control fields before adding them to `add_control()`. + * + * @since 1.2.3 + * @access protected + * + * @param array $fields Typography control fields. + * + * @return array Processed fields. + */ + protected function prepareFields($fields) + { + array_walk( + $fields, + function (&$field, $field_name) { + if (in_array($field_name, ['typography', 'popover_toggle'])) { + return; + } + + $selector_value = !empty($field['selector_value']) ? $field['selector_value'] : str_replace('_', '-', $field_name) . ': {{VALUE}};'; + + $field['selectors'] = [ + '{{SELECTOR}}' => $selector_value, + ]; + } + ); + + return parent::prepareFields($fields); + } + + /** + * Add group arguments to field. + * + * Register field arguments to typography control. + * + * @since 1.2.2 + * @access protected + * + * @param string $control_id Typography control id. + * @param array $field_args Typography control field arguments. + * + * @return array Field arguments. + */ + protected function addGroupArgsToField($control_id, $field_args) + { + $field_args = parent::addGroupArgsToField($control_id, $field_args); + + $args = $this->getArgs(); + + if (in_array($control_id, self::getSchemeFieldsKeys()) && !empty($args['scheme'])) { + $field_args['scheme'] = [ + 'type' => self::getType(), + 'value' => $args['scheme'], + 'key' => $control_id, + ]; + } + + return $field_args; + } + + /** + * Get default options. + * + * Retrieve the default options of the typography control. Used to return the + * default options while initializing the typography control. + * + * @since 1.9.0 + * @access protected + * + * @return array Default typography control options. + */ + protected function getDefaultOptions() + { + return [ + 'popover' => [ + 'starter_name' => 'typography', + 'starter_title' => __('Typography'), + 'settings' => [ + 'render_type' => 'ui', + ], + ], + ]; + } +} diff --git a/modules/creativeelements/includes/controls/heading.php b/modules/creativeelements/includes/controls/heading.php new file mode 100644 index 00000000..1350b558 --- /dev/null +++ b/modules/creativeelements/includes/controls/heading.php @@ -0,0 +1,75 @@ + true, + ]; + } + + /** + * Render heading control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + ?> +
+

{{ data.label }}

+
+ + + 'Grow', + 'shrink' => 'Shrink', + 'pulse' => 'Pulse', + 'pulse-grow' => 'Pulse Grow', + 'pulse-shrink' => 'Pulse Shrink', + 'push' => 'Push', + 'pop' => 'Pop', + 'bounce-in' => 'Bounce In', + 'bounce-out' => 'Bounce Out', + 'rotate' => 'Rotate', + 'grow-rotate' => 'Grow Rotate', + 'float' => 'Float', + 'sink' => 'Sink', + 'bob' => 'Bob', + 'hang' => 'Hang', + 'skew' => 'Skew', + 'skew-forward' => 'Skew Forward', + 'skew-backward' => 'Skew Backward', + 'wobble-vertical' => 'Wobble Vertical', + 'wobble-horizontal' => 'Wobble Horizontal', + 'wobble-to-bottom-right' => 'Wobble To Bottom Right', + 'wobble-to-top-right' => 'Wobble To Top Right', + 'wobble-top' => 'Wobble Top', + 'wobble-bottom' => 'Wobble Bottom', + 'wobble-skew' => 'Wobble Skew', + 'buzz' => 'Buzz', + 'buzz-out' => 'Buzz Out', + ]; + + $additional_animations = []; + /** + * Element hover animations list. + * + * @since 2.4.0 + * + * @param array $additional_animations Additional Animations array. + */ + $additional_animations = apply_filters('elementor/controls/hover_animations/additional_animations', $additional_animations); + self::$_animations = array_merge(self::$_animations, $additional_animations); + } + + return self::$_animations; + } + + /** + * Render hover animation control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + true, + ]; + } +} diff --git a/modules/creativeelements/includes/controls/icon.php b/modules/creativeelements/includes/controls/icon.php new file mode 100644 index 00000000..d99f4679 --- /dev/null +++ b/modules/creativeelements/includes/controls/icon.php @@ -0,0 +1,896 @@ + '500px', + 'fa fa-address-book' => 'address-book', + 'fa fa-address-book-o' => 'address-book-o', + 'fa fa-address-card' => 'address-card', + 'fa fa-address-card-o' => 'address-card-o', + 'fa fa-adjust' => 'adjust', + 'fa fa-adn' => 'adn', + 'fa fa-align-center' => 'align-center', + 'fa fa-align-justify' => 'align-justify', + 'fa fa-align-left' => 'align-left', + 'fa fa-align-right' => 'align-right', + 'fa fa-amazon' => 'amazon', + 'fa fa-ambulance' => 'ambulance', + 'fa fa-american-sign-language-interpreting' => 'american-sign-language-interpreting', + 'fa fa-anchor' => 'anchor', + 'fa fa-android' => 'android', + 'fa fa-angellist' => 'angellist', + 'fa fa-angle-double-down' => 'angle-double-down', + 'fa fa-angle-double-left' => 'angle-double-left', + 'fa fa-angle-double-right' => 'angle-double-right', + 'fa fa-angle-double-up' => 'angle-double-up', + 'fa fa-angle-down' => 'angle-down', + 'fa fa-angle-left' => 'angle-left', + 'fa fa-angle-right' => 'angle-right', + 'fa fa-angle-up' => 'angle-up', + 'fa fa-apple' => 'apple', + 'fa fa-archive' => 'archive', + 'fa fa-area-chart' => 'area-chart', + 'fa fa-arrow-circle-down' => 'arrow-circle-down', + 'fa fa-arrow-circle-left' => 'arrow-circle-left', + 'fa fa-arrow-circle-o-down' => 'arrow-circle-o-down', + 'fa fa-arrow-circle-o-left' => 'arrow-circle-o-left', + 'fa fa-arrow-circle-o-right' => 'arrow-circle-o-right', + 'fa fa-arrow-circle-o-up' => 'arrow-circle-o-up', + 'fa fa-arrow-circle-right' => 'arrow-circle-right', + 'fa fa-arrow-circle-up' => 'arrow-circle-up', + 'fa fa-arrow-down' => 'arrow-down', + 'fa fa-arrow-left' => 'arrow-left', + 'fa fa-arrow-right' => 'arrow-right', + 'fa fa-arrow-up' => 'arrow-up', + 'fa fa-arrows' => 'arrows', + 'fa fa-arrows-alt' => 'arrows-alt', + 'fa fa-arrows-h' => 'arrows-h', + 'fa fa-arrows-v' => 'arrows-v', + 'fa fa-asl-interpreting' => 'asl-interpreting', + 'fa fa-assistive-listening-systems' => 'assistive-listening-systems', + 'fa fa-asterisk' => 'asterisk', + 'fa fa-at' => 'at', + 'fa fa-audio-description' => 'audio-description', + 'fa fa-automobile' => 'automobile', + 'fa fa-backward' => 'backward', + 'fa fa-balance-scale' => 'balance-scale', + 'fa fa-ban' => 'ban', + 'fa fa-bandcamp' => 'bandcamp', + 'fa fa-bank' => 'bank', + 'fa fa-bar-chart' => 'bar-chart', + 'fa fa-bar-chart-o' => 'bar-chart-o', + 'fa fa-barcode' => 'barcode', + 'fa fa-bars' => 'bars', + 'fa fa-bath' => 'bath', + 'fa fa-bathtub' => 'bathtub', + 'fa fa-battery' => 'battery', + 'fa fa-battery-0' => 'battery-0', + 'fa fa-battery-1' => 'battery-1', + 'fa fa-battery-2' => 'battery-2', + 'fa fa-battery-3' => 'battery-3', + 'fa fa-battery-4' => 'battery-4', + 'fa fa-battery-empty' => 'battery-empty', + 'fa fa-battery-full' => 'battery-full', + 'fa fa-battery-half' => 'battery-half', + 'fa fa-battery-quarter' => 'battery-quarter', + 'fa fa-battery-three-quarters' => 'battery-three-quarters', + 'fa fa-bed' => 'bed', + 'fa fa-beer' => 'beer', + 'fa fa-behance' => 'behance', + 'fa fa-behance-square' => 'behance-square', + 'fa fa-bell' => 'bell', + 'fa fa-bell-o' => 'bell-o', + 'fa fa-bell-slash' => 'bell-slash', + 'fa fa-bell-slash-o' => 'bell-slash-o', + 'fa fa-bicycle' => 'bicycle', + 'fa fa-binoculars' => 'binoculars', + 'fa fa-birthday-cake' => 'birthday-cake', + 'fa fa-bitbucket' => 'bitbucket', + 'fa fa-bitbucket-square' => 'bitbucket-square', + 'fa fa-bitcoin' => 'bitcoin', + 'fa fa-black-tie' => 'black-tie', + 'fa fa-blind' => 'blind', + 'fa fa-bluetooth' => 'bluetooth', + 'fa fa-bluetooth-b' => 'bluetooth-b', + 'fa fa-bold' => 'bold', + 'fa fa-bolt' => 'bolt', + 'fa fa-bomb' => 'bomb', + 'fa fa-book' => 'book', + 'fa fa-bookmark' => 'bookmark', + 'fa fa-bookmark-o' => 'bookmark-o', + 'fa fa-braille' => 'braille', + 'fa fa-briefcase' => 'briefcase', + 'fa fa-btc' => 'btc', + 'fa fa-bug' => 'bug', + 'fa fa-building' => 'building', + 'fa fa-building-o' => 'building-o', + 'fa fa-bullhorn' => 'bullhorn', + 'fa fa-bullseye' => 'bullseye', + 'fa fa-bus' => 'bus', + 'fa fa-buysellads' => 'buysellads', + 'fa fa-cab' => 'cab', + 'fa fa-calculator' => 'calculator', + 'fa fa-calendar' => 'calendar', + 'fa fa-calendar-check-o' => 'calendar-check-o', + 'fa fa-calendar-minus-o' => 'calendar-minus-o', + 'fa fa-calendar-o' => 'calendar-o', + 'fa fa-calendar-plus-o' => 'calendar-plus-o', + 'fa fa-calendar-times-o' => 'calendar-times-o', + 'fa fa-camera' => 'camera', + 'fa fa-camera-retro' => 'camera-retro', + 'fa fa-car' => 'car', + 'fa fa-caret-down' => 'caret-down', + 'fa fa-caret-left' => 'caret-left', + 'fa fa-caret-right' => 'caret-right', + 'fa fa-caret-square-o-down' => 'caret-square-o-down', + 'fa fa-caret-square-o-left' => 'caret-square-o-left', + 'fa fa-caret-square-o-right' => 'caret-square-o-right', + 'fa fa-caret-square-o-up' => 'caret-square-o-up', + 'fa fa-caret-up' => 'caret-up', + 'fa fa-cart-arrow-down' => 'cart-arrow-down', + 'fa fa-cart-plus' => 'cart-plus', + 'fa fa-cc' => 'cc', + 'fa fa-cc-amex' => 'cc-amex', + 'fa fa-cc-diners-club' => 'cc-diners-club', + 'fa fa-cc-discover' => 'cc-discover', + 'fa fa-cc-jcb' => 'cc-jcb', + 'fa fa-cc-mastercard' => 'cc-mastercard', + 'fa fa-cc-paypal' => 'cc-paypal', + 'fa fa-cc-stripe' => 'cc-stripe', + 'fa fa-cc-visa' => 'cc-visa', + 'fa fa-certificate' => 'certificate', + 'fa fa-chain' => 'chain', + 'fa fa-chain-broken' => 'chain-broken', + 'fa fa-check' => 'check', + 'fa fa-check-circle' => 'check-circle', + 'fa fa-check-circle-o' => 'check-circle-o', + 'fa fa-check-square' => 'check-square', + 'fa fa-check-square-o' => 'check-square-o', + 'fa fa-chevron-circle-down' => 'chevron-circle-down', + 'fa fa-chevron-circle-left' => 'chevron-circle-left', + 'fa fa-chevron-circle-right' => 'chevron-circle-right', + 'fa fa-chevron-circle-up' => 'chevron-circle-up', + 'fa fa-chevron-down' => 'chevron-down', + 'fa fa-chevron-left' => 'chevron-left', + 'fa fa-chevron-right' => 'chevron-right', + 'fa fa-chevron-up' => 'chevron-up', + 'fa fa-child' => 'child', + 'fa fa-chrome' => 'chrome', + 'fa fa-circle' => 'circle', + 'fa fa-circle-o' => 'circle-o', + 'fa fa-circle-o-notch' => 'circle-o-notch', + 'fa fa-circle-thin' => 'circle-thin', + 'fa fa-clipboard' => 'clipboard', + 'fa fa-clock-o' => 'clock-o', + 'fa fa-clone' => 'clone', + 'fa fa-close' => 'close', + 'fa fa-cloud' => 'cloud', + 'fa fa-cloud-download' => 'cloud-download', + 'fa fa-cloud-upload' => 'cloud-upload', + 'fa fa-cny' => 'cny', + 'fa fa-code' => 'code', + 'fa fa-code-fork' => 'code-fork', + 'fa fa-codepen' => 'codepen', + 'fa fa-codiepie' => 'codiepie', + 'fa fa-coffee' => 'coffee', + 'fa fa-cog' => 'cog', + 'fa fa-cogs' => 'cogs', + 'fa fa-columns' => 'columns', + 'fa fa-comment' => 'comment', + 'fa fa-comment-o' => 'comment-o', + 'fa fa-commenting' => 'commenting', + 'fa fa-commenting-o' => 'commenting-o', + 'fa fa-comments' => 'comments', + 'fa fa-comments-o' => 'comments-o', + 'fa fa-compass' => 'compass', + 'fa fa-compress' => 'compress', + 'fa fa-connectdevelop' => 'connectdevelop', + 'fa fa-contao' => 'contao', + 'fa fa-copy' => 'copy', + 'fa fa-copyright' => 'copyright', + 'fa fa-creative-commons' => 'creative-commons', + 'fa fa-credit-card' => 'credit-card', + 'fa fa-credit-card-alt' => 'credit-card-alt', + 'fa fa-crop' => 'crop', + 'fa fa-crosshairs' => 'crosshairs', + 'fa fa-css3' => 'css3', + 'fa fa-cube' => 'cube', + 'fa fa-cubes' => 'cubes', + 'fa fa-cut' => 'cut', + 'fa fa-cutlery' => 'cutlery', + 'fa fa-dashboard' => 'dashboard', + 'fa fa-dashcube' => 'dashcube', + 'fa fa-database' => 'database', + 'fa fa-deaf' => 'deaf', + 'fa fa-deafness' => 'deafness', + 'fa fa-dedent' => 'dedent', + 'fa fa-delicious' => 'delicious', + 'fa fa-desktop' => 'desktop', + 'fa fa-deviantart' => 'deviantart', + 'fa fa-diamond' => 'diamond', + 'fa fa-digg' => 'digg', + 'fa fa-dollar' => 'dollar', + 'fa fa-dot-circle-o' => 'dot-circle-o', + 'fa fa-download' => 'download', + 'fa fa-dribbble' => 'dribbble', + 'fa fa-drivers-license' => 'drivers-license', + 'fa fa-drivers-license-o' => 'drivers-license-o', + 'fa fa-dropbox' => 'dropbox', + 'fa fa-drupal' => 'drupal', + 'fa fa-edge' => 'edge', + 'fa fa-edit' => 'edit', + 'fa fa-eercast' => 'eercast', + 'fa fa-eject' => 'eject', + 'fa fa-ellipsis-h' => 'ellipsis-h', + 'fa fa-ellipsis-v' => 'ellipsis-v', + 'fa fa-empire' => 'empire', + 'fa fa-envelope' => 'envelope', + 'fa fa-envelope-o' => 'envelope-o', + 'fa fa-envelope-open' => 'envelope-open', + 'fa fa-envelope-open-o' => 'envelope-open-o', + 'fa fa-envelope-square' => 'envelope-square', + 'fa fa-envira' => 'envira', + 'fa fa-eraser' => 'eraser', + 'fa fa-etsy' => 'etsy', + 'fa fa-eur' => 'eur', + 'fa fa-euro' => 'euro', + 'fa fa-exchange' => 'exchange', + 'fa fa-exclamation' => 'exclamation', + 'fa fa-exclamation-circle' => 'exclamation-circle', + 'fa fa-exclamation-triangle' => 'exclamation-triangle', + 'fa fa-expand' => 'expand', + 'fa fa-expeditedssl' => 'expeditedssl', + 'fa fa-external-link' => 'external-link', + 'fa fa-external-link-square' => 'external-link-square', + 'fa fa-eye' => 'eye', + 'fa fa-eye-slash' => 'eye-slash', + 'fa fa-eyedropper' => 'eyedropper', + 'fa fa-fa' => 'fa', + 'fa fa-facebook' => 'facebook', + 'fa fa-facebook-f' => 'facebook-f', + 'fa fa-facebook-official' => 'facebook-official', + 'fa fa-facebook-square' => 'facebook-square', + 'fa fa-fast-backward' => 'fast-backward', + 'fa fa-fast-forward' => 'fast-forward', + 'fa fa-fax' => 'fax', + 'fa fa-feed' => 'feed', + 'fa fa-female' => 'female', + 'fa fa-fighter-jet' => 'fighter-jet', + 'fa fa-file' => 'file', + 'fa fa-file-archive-o' => 'file-archive-o', + 'fa fa-file-audio-o' => 'file-audio-o', + 'fa fa-file-code-o' => 'file-code-o', + 'fa fa-file-excel-o' => 'file-excel-o', + 'fa fa-file-image-o' => 'file-image-o', + 'fa fa-file-movie-o' => 'file-movie-o', + 'fa fa-file-o' => 'file-o', + 'fa fa-file-pdf-o' => 'file-pdf-o', + 'fa fa-file-photo-o' => 'file-photo-o', + 'fa fa-file-picture-o' => 'file-picture-o', + 'fa fa-file-powerpoint-o' => 'file-powerpoint-o', + 'fa fa-file-sound-o' => 'file-sound-o', + 'fa fa-file-text' => 'file-text', + 'fa fa-file-text-o' => 'file-text-o', + 'fa fa-file-video-o' => 'file-video-o', + 'fa fa-file-word-o' => 'file-word-o', + 'fa fa-file-zip-o' => 'file-zip-o', + 'fa fa-files-o' => 'files-o', + 'fa fa-film' => 'film', + 'fa fa-filter' => 'filter', + 'fa fa-fire' => 'fire', + 'fa fa-fire-extinguisher' => 'fire-extinguisher', + 'fa fa-firefox' => 'firefox', + 'fa fa-first-order' => 'first-order', + 'fa fa-flag' => 'flag', + 'fa fa-flag-checkered' => 'flag-checkered', + 'fa fa-flag-o' => 'flag-o', + 'fa fa-flash' => 'flash', + 'fa fa-flask' => 'flask', + 'fa fa-flickr' => 'flickr', + 'fa fa-floppy-o' => 'floppy-o', + 'fa fa-folder' => 'folder', + 'fa fa-folder-o' => 'folder-o', + 'fa fa-folder-open' => 'folder-open', + 'fa fa-folder-open-o' => 'folder-open-o', + 'fa fa-font' => 'font', + 'fa fa-font-awesome' => 'font-awesome', + 'fa fa-fonticons' => 'fonticons', + 'fa fa-fort-awesome' => 'fort-awesome', + 'fa fa-forumbee' => 'forumbee', + 'fa fa-forward' => 'forward', + 'fa fa-foursquare' => 'foursquare', + 'fa fa-free-code-camp' => 'free-code-camp', + 'fa fa-frown-o' => 'frown-o', + 'fa fa-futbol-o' => 'futbol-o', + 'fa fa-gamepad' => 'gamepad', + 'fa fa-gavel' => 'gavel', + 'fa fa-gbp' => 'gbp', + 'fa fa-ge' => 'ge', + 'fa fa-gear' => 'gear', + 'fa fa-gears' => 'gears', + 'fa fa-genderless' => 'genderless', + 'fa fa-get-pocket' => 'get-pocket', + 'fa fa-gg' => 'gg', + 'fa fa-gg-circle' => 'gg-circle', + 'fa fa-gift' => 'gift', + 'fa fa-git' => 'git', + 'fa fa-git-square' => 'git-square', + 'fa fa-github' => 'github', + 'fa fa-github-alt' => 'github-alt', + 'fa fa-github-square' => 'github-square', + 'fa fa-gitlab' => 'gitlab', + 'fa fa-gittip' => 'gittip', + 'fa fa-glass' => 'glass', + 'fa fa-glide' => 'glide', + 'fa fa-glide-g' => 'glide-g', + 'fa fa-globe' => 'globe', + 'fa fa-google' => 'google', + 'fa fa-google-plus' => 'google-plus', + 'fa fa-google-plus-circle' => 'google-plus-circle', + 'fa fa-google-plus-official' => 'google-plus-official', + 'fa fa-google-plus-square' => 'google-plus-square', + 'fa fa-google-wallet' => 'google-wallet', + 'fa fa-graduation-cap' => 'graduation-cap', + 'fa fa-gratipay' => 'gratipay', + 'fa fa-grav' => 'grav', + 'fa fa-group' => 'group', + 'fa fa-h-square' => 'h-square', + 'fa fa-hacker-news' => 'hacker-news', + 'fa fa-hand-grab-o' => 'hand-grab-o', + 'fa fa-hand-lizard-o' => 'hand-lizard-o', + 'fa fa-hand-o-down' => 'hand-o-down', + 'fa fa-hand-o-left' => 'hand-o-left', + 'fa fa-hand-o-right' => 'hand-o-right', + 'fa fa-hand-o-up' => 'hand-o-up', + 'fa fa-hand-paper-o' => 'hand-paper-o', + 'fa fa-hand-peace-o' => 'hand-peace-o', + 'fa fa-hand-pointer-o' => 'hand-pointer-o', + 'fa fa-hand-rock-o' => 'hand-rock-o', + 'fa fa-hand-scissors-o' => 'hand-scissors-o', + 'fa fa-hand-spock-o' => 'hand-spock-o', + 'fa fa-hand-stop-o' => 'hand-stop-o', + 'fa fa-handshake-o' => 'handshake-o', + 'fa fa-hard-of-hearing' => 'hard-of-hearing', + 'fa fa-hashtag' => 'hashtag', + 'fa fa-hdd-o' => 'hdd-o', + 'fa fa-header' => 'header', + 'fa fa-headphones' => 'headphones', + 'fa fa-heart' => 'heart', + 'fa fa-heart-o' => 'heart-o', + 'fa fa-heartbeat' => 'heartbeat', + 'fa fa-history' => 'history', + 'fa fa-home' => 'home', + 'fa fa-hospital-o' => 'hospital-o', + 'fa fa-hotel' => 'hotel', + 'fa fa-hourglass' => 'hourglass', + 'fa fa-hourglass-1' => 'hourglass-1', + 'fa fa-hourglass-2' => 'hourglass-2', + 'fa fa-hourglass-3' => 'hourglass-3', + 'fa fa-hourglass-end' => 'hourglass-end', + 'fa fa-hourglass-half' => 'hourglass-half', + 'fa fa-hourglass-o' => 'hourglass-o', + 'fa fa-hourglass-start' => 'hourglass-start', + 'fa fa-houzz' => 'houzz', + 'fa fa-html5' => 'html5', + 'fa fa-i-cursor' => 'i-cursor', + 'fa fa-id-badge' => 'id-badge', + 'fa fa-id-card' => 'id-card', + 'fa fa-id-card-o' => 'id-card-o', + 'fa fa-ils' => 'ils', + 'fa fa-image' => 'image', + 'fa fa-imdb' => 'imdb', + 'fa fa-inbox' => 'inbox', + 'fa fa-indent' => 'indent', + 'fa fa-industry' => 'industry', + 'fa fa-info' => 'info', + 'fa fa-info-circle' => 'info-circle', + 'fa fa-inr' => 'inr', + 'fa fa-instagram' => 'instagram', + 'fa fa-institution' => 'institution', + 'fa fa-internet-explorer' => 'internet-explorer', + 'fa fa-intersex' => 'intersex', + 'fa fa-ioxhost' => 'ioxhost', + 'fa fa-italic' => 'italic', + 'fa fa-joomla' => 'joomla', + 'fa fa-jpy' => 'jpy', + 'fa fa-jsfiddle' => 'jsfiddle', + 'fa fa-key' => 'key', + 'fa fa-keyboard-o' => 'keyboard-o', + 'fa fa-krw' => 'krw', + 'fa fa-language' => 'language', + 'fa fa-laptop' => 'laptop', + 'fa fa-lastfm' => 'lastfm', + 'fa fa-lastfm-square' => 'lastfm-square', + 'fa fa-leaf' => 'leaf', + 'fa fa-leanpub' => 'leanpub', + 'fa fa-legal' => 'legal', + 'fa fa-lemon-o' => 'lemon-o', + 'fa fa-level-down' => 'level-down', + 'fa fa-level-up' => 'level-up', + 'fa fa-life-bouy' => 'life-bouy', + 'fa fa-life-buoy' => 'life-buoy', + 'fa fa-life-ring' => 'life-ring', + 'fa fa-life-saver' => 'life-saver', + 'fa fa-lightbulb-o' => 'lightbulb-o', + 'fa fa-line-chart' => 'line-chart', + 'fa fa-link' => 'link', + 'fa fa-linkedin' => 'linkedin', + 'fa fa-linkedin-square' => 'linkedin-square', + 'fa fa-linode' => 'linode', + 'fa fa-linux' => 'linux', + 'fa fa-list' => 'list', + 'fa fa-list-alt' => 'list-alt', + 'fa fa-list-ol' => 'list-ol', + 'fa fa-list-ul' => 'list-ul', + 'fa fa-location-arrow' => 'location-arrow', + 'fa fa-lock' => 'lock', + 'fa fa-long-arrow-down' => 'long-arrow-down', + 'fa fa-long-arrow-left' => 'long-arrow-left', + 'fa fa-long-arrow-right' => 'long-arrow-right', + 'fa fa-long-arrow-up' => 'long-arrow-up', + 'fa fa-low-vision' => 'low-vision', + 'fa fa-magic' => 'magic', + 'fa fa-magnet' => 'magnet', + 'fa fa-mail-forward' => 'mail-forward', + 'fa fa-mail-reply' => 'mail-reply', + 'fa fa-mail-reply-all' => 'mail-reply-all', + 'fa fa-male' => 'male', + 'fa fa-map' => 'map', + 'fa fa-map-marker' => 'map-marker', + 'fa fa-map-o' => 'map-o', + 'fa fa-map-pin' => 'map-pin', + 'fa fa-map-signs' => 'map-signs', + 'fa fa-mars' => 'mars', + 'fa fa-mars-double' => 'mars-double', + 'fa fa-mars-stroke' => 'mars-stroke', + 'fa fa-mars-stroke-h' => 'mars-stroke-h', + 'fa fa-mars-stroke-v' => 'mars-stroke-v', + 'fa fa-maxcdn' => 'maxcdn', + 'fa fa-meanpath' => 'meanpath', + 'fa fa-medium' => 'medium', + 'fa fa-medkit' => 'medkit', + 'fa fa-meetup' => 'meetup', + 'fa fa-meh-o' => 'meh-o', + 'fa fa-mercury' => 'mercury', + 'fa fa-microchip' => 'microchip', + 'fa fa-microphone' => 'microphone', + 'fa fa-microphone-slash' => 'microphone-slash', + 'fa fa-minus' => 'minus', + 'fa fa-minus-circle' => 'minus-circle', + 'fa fa-minus-square' => 'minus-square', + 'fa fa-minus-square-o' => 'minus-square-o', + 'fa fa-mixcloud' => 'mixcloud', + 'fa fa-mobile' => 'mobile', + 'fa fa-mobile-phone' => 'mobile-phone', + 'fa fa-modx' => 'modx', + 'fa fa-money' => 'money', + 'fa fa-moon-o' => 'moon-o', + 'fa fa-mortar-board' => 'mortar-board', + 'fa fa-motorcycle' => 'motorcycle', + 'fa fa-mouse-pointer' => 'mouse-pointer', + 'fa fa-music' => 'music', + 'fa fa-navicon' => 'navicon', + 'fa fa-neuter' => 'neuter', + 'fa fa-newspaper-o' => 'newspaper-o', + 'fa fa-object-group' => 'object-group', + 'fa fa-object-ungroup' => 'object-ungroup', + 'fa fa-odnoklassniki' => 'odnoklassniki', + 'fa fa-odnoklassniki-square' => 'odnoklassniki-square', + 'fa fa-opencart' => 'opencart', + 'fa fa-openid' => 'openid', + 'fa fa-opera' => 'opera', + 'fa fa-optin-monster' => 'optin-monster', + 'fa fa-outdent' => 'outdent', + 'fa fa-pagelines' => 'pagelines', + 'fa fa-paint-brush' => 'paint-brush', + 'fa fa-paper-plane' => 'paper-plane', + 'fa fa-paper-plane-o' => 'paper-plane-o', + 'fa fa-paperclip' => 'paperclip', + 'fa fa-paragraph' => 'paragraph', + 'fa fa-paste' => 'paste', + 'fa fa-pause' => 'pause', + 'fa fa-pause-circle' => 'pause-circle', + 'fa fa-pause-circle-o' => 'pause-circle-o', + 'fa fa-paw' => 'paw', + 'fa fa-paypal' => 'paypal', + 'fa fa-pencil' => 'pencil', + 'fa fa-pencil-square' => 'pencil-square', + 'fa fa-pencil-square-o' => 'pencil-square-o', + 'fa fa-percent' => 'percent', + 'fa fa-phone' => 'phone', + 'fa fa-phone-square' => 'phone-square', + 'fa fa-photo' => 'photo', + 'fa fa-picture-o' => 'picture-o', + 'fa fa-pie-chart' => 'pie-chart', + 'fa fa-pied-piper' => 'pied-piper', + 'fa fa-pied-piper-alt' => 'pied-piper-alt', + 'fa fa-pied-piper-pp' => 'pied-piper-pp', + 'fa fa-pinterest' => 'pinterest', + 'fa fa-pinterest-p' => 'pinterest-p', + 'fa fa-pinterest-square' => 'pinterest-square', + 'fa fa-plane' => 'plane', + 'fa fa-play' => 'play', + 'fa fa-play-circle' => 'play-circle', + 'fa fa-play-circle-o' => 'play-circle-o', + 'fa fa-plug' => 'plug', + 'fa fa-plus' => 'plus', + 'fa fa-plus-circle' => 'plus-circle', + 'fa fa-plus-square' => 'plus-square', + 'fa fa-plus-square-o' => 'plus-square-o', + 'fa fa-podcast' => 'podcast', + 'fa fa-power-off' => 'power-off', + 'fa fa-print' => 'print', + 'fa fa-product-hunt' => 'product-hunt', + 'fa fa-pull-left' => 'pull-left', + 'fa fa-pull-right' => 'pull-right', + 'fa fa-puzzle-piece' => 'puzzle-piece', + 'fa fa-qq' => 'qq', + 'fa fa-qrcode' => 'qrcode', + 'fa fa-question' => 'question', + 'fa fa-question-circle' => 'question-circle', + 'fa fa-question-circle-o' => 'question-circle-o', + 'fa fa-quora' => 'quora', + 'fa fa-quote-left' => 'quote-left', + 'fa fa-quote-right' => 'quote-right', + 'fa fa-ra' => 'ra', + 'fa fa-random' => 'random', + 'fa fa-ravelry' => 'ravelry', + 'fa fa-rebel' => 'rebel', + 'fa fa-recycle' => 'recycle', + 'fa fa-reddit' => 'reddit', + 'fa fa-reddit-alien' => 'reddit-alien', + 'fa fa-reddit-square' => 'reddit-square', + 'fa fa-refresh' => 'refresh', + 'fa fa-registered' => 'registered', + 'fa fa-remove' => 'remove', + 'fa fa-renren' => 'renren', + 'fa fa-reorder' => 'reorder', + 'fa fa-repeat' => 'repeat', + 'fa fa-reply' => 'reply', + 'fa fa-reply-all' => 'reply-all', + 'fa fa-resistance' => 'resistance', + 'fa fa-retweet' => 'retweet', + 'fa fa-rmb' => 'rmb', + 'fa fa-road' => 'road', + 'fa fa-rocket' => 'rocket', + 'fa fa-rotate-left' => 'rotate-left', + 'fa fa-rotate-right' => 'rotate-right', + 'fa fa-rouble' => 'rouble', + 'fa fa-rss' => 'rss', + 'fa fa-rss-square' => 'rss-square', + 'fa fa-rub' => 'rub', + 'fa fa-ruble' => 'ruble', + 'fa fa-rupee' => 'rupee', + 'fa fa-s15' => 's15', + 'fa fa-safari' => 'safari', + 'fa fa-save' => 'save', + 'fa fa-scissors' => 'scissors', + 'fa fa-scribd' => 'scribd', + 'fa fa-search' => 'search', + 'fa fa-search-minus' => 'search-minus', + 'fa fa-search-plus' => 'search-plus', + 'fa fa-sellsy' => 'sellsy', + 'fa fa-send' => 'send', + 'fa fa-send-o' => 'send-o', + 'fa fa-server' => 'server', + 'fa fa-share' => 'share', + 'fa fa-share-alt' => 'share-alt', + 'fa fa-share-alt-square' => 'share-alt-square', + 'fa fa-share-square' => 'share-square', + 'fa fa-share-square-o' => 'share-square-o', + 'fa fa-shekel' => 'shekel', + 'fa fa-sheqel' => 'sheqel', + 'fa fa-shield' => 'shield', + 'fa fa-ship' => 'ship', + 'fa fa-shirtsinbulk' => 'shirtsinbulk', + 'fa fa-shopping-bag' => 'shopping-bag', + 'fa fa-shopping-basket' => 'shopping-basket', + 'fa fa-shopping-cart' => 'shopping-cart', + 'fa fa-shower' => 'shower', + 'fa fa-sign-in' => 'sign-in', + 'fa fa-sign-language' => 'sign-language', + 'fa fa-sign-out' => 'sign-out', + 'fa fa-signal' => 'signal', + 'fa fa-signing' => 'signing', + 'fa fa-simplybuilt' => 'simplybuilt', + 'fa fa-sitemap' => 'sitemap', + 'fa fa-skyatlas' => 'skyatlas', + 'fa fa-skype' => 'skype', + 'fa fa-slack' => 'slack', + 'fa fa-sliders' => 'sliders', + 'fa fa-slideshare' => 'slideshare', + 'fa fa-smile-o' => 'smile-o', + 'fa fa-snapchat' => 'snapchat', + 'fa fa-snapchat-ghost' => 'snapchat-ghost', + 'fa fa-snapchat-square' => 'snapchat-square', + 'fa fa-snowflake-o' => 'snowflake-o', + 'fa fa-soccer-ball-o' => 'soccer-ball-o', + 'fa fa-sort' => 'sort', + 'fa fa-sort-alpha-asc' => 'sort-alpha-asc', + 'fa fa-sort-alpha-desc' => 'sort-alpha-desc', + 'fa fa-sort-amount-asc' => 'sort-amount-asc', + 'fa fa-sort-amount-desc' => 'sort-amount-desc', + 'fa fa-sort-asc' => 'sort-asc', + 'fa fa-sort-desc' => 'sort-desc', + 'fa fa-sort-down' => 'sort-down', + 'fa fa-sort-numeric-asc' => 'sort-numeric-asc', + 'fa fa-sort-numeric-desc' => 'sort-numeric-desc', + 'fa fa-sort-up' => 'sort-up', + 'fa fa-soundcloud' => 'soundcloud', + 'fa fa-space-shuttle' => 'space-shuttle', + 'fa fa-spinner' => 'spinner', + 'fa fa-spoon' => 'spoon', + 'fa fa-spotify' => 'spotify', + 'fa fa-square' => 'square', + 'fa fa-square-o' => 'square-o', + 'fa fa-stack-exchange' => 'stack-exchange', + 'fa fa-stack-overflow' => 'stack-overflow', + 'fa fa-star' => 'star', + 'fa fa-star-half' => 'star-half', + 'fa fa-star-half-empty' => 'star-half-empty', + 'fa fa-star-half-full' => 'star-half-full', + 'fa fa-star-half-o' => 'star-half-o', + 'fa fa-star-o' => 'star-o', + 'fa fa-steam' => 'steam', + 'fa fa-steam-square' => 'steam-square', + 'fa fa-step-backward' => 'step-backward', + 'fa fa-step-forward' => 'step-forward', + 'fa fa-stethoscope' => 'stethoscope', + 'fa fa-sticky-note' => 'sticky-note', + 'fa fa-sticky-note-o' => 'sticky-note-o', + 'fa fa-stop' => 'stop', + 'fa fa-stop-circle' => 'stop-circle', + 'fa fa-stop-circle-o' => 'stop-circle-o', + 'fa fa-street-view' => 'street-view', + 'fa fa-strikethrough' => 'strikethrough', + 'fa fa-stumbleupon' => 'stumbleupon', + 'fa fa-stumbleupon-circle' => 'stumbleupon-circle', + 'fa fa-subscript' => 'subscript', + 'fa fa-subway' => 'subway', + 'fa fa-suitcase' => 'suitcase', + 'fa fa-sun-o' => 'sun-o', + 'fa fa-superpowers' => 'superpowers', + 'fa fa-superscript' => 'superscript', + 'fa fa-support' => 'support', + 'fa fa-table' => 'table', + 'fa fa-tablet' => 'tablet', + 'fa fa-tachometer' => 'tachometer', + 'fa fa-tag' => 'tag', + 'fa fa-tags' => 'tags', + 'fa fa-tasks' => 'tasks', + 'fa fa-taxi' => 'taxi', + 'fa fa-telegram' => 'telegram', + 'fa fa-television' => 'television', + 'fa fa-tencent-weibo' => 'tencent-weibo', + 'fa fa-terminal' => 'terminal', + 'fa fa-text-height' => 'text-height', + 'fa fa-text-width' => 'text-width', + 'fa fa-th' => 'th', + 'fa fa-th-large' => 'th-large', + 'fa fa-th-list' => 'th-list', + 'fa fa-themeisle' => 'themeisle', + 'fa fa-thermometer' => 'thermometer', + 'fa fa-thermometer-0' => 'thermometer-0', + 'fa fa-thermometer-1' => 'thermometer-1', + 'fa fa-thermometer-2' => 'thermometer-2', + 'fa fa-thermometer-3' => 'thermometer-3', + 'fa fa-thermometer-4' => 'thermometer-4', + 'fa fa-thermometer-empty' => 'thermometer-empty', + 'fa fa-thermometer-full' => 'thermometer-full', + 'fa fa-thermometer-half' => 'thermometer-half', + 'fa fa-thermometer-quarter' => 'thermometer-quarter', + 'fa fa-thermometer-three-quarters' => 'thermometer-three-quarters', + 'fa fa-thumb-tack' => 'thumb-tack', + 'fa fa-thumbs-down' => 'thumbs-down', + 'fa fa-thumbs-o-down' => 'thumbs-o-down', + 'fa fa-thumbs-o-up' => 'thumbs-o-up', + 'fa fa-thumbs-up' => 'thumbs-up', + 'fa fa-ticket' => 'ticket', + 'fa fa-times' => 'times', + 'fa fa-times-circle' => 'times-circle', + 'fa fa-times-circle-o' => 'times-circle-o', + 'fa fa-times-rectangle' => 'times-rectangle', + 'fa fa-times-rectangle-o' => 'times-rectangle-o', + 'fa fa-tint' => 'tint', + 'fa fa-toggle-down' => 'toggle-down', + 'fa fa-toggle-left' => 'toggle-left', + 'fa fa-toggle-off' => 'toggle-off', + 'fa fa-toggle-on' => 'toggle-on', + 'fa fa-toggle-right' => 'toggle-right', + 'fa fa-toggle-up' => 'toggle-up', + 'fa fa-trademark' => 'trademark', + 'fa fa-train' => 'train', + 'fa fa-transgender' => 'transgender', + 'fa fa-transgender-alt' => 'transgender-alt', + 'fa fa-trash' => 'trash', + 'fa fa-trash-o' => 'trash-o', + 'fa fa-tree' => 'tree', + 'fa fa-trello' => 'trello', + 'fa fa-tripadvisor' => 'tripadvisor', + 'fa fa-trophy' => 'trophy', + 'fa fa-truck' => 'truck', + 'fa fa-try' => 'try', + 'fa fa-tty' => 'tty', + 'fa fa-tumblr' => 'tumblr', + 'fa fa-tumblr-square' => 'tumblr-square', + 'fa fa-turkish-lira' => 'turkish-lira', + 'fa fa-tv' => 'tv', + 'fa fa-twitch' => 'twitch', + 'fa fa-twitter' => 'twitter', + 'fa fa-twitter-square' => 'twitter-square', + 'fa fa-umbrella' => 'umbrella', + 'fa fa-underline' => 'underline', + 'fa fa-undo' => 'undo', + 'fa fa-universal-access' => 'universal-access', + 'fa fa-university' => 'university', + 'fa fa-unlink' => 'unlink', + 'fa fa-unlock' => 'unlock', + 'fa fa-unlock-alt' => 'unlock-alt', + 'fa fa-unsorted' => 'unsorted', + 'fa fa-upload' => 'upload', + 'fa fa-usb' => 'usb', + 'fa fa-usd' => 'usd', + 'fa fa-user' => 'user', + 'fa fa-user-circle' => 'user-circle', + 'fa fa-user-circle-o' => 'user-circle-o', + 'fa fa-user-md' => 'user-md', + 'fa fa-user-o' => 'user-o', + 'fa fa-user-plus' => 'user-plus', + 'fa fa-user-secret' => 'user-secret', + 'fa fa-user-times' => 'user-times', + 'fa fa-users' => 'users', + 'fa fa-vcard' => 'vcard', + 'fa fa-vcard-o' => 'vcard-o', + 'fa fa-venus' => 'venus', + 'fa fa-venus-double' => 'venus-double', + 'fa fa-venus-mars' => 'venus-mars', + 'fa fa-viacoin' => 'viacoin', + 'fa fa-viadeo' => 'viadeo', + 'fa fa-viadeo-square' => 'viadeo-square', + 'fa fa-video-camera' => 'video-camera', + 'fa fa-vimeo' => 'vimeo', + 'fa fa-vimeo-square' => 'vimeo-square', + 'fa fa-vine' => 'vine', + 'fa fa-vk' => 'vk', + 'fa fa-volume-control-phone' => 'volume-control-phone', + 'fa fa-volume-down' => 'volume-down', + 'fa fa-volume-off' => 'volume-off', + 'fa fa-volume-up' => 'volume-up', + 'fa fa-warning' => 'warning', + 'fa fa-wechat' => 'wechat', + 'fa fa-weibo' => 'weibo', + 'fa fa-weixin' => 'weixin', + 'fa fa-whatsapp' => 'whatsapp', + 'fa fa-wheelchair' => 'wheelchair', + 'fa fa-wheelchair-alt' => 'wheelchair-alt', + 'fa fa-wifi' => 'wifi', + 'fa fa-wikipedia-w' => 'wikipedia-w', + 'fa fa-window-close' => 'window-close', + 'fa fa-window-close-o' => 'window-close-o', + 'fa fa-window-maximize' => 'window-maximize', + 'fa fa-window-minimize' => 'window-minimize', + 'fa fa-window-restore' => 'window-restore', + 'fa fa-windows' => 'windows', + 'fa fa-won' => 'won', + 'fa fa-wordpress' => 'wordpress', + 'fa fa-wpbeginner' => 'wpbeginner', + 'fa fa-wpexplorer' => 'wpexplorer', + 'fa fa-wpforms' => 'wpforms', + 'fa fa-wrench' => 'wrench', + 'fa fa-xing' => 'xing', + 'fa fa-xing-square' => 'xing-square', + 'fa fa-y-combinator' => 'y-combinator', + 'fa fa-y-combinator-square' => 'y-combinator-square', + 'fa fa-yahoo' => 'yahoo', + 'fa fa-yc' => 'yc', + 'fa fa-yc-square' => 'yc-square', + 'fa fa-yelp' => 'yelp', + 'fa fa-yen' => 'yen', + 'fa fa-yoast' => 'yoast', + 'fa fa-youtube' => 'youtube', + 'fa fa-youtube-play' => 'youtube-play', + 'fa fa-youtube-square' => 'youtube-square', + ]; + } + + /** + * Get icons control default settings. + * + * Retrieve the default settings of the icons control. Used to return the default + * settings while initializing the icons control. + * + * @since 1.0.0 + * @access protected + * + * @return array Control default settings. + */ + protected function getDefaultSettings() + { + return [ + 'options' => self::getIcons(), + 'include' => '', + 'exclude' => '', + ]; + } + + /** + * Render icons control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{ data.description }}
+ <# } #> + '', + 'url' => '', + ]; + } + + /** + * Import media images. + * + * Used to import media control files from external sites while importing + * Elementor template JSON file, and replacing the old data. + * + * @since 1.0.0 + * @access public + * + * @param array $settings Control settings + * + * @return array Control settings. + */ + public function onImport($settings) + { + if (empty($settings['url'])) { + return $settings; + } + + $settings = Plugin::$instance->templates_manager->getImportImagesInstance()->import($settings); + + if (!$settings) { + $settings = [ + 'id' => '', + 'url' => Utils::getPlaceholderImageSrc(), + ]; + } + + return $settings; + } + + public function onExport($settings) + { + if (!empty($settings['url'])) { + $settings['url'] = Helper::getMediaLink($settings['url'], true); + } + + return $settings; + } + + /** + * Render media control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + public function contentTemplate() + { + ?> +
+ +
+ + +
+
+
+
+ +
+
+ <# if( 'image' === data.media_type ) { #> +
+ <# if( data.seo ) { #> +
+
+ <# } #> + <# } else if( 'video' === data.media_type ) { #> + + + <# } #> +
+
+
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + +
+ true, + 'media_type' => 'image', + 'dynamic' => [ + 'categories' => [TagsModule::IMAGE_CATEGORY], + 'returnType' => 'object', + ], + ]; + } + + /** + * Get media control image title. + * + * Retrieve the `title` of the image selected by the media control. + * + * @since 1.0.0 + * @access public + * @static + * + * @param array $instance Media attachment. + * + * @return string Image title. + */ + public static function getImageTitle($instance) + { + return !empty($instance['title']) ? esc_attr($instance['title']) : ''; + } + + /** + * Get media control image alt. + * + * Retrieve the `alt` value of the image selected by the media control. + * + * @since 1.0.0 + * @access public + * @static + * + * @param array $instance Media attachment. + * + * @return string Image alt. + */ + public static function getImageAlt($instance) + { + return !empty($instance['alt']) ? esc_attr($instance['alt']) : ''; + } +} diff --git a/modules/creativeelements/includes/controls/number.php b/modules/creativeelements/includes/controls/number.php new file mode 100644 index 00000000..d49928ac --- /dev/null +++ b/modules/creativeelements/includes/controls/number.php @@ -0,0 +1,87 @@ + '', + 'max' => '', + 'step' => '', + 'placeholder' => '', + 'title' => '', + ]; + } + + /** + * Render number control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + 'yes', + ]; + } + + /** + * Render popover toggle control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.9.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ +
+ + + + +
+
+ + <# if ( data.label ) { #> + {{{ data.label }}} + <# } #> +
{{{ data.raw }}}
+ '', + 'content_classes' => '', + ]; + } +} diff --git a/modules/creativeelements/includes/controls/repeater.php b/modules/creativeelements/includes/controls/repeater.php new file mode 100644 index 00000000..6b4ef1d4 --- /dev/null +++ b/modules/creativeelements/includes/controls/repeater.php @@ -0,0 +1,199 @@ + [], + 'title_field' => '', + 'prevent_empty' => true, + 'is_repeater' => true, + 'item_actions' => [ + 'add' => true, + 'duplicate' => true, + 'remove' => true, + 'sort' => true, + ], + ]; + } + + /** + * Get repeater control value. + * + * Retrieve the value of the repeater control from a specific Controls_Stack. + * + * @since 1.0.0 + * @access public + * + * @param array $control Control + * @param array $settings Controls_Stack settings + * + * @return mixed Control values. + */ + public function getValue($control, $settings) + { + $value = parent::getValue($control, $settings); + + if (!empty($value)) { + foreach ($value as &$item) { + foreach ($control['fields'] as $field) { + $control_obj = Plugin::$instance->controls_manager->getControl($field['type']); + + // Prior to 1.5.0 the fields may contains non-data controls. + if (!$control_obj instanceof BaseDataControl) { + continue; + } + + $item[$field['name']] = $control_obj->getValue($field, $item); + } + } + } + + return $value; + } + + /** + * Import repeater. + * + * Used as a wrapper method for inner controls while importing Elementor + * template JSON file, and replacing the old data. + * + * @since 1.8.0 + * @access public + * + * @param array $settings Control settings. + * @param array $control_data Optional. Control data. Default is an empty array. + * + * @return array Control settings. + */ + public function onImport($settings, $control_data = []) + { + if (empty($settings) || empty($control_data['fields'])) { + return $settings; + } + + $method = 'onImport'; + + foreach ($settings as &$item) { + foreach ($control_data['fields'] as $field) { + if (empty($field['name']) || empty($item[$field['name']])) { + continue; + } + + $control_obj = Plugin::$instance->controls_manager->getControl($field['type']); + + if (!$control_obj) { + continue; + } + + if (method_exists($control_obj, $method)) { + $item[$field['name']] = $control_obj->{$method}($item[$field['name']], $field); + } + } + } + + return $settings; + } + + /** + * Render repeater control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + ?> + + <# if ( itemActions.add && itemActions.add.product ) { #> + + + + <# } #> +
+ <# if ( itemActions.add && itemActions.add.product ) { #> +
+ +
+ <# } else if ( itemActions.add ) { #> +
+ +
+ <# } #> + startControlsSection()` + * and `$widget->endControlsSection()` to wrap a set of controls. + * + * @since 1.0.0 + */ +class ControlSection extends BaseUIControl +{ + /** + * Get section control type. + * + * Retrieve the control type, in this case `section`. + * + * @since 1.0.0 + * @access public + * + * @return string Control type. + */ + public function getType() + { + return 'section'; + } + + /** + * Render section control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + ?> +
+
+ +
+
{{{ data.label }}}
+
+ 'none', + ]; + } +} diff --git a/modules/creativeelements/includes/controls/select.php b/modules/creativeelements/includes/controls/select.php new file mode 100644 index 00000000..8f31bf14 --- /dev/null +++ b/modules/creativeelements/includes/controls/select.php @@ -0,0 +1,108 @@ + [], + ]; + } + + /** + * Render select control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ <# if ( data.label ) {#> + + <# } #> +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + [], + 'multiple' => false, + 'select2options' => [], + ]; + } + + /** + * Render select2 control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ <# if ( data.label ) { #> + + <# } #> + <# if ( data.select2options.ajax ) { #> + + + + <# } #> +
+ <# var multiple = ( data.multiple ) ? 'multiple' : ''; #> + +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + '', + 'sizes' => [], + ]); + } + + /** + * Get slider control default settings. + * + * Retrieve the default settings of the slider control. Used to return the + * default settings while initializing the slider control. + * + * @since 1.0.0 + * @access protected + * + * @return array Control default settings. + */ + protected function getDefaultSettings() + { + return array_merge(parent::getDefaultSettings(), [ + 'label_block' => true, + 'labels' => [], + 'scales' => 0, + 'handles' => 'default', + ]); + } + + /** + * Render slider control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ + printUnitsTemplate() ?> +
+ <# if ( isMultiple && ( data.labels.length || data.scales ) ) { #> +
+ <# if ( data.labels.length ) { #> +
+ <# jQuery.each( data.labels, ( index, label ) => { #> +
{{{ label }}}
+ <# } ); #> +
+ <# } if ( data.scales ) { #> +
+ <# for ( var i = 0; i < data.scales; i++ ) { #> +
+ <# } #> +
+ <# } #> +
+ <# } #> +
+ <# if ( ! isMultiple ) { #> +
+ +
+ <# } #> +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + getControlUid('{{ preset.key }}'); + ?> + <# var morePresets = getMorePresets(); #> +
+
+
+ <# var currentPreset = elementor.presetsFactory.getPresetByStructure( data.controlValue ); #> +
+ {{{ elementor.presetsFactory.getPresetSVG( currentPreset.preset, 233, 72, 5 ).outerHTML }}} +
+
+ + +
+ <# if ( morePresets.length > 1 ) { #> +
+
+ <# _.each( morePresets, function( preset ) { #> +
+ + +
{{{ preset.preset.join( ', ' ) }}}
+
+ <# } ); #> +
+ <# } #> +
+
+ + <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + 'none', + 'label_block' => true, + ]; + } +} diff --git a/modules/creativeelements/includes/controls/switcher.php b/modules/creativeelements/includes/controls/switcher.php new file mode 100644 index 00000000..3e545842 --- /dev/null +++ b/modules/creativeelements/includes/controls/switcher.php @@ -0,0 +1,90 @@ +getControlUid(); + ?> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + __('No'), + 'label_on' => __('Yes'), + 'return_value' => 'yes', + ]; + } +} diff --git a/modules/creativeelements/includes/controls/tab.php b/modules/creativeelements/includes/controls/tab.php new file mode 100644 index 00000000..23dc4264 --- /dev/null +++ b/modules/creativeelements/includes/controls/tab.php @@ -0,0 +1,78 @@ +startControlsTab()` + * and in the end `$widget->endControlsTab()`. + * + * @since 1.0.0 + */ +class ControlTab extends BaseUIControl +{ + /** + * Get tab control type. + * + * Retrieve the control type, in this case `tab`. + * + * @since 1.0.0 + * @access public + * + * @return string Control type. + */ + public function getType() + { + return 'tab'; + } + + /** + * Render tab control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + ?> +
+ {{{ data.label }}} +
+ 'none', + ]; + } +} diff --git a/modules/creativeelements/includes/controls/tabs.php b/modules/creativeelements/includes/controls/tabs.php new file mode 100644 index 00000000..c653a98d --- /dev/null +++ b/modules/creativeelements/includes/controls/tabs.php @@ -0,0 +1,73 @@ +startControlsTabs()` + * and in the end `$widget->endControlsTabs()`. + * + * @since 1.0.0 + */ +class ControlTabs extends BaseUIControl +{ + /** + * Get tabs control type. + * + * Retrieve the control type, in this case `tabs`. + * + * @since 1.0.0 + * @access public + * + * @return string Control type. + */ + public function getType() + { + return 'tabs'; + } + + /** + * Render tabs control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + } + + /** + * Get tabs control default settings. + * + * Retrieve the default settings of the tabs control. Used to return the + * default settings while initializing the tabs control. + * + * @since 1.0.0 + * @access protected + * + * @return array Control default settings. + */ + protected function getDefaultSettings() + { + return [ + 'separator' => 'none', + ]; + } +} diff --git a/modules/creativeelements/includes/controls/text-shadow.php b/modules/creativeelements/includes/controls/text-shadow.php new file mode 100644 index 00000000..e64709e3 --- /dev/null +++ b/modules/creativeelements/includes/controls/text-shadow.php @@ -0,0 +1,129 @@ + 0, + 'vertical' => 0, + 'blur' => 10, + 'color' => 'rgba(0,0,0,0.3)', + ]; + } + + /** + * Get text shadow control sliders. + * + * Retrieve the sliders of the text shadow control. Sliders are used while + * rendering the control output in the editor. + * + * @since 1.6.0 + * @access public + * + * @return array Control sliders. + */ + public function getSliders() + { + return [ + 'blur' => [ + 'label' => __('Blur'), + 'min' => 0, + 'max' => 100, + ], + 'horizontal' => [ + 'label' => __('Horizontal'), + 'min' => -100, + 'max' => 100, + ], + 'vertical' => [ + 'label' => __('Vertical'), + 'min' => -100, + 'max' => 100, + ], + ]; + } + + /** + * Render text shadow control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.6.0 + * @access public + */ + public function contentTemplate() + { + ?> + <# var defaultColorValue = data.default.color ? ' data-default-color=' + data.default.color : ''; #> +
+ +
+ +
+
+ getSliders() as $slider_name => $slider) : ?> + getControlUid($slider_name) ?> +
+ +
+
+
+ +
+
+
+ getControlUid(); + ?> +
+ <# if ( data.label ) {#> + + <# } #> +
+ list="{{ data.name }}-list"<# } #>> + <# if ( Array.isArray( data.input_list ) ) { #> + + <# data.input_list.forEach( function ( val ) { #> + + <# } #> +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + 'text', + 'placeholder' => '', + 'title' => '', + 'input_list' => false, + 'dynamic' => [ + 'categories' => [TagsModule::TEXT_CATEGORY], + ], + ]; + } +} diff --git a/modules/creativeelements/includes/controls/textarea.php b/modules/creativeelements/includes/controls/textarea.php new file mode 100644 index 00000000..f4c15337 --- /dev/null +++ b/modules/creativeelements/includes/controls/textarea.php @@ -0,0 +1,89 @@ + true, + 'rows' => 5, + 'placeholder' => '', + 'dynamic' => [ + 'categories' => [TagsModule::TEXT_CATEGORY], + ], + ]; + } + + /** + * Render textarea control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + ?> +
+ +
+ +
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + '', + 'is_external' => '', + 'nofollow' => '', + ]; + } + + /** + * Get url control default settings. + * + * Retrieve the default settings of the url control. Used to return the default + * settings while initializing the url control. + * + * @since 1.0.0 + * @access protected + * + * @return array Control default settings. + */ + protected function getDefaultSettings() + { + return [ + 'label_block' => true, + 'show_external' => true, + 'placeholder' => __('Paste URL or type'), + 'autocomplete' => true, + 'dynamic' => [ + 'categories' => [TagsModule::URL_CATEGORY], + 'property' => 'url', + ], + ]; + } + + /** + * Render url control output in the editor. + * + * Used to generate the control HTML in the editor using Underscore JS + * template. The variables for the class are available using `data` JS + * object. + * + * @since 1.0.0 + * @access public + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + public function contentTemplate() + { + $control_uid = $this->getControlUid(); + + $more_input_control_uid = $this->getControlUid('more-input'); + $is_external_control_uid = $this->getControlUid('is_external'); + $nofollow_control_uid = $this->getControlUid('nofollow'); + ?> +
+ +
+ + + + +
+
+ + +
+
+ + +
+
+
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + +
+
{{{ data.label }}}
+
+
+ <# if ( data.description ) { #> +
{{{ data.description }}}
+ <# } #> + true, + 'dynamic' => [ + 'categories' => [TagsModule::TEXT_CATEGORY], + ], + ]; + } +} diff --git a/modules/creativeelements/includes/db.php b/modules/creativeelements/includes/db.php new file mode 100644 index 00000000..164cc272 --- /dev/null +++ b/modules/creativeelements/includes/db.php @@ -0,0 +1,539 @@ +documents->save()` method instead. + * + * @access public + * + * @param int $post_id Post ID. + * @param array $data Post data. + * @param string $status Optional. Post status. Default is `publish`. + * + * @return bool + */ + public function saveEditor($post_id, $data, $status = self::STATUS_PUBLISH) + { + // TODO: _deprecated_function( __METHOD__, '2.0.0', 'Plugin::$instance->documents->save()' ); + + $document = Plugin::$instance->documents->get($post_id); + + if (self::STATUS_AUTOSAVE === $status) { + $document = $document->getAutosave(0, true); + } + + return $document->save([ + 'elements' => $data, + 'settings' => [ + 'post_status' => $status, + ], + ]); + } + + /** + * Get builder. + * + * Retrieve editor data from the database. + * + * @since 1.0.0 + * + * @access public + * + * @param int $post_id Post ID. + * @param string $status Optional. Post status. Default is `publish`. + * + * @return array Editor data. + */ + public function getBuilder($post_id, $status = self::STATUS_PUBLISH) + { + if (self::STATUS_DRAFT === $status) { + $document = Plugin::$instance->documents->getDocOrAutoSave($post_id); + } else { + $document = Plugin::$instance->documents->get($post_id); + } + + if ($document) { + $editor_data = $document->getElementsRawData(null, true); + } else { + $editor_data = []; + } + + return $editor_data; + } + + /** + * Get JSON meta. + * + * Retrieve post meta data, and return the JSON decoded data. + * + * @since 1.0.0 + * @access protected + * + * @param int $post_id Post ID. + * @param string $key The meta key to retrieve. + * + * @return array Decoded JSON data from post meta. + */ + protected function _getJsonMeta($post_id, $key) + { + $meta = get_post_meta($post_id, $key, true); + + if (is_string($meta) && !empty($meta)) { + $meta = json_decode($meta, true); + } + + if (empty($meta)) { + $meta = []; + } + + return $meta; + } + + /** + * Get plain editor. + * + * Retrieve post data that was saved in the database. Raw data before it + * was parsed by elementor. + * + * @since 1.0.0 + * @deprecated 2.0.0 Use `Plugin::$instance->documents->getElementsData()` method instead. + * + * @access public + * + * @param int $post_id Post ID. + * @param string $status Optional. Post status. Default is `publish`. + * + * @return array Post data. + */ + public function getPlainEditor($post_id, $status = self::STATUS_PUBLISH) + { + // TODO: _deprecated_function( __METHOD__, '2.0.0', 'Plugin::$instance->documents->getElementsData()' ); + + $document = Plugin::$instance->documents->get($post_id); + + if ($document) { + return $document->getElementsData($status); + } + + return []; + } + + /** + * Is using Elementor. + * + * Set whether the page is using Elementor or not. + * + * @since 1.5.0 + * @access public + * + * @param int $post_id Post ID. + * @param bool $is_elementor Optional. Whether the page is elementor page. + * Default is true. + */ + public function setIsElementorPage($post_id, $is_elementor = true) + { + if ($is_elementor) { + // Use the string `builder` and not a boolean for rollback compatibility + update_post_meta($post_id, '_elementor_edit_mode', 'builder'); + } else { + delete_post_meta($post_id, '_elementor_edit_mode'); + } + } + + /** + * Setup the edit mode per Page ID + * + * @since 1.0.0 + * @deprecated 1.5.0 Use `setIsElementorPage`. + * + * @param int $post_id + * @param string $mode + */ + public function setEditMode($post_id, $mode = 'builder') + { + if ('builder' === $mode) { + update_post_meta($post_id, '_elementor_edit_mode', $mode); + } else { + delete_post_meta($post_id, '_elementor_edit_mode'); + } + } + + /** + * Render element plain content. + * + * When saving data in the editor, this method renders recursively the plain + * content containing only the content and the HTML. No CSS data. + * + * @since 2.0.0 + * @access private + * + * @param array $element_data Element data. + */ + private function renderElementPlainContent($element_data) + { + if ('widget' === $element_data['elType']) { + /** @var WidgetBase $widget */ + $widget = Plugin::$instance->elements_manager->createElementInstance($element_data); + + if ($widget) { + $widget->renderPlainContent(); + } + } + + if (!empty($element_data['elements'])) { + foreach ($element_data['elements'] as $element) { + $this->renderElementPlainContent($element); + } + } + } + + /** + * Save plain text. + * + * Retrieves the raw content, removes all kind of unwanted HTML tags and saves + * the content as the `post_content` field in the database. + * + * @since 1.9.0 + * @access public + * + * @param int $post_id Post ID. + */ + public function savePlainText($post_id) + { + // Switch $dynamic_tags to parsing mode = remove. + $dynamic_tags = Plugin::$instance->dynamic_tags; + $parsing_mode = $dynamic_tags->getParsingMode(); + $dynamic_tags->setParsingMode('remove'); + + $plain_text = $this->getPlainText($post_id); + + wp_update_post( + [ + 'ID' => $post_id, + 'post_content' => $plain_text, + ] + ); + + // Restore parsing mode. + $dynamic_tags->setParsingMode($parsing_mode); + } + + /** + * Iterate data. + * + * Accept any type of Elementor data and a callback function. The callback + * function runs recursively for each element and his child elements. + * + * @since 1.0.0 + * @access public + * + * @param array $data_container Any type of elementor data. + * @param callable $callback A function to iterate data by. + * @param array $args Array of args pointers for passing parameters in & out of the callback + * + * @return mixed Iterated data. + */ + public function iterateData($data_container, $callback, $args = []) + { + if (isset($data_container['elType'])) { + if (!empty($data_container['elements'])) { + $data_container['elements'] = $this->iterateData($data_container['elements'], $callback, $args); + } + + return call_user_func($callback, $data_container, $args); + } + + foreach ($data_container as $element_key => $element_value) { + $element_data = $this->iterateData($data_container[$element_key], $callback, $args); + + if (null === $element_data) { + continue; + } + + $data_container[$element_key] = $element_data; + } + + return $data_container; + } + + /** + * Safely copy Elementor meta. + * + * Make sure the original page was built with Elementor and the post is not + * auto-save. Only then copy elementor meta from one post to another using + * `copy_elementor_meta()`. + * + * @since 1.9.2 + * @access public + * + * @param int $from_post_id Original post ID. + * @param int $to_post_id Target post ID. + */ + public function safeCopyElementorMeta($from_post_id, $to_post_id) + { + // It's from Admin & not from Elementor. + if (!did_action('elementor/db/before_save')) { + if (!Plugin::$instance->db->isBuiltWithElementor($from_post_id)) { + return; + } + + // It's an exited Elementor auto-save + if (get_post_meta($to_post_id, '_elementor_data', true)) { + return; + } + } + + $this->copyElementorMeta($from_post_id, $to_post_id); + } + + /** + * Copy Elementor meta. + * + * Duplicate the data from one post to another. + * + * Consider using `safe_copy_elementor_meta()` method instead. + * + * @since 1.1.0 + * @access public + * + * @param int $from_post_id Original post ID. + * @param int $to_post_id Target post ID. + */ + public function copyElementorMeta($from_post_id, $to_post_id) + { + $from_post_meta = get_post_meta($from_post_id); + $core_meta = [ + '_wp_page_template', + // '_thumbnail_id', + '_og_image', + ]; + + foreach ($from_post_meta as $meta_key => $values) { + // Copy only meta with the `_elementor` prefix + if (0 === strpos($meta_key, '_elementor') || in_array($meta_key, $core_meta, true)) { + $value = $values[0]; + + // The elementor JSON needs slashes before saving + // if ('_elementor_data' === $meta_key) { + // $value = wp_slash($value); + // } else { + // $value = maybe_unserialize($value); + // } + + update_post_meta($to_post_id, $meta_key, $value); + } + } + } + + /** + * Is built with Elementor. + * + * Check whether the post was built with Elementor. + * + * @since 1.0.10 + * @access public + * + * @param int $post_id Post ID. + * + * @return bool Whether the post was built with Elementor. + */ + public function isBuiltWithElementor($post_id) + { + return !!get_post_meta($post_id, '_elementor_edit_mode', true); + } + + /** + * Switch to post. + * + * Change the global Wrapper post to the requested post. + * + * @since 1.5.0 + * @access public + * + * @param int $post_id Post ID to switch to. + */ + public function switchToPost($post_id) + { + $post_id = absint($post_id); + // If is already switched, or is the same post, return. + if (get_the_ID() == "$post_id") { + $this->switched_post_data[] = false; + return; + } + + $this->switched_post_data[] = [ + 'switched_id' => $post_id, + 'original_id' => get_the_ID(), // Note, it can be false if the global isn't set + ]; + + // $GLOBALS['post'] = get_post($post_id); // WPCS: override ok. + + setup_postdata($post_id); + } + + /** + * Restore current post. + * + * Rollback to the previous global post, rolling back from `DB::switchToPost()`. + * + * @since 1.5.0 + * @access public + */ + public function restoreCurrentPost() + { + $data = array_pop($this->switched_post_data); + + // If not switched, return. + if (!$data) { + return; + } + + // It was switched from an empty global post, restore this state and unset the global post + if (false === $data['original_id']) { + unset($GLOBALS['post']); + return; + } + + // $GLOBALS['post'] = get_post($data['original_id']); // WPCS: override ok. + + setup_postdata($data['original_id']); + } + + // public function switchToQuery($query_vars, $force_global_post = false) + + // public function restoreCurrentQuery() + + /** + * Get plain text. + * + * Retrieve the post plain text. + * + * @since 1.9.0 + * @access public + * + * @param int $post_id Post ID. + * + * @return string Post plain text. + */ + public function getPlainText($post_id) + { + $data = $this->getPlainEditor($post_id); + + return $this->getPlainTextFromData($data); + } + + /** + * Get plain text from data. + * + * Retrieve the post plain text from any given Elementor data. + * + * @since 1.9.2 + * @access public + * + * @param array $data Post ID. + * + * @return string Post plain text. + */ + public function getPlainTextFromData($data) + { + ob_start(); + + if ($data) { + foreach ($data as $element_data) { + $this->renderElementPlainContent($element_data); + } + } + + $plain_text = ob_get_clean(); + + // Remove unnecessary tags. + $plain_text = preg_replace('/<\/?div[^>]*\>/i', '', $plain_text); + $plain_text = preg_replace('/<\/?span[^>]*\>/i', '', $plain_text); + $plain_text = preg_replace('#(.*?)#is', '', $plain_text); + $plain_text = preg_replace('/]*><\\/i[^>]*>/', '', $plain_text); + $plain_text = preg_replace('/ class=".*?"/', '', $plain_text); + + // Remove empty lines. + $plain_text = preg_replace('/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/', "\n", $plain_text); + + $plain_text = trim($plain_text); + + return $plain_text; + } +} diff --git a/modules/creativeelements/includes/editor-templates/editor-wrapper.php b/modules/creativeelements/includes/editor-templates/editor-wrapper.php new file mode 100644 index 00000000..621cafb7 --- /dev/null +++ b/modules/creativeelements/includes/editor-templates/editor-wrapper.php @@ -0,0 +1,82 @@ +documents->getCurrent(); + +$body_classes = [ + 'elementor-editor-active', + 'elementor-editor-' . $document->getTemplateType(), + 'ps-version-' . str_replace('.', '-', _PS_VERSION_), +]; + +if (is_rtl()) { + $body_classes[] = 'rtl'; +} + +// if (!Plugin::$instance->role_manager->userCan('design')) { +// $body_classes[] = 'elementor-editor-content-only'; +// } + +ob_start(); +?> + + + + + + + + <?= __('Creative Elements - live Theme & Page Builder') ?> + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/modules/creativeelements/includes/editor-templates/hotkeys.php b/modules/creativeelements/includes/editor-templates/hotkeys.php new file mode 100644 index 00000000..640e9837 --- /dev/null +++ b/modules/creativeelements/includes/editor-templates/hotkeys.php @@ -0,0 +1,166 @@ + + diff --git a/modules/creativeelements/includes/editor-templates/index.php b/modules/creativeelements/includes/editor-templates/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/includes/editor-templates/index.php @@ -0,0 +1,8 @@ + + + + diff --git a/modules/creativeelements/includes/editor-templates/navigator.php b/modules/creativeelements/includes/editor-templates/navigator.php new file mode 100644 index 00000000..3ec2165b --- /dev/null +++ b/modules/creativeelements/includes/editor-templates/navigator.php @@ -0,0 +1,67 @@ + + + + + + + + diff --git a/modules/creativeelements/includes/editor-templates/panel-elements.php b/modules/creativeelements/includes/editor-templates/panel-elements.php new file mode 100644 index 00000000..f1db2992 --- /dev/null +++ b/modules/creativeelements/includes/editor-templates/panel-elements.php @@ -0,0 +1,54 @@ + + + + + + + + + + + + diff --git a/modules/creativeelements/includes/editor-templates/panel.php b/modules/creativeelements/includes/editor-templates/panel.php new file mode 100644 index 00000000..8eab9f2b --- /dev/null +++ b/modules/creativeelements/includes/editor-templates/panel.php @@ -0,0 +1,340 @@ +documents->get(Plugin::$instance->editor->getPostId()); +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/creativeelements/includes/editor-templates/repeater.php b/modules/creativeelements/includes/editor-templates/repeater.php new file mode 100644 index 00000000..2c3f4ee6 --- /dev/null +++ b/modules/creativeelements/includes/editor-templates/repeater.php @@ -0,0 +1,37 @@ + + diff --git a/modules/creativeelements/includes/editor-templates/templates.php b/modules/creativeelements/includes/editor-templates/templates.php new file mode 100644 index 00000000..96e91921 --- /dev/null +++ b/modules/creativeelements/includes/editor-templates/templates.php @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/creativeelements/includes/editor.php b/modules/creativeelements/includes/editor.php new file mode 100644 index 00000000..62aea710 --- /dev/null +++ b/modules/creativeelements/includes/editor.php @@ -0,0 +1,937 @@ +_post_id = UId::parse($_REQUEST['uid']); + + if (!$this->isEditMode($this->_post_id)) { + return; + } + + /* + // Send MIME Type header like WP admin-header. + @header('Content-Type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); + + // Use requested id and not the global in order to avoid conflicts with plugins that changes the global post. + query_posts([ + 'p' => $this->_post_id, + 'post_type' => get_post_type($this->_post_id), + ]); + */ + + Plugin::$instance->db->switchToPost($this->_post_id); + + $document = Plugin::$instance->documents->get($this->_post_id); + + Plugin::$instance->documents->switchToDocument($document); + + /* + add_filter('show_admin_bar', '__return_false'); + + // Remove all actions + remove_all_actions('wp_head'); + remove_all_actions('wp_print_styles'); + remove_all_actions('wp_print_head_scripts'); + remove_all_actions('wp_footer'); + */ + + // Handle `wp_head` + add_action('wp_head', 'wp_enqueue_scripts', 1); + add_action('wp_head', 'wp_print_styles', 8); + add_action('wp_head', 'wp_print_head_scripts', 9); + // add_action('wp_head', 'wp_site_icon'); + add_action('wp_head', [$this, 'editor_head_trigger'], 30); + + // Handle `wp_footer` + add_action('wp_footer', 'wp_print_footer_scripts', 20); + // add_action('wp_footer', 'wp_auth_check_html', 30); + add_action('wp_footer', [$this, 'wp_footer']); + + /* + // Handle `wp_enqueue_scripts` + remove_all_actions('wp_enqueue_scripts'); + + // Also remove all scripts hooked into after_wp_tiny_mce. + remove_all_actions('after_wp_tiny_mce'); + */ + + add_action('wp_enqueue_scripts', [$this, 'enqueue_scripts'], 999999); + add_action('wp_enqueue_scripts', [$this, 'enqueue_styles'], 999999); + + // Change mode to Builder only on update + // Plugin::$instance->db->setIsElementorPage($this->_post_id); + + // Post Lock + if (!$this->getLockedUser($this->_post_id)) { + $this->lockPost($this->_post_id); + } + + // Setup default heartbeat options + add_filter('heartbeat_settings', function ($settings) { + $settings['interval'] = 15; + return $settings; + }); + + // Tell to Cache plugins do not cache this request. + // Utils::doNotCache(); + + do_action('elementor/editor/init'); + + $this->printEditorTemplate(); + + // From the action it's an empty string, from tests its `false` + if (false !== $die) { + die; + } + } + + /** + * Retrieve post ID. + * + * Get the ID of the current post. + * + * @since 1.8.0 + * @access public + * + * @return int Post ID. + */ + public function getPostId() + { + return $this->_post_id; + } + + // public function redirectToNewUrl() + + /** + * Whether the edit mode is active. + * + * Used to determine whether we are in the edit mode. + * + * @since 1.0.0 + * @access public + * + * @param int $post_id Optional. Post ID. Default is `null`, the current + * post ID. + * + * @return bool Whether the edit mode is active. + */ + public function isEditMode($post_id = null) + { + if (null !== $this->_is_edit_mode) { + return $this->_is_edit_mode; + } + + if (empty($post_id)) { + $post_id = $this->_post_id; + } + + $document = Plugin::$instance->documents->get($post_id); + + if (!$document || !$document->isEditableByCurrentUser()) { + return false; + } + + if ('AdminCEEditor' === \Tools::getValue('controller') && !\Tools::getIsset('ajax')) { + return true; + } + + // Ajax request as Editor mode + $actions = [ + 'elementor', + + // Templates + 'elementor_get_templates', + 'elementor_save_template', + 'elementor_get_template', + 'elementor_delete_template', + 'elementor_import_template', + 'elementor_library_direct_actions', + ]; + + if (isset($_REQUEST['action']) && in_array($_REQUEST['action'], $actions)) { + return true; + } + + return false; + } + + /** + * Lock post. + * + * Mark the post as currently being edited by the current user. + * + * @since 1.0.0 + * @access public + * + * @param int $post_id The ID of the post being edited. + */ + public function lockPost($post_id) + { + // if (!function_exists('wp_set_post_lock')) { + // require_once ABSPATH . 'wp-admin/includes/post.php'; + // } + + wp_set_post_lock($post_id); + } + + /** + * Get locked user. + * + * Check what user is currently editing the post. + * + * @since 1.0.0 + * @access public + * + * @param int $post_id The ID of the post being edited. + * + * @return \WP_User|false User information or false if the post is not locked. + */ + public function getLockedUser($post_id) + { + // if (!function_exists('wp_check_post_lock')) { + // require_once ABSPATH . 'wp-admin/includes/post.php'; + // } + + $locked_user = wp_check_post_lock($post_id); + if (!$locked_user) { + return false; + } + + return get_user_by('id', $locked_user); + } + + /** + * Print Editor Template. + * + * Include the wrapper template of the editor. + * + * @since 2.2.0 + * @access public + */ + public function printEditorTemplate() + { + include 'editor-templates/editor-wrapper.php'; + } + + /** + * Enqueue scripts. + * + * Registers all the editor scripts and enqueues them. + * + * @since 1.0.0 + * @access public + */ + public function enqueueScripts() + { + // remove_action('wp_enqueue_scripts', [$this, __FUNCTION__], 999999); + + // Set the global data like $post, $authordata and etc + setup_postdata($this->_post_id); + + // global $wp_styles, $wp_scripts; + + $plugin = Plugin::$instance; + + // Reset global variable + // $wp_styles = new \WPStyles(); // WPCS: override ok. + // $wp_scripts = new \WPScripts(); // WPCS: override ok. + + $suffix = _PS_MODE_DEV_ ? '' : '.min'; + + wp_register_script( + 'elementor-editor-modules', + _CE_ASSETS_URL_ . 'js/editor-modules' . $suffix . '.js', + [ + 'elementor-common-modules', + ], + _CE_VERSION_, + true + ); + // Hack for waypoint with editor mode. + wp_register_script( + 'elementor-waypoints', + _CE_ASSETS_URL_ . 'lib/waypoints/waypoints-for-editor.js', + [ + 'jquery', + ], + '4.0.2', + true + ); + + wp_register_script( + 'perfect-scrollbar', + _CE_ASSETS_URL_ . 'lib/perfect-scrollbar/js/perfect-scrollbar' . $suffix . '.js', + [], + '1.4.0', + true + ); + + wp_register_script( + 'jquery-easing', + _CE_ASSETS_URL_ . 'lib/jquery-easing/jquery-easing' . $suffix . '.js', + [ + 'jquery', + ], + '1.3.2', + true + ); + + wp_register_script( + 'nprogress', + _CE_ASSETS_URL_ . 'lib/nprogress/nprogress' . $suffix . '.js', + [], + '0.2.0', + true + ); + + wp_register_script( + 'tipsy', + _CE_ASSETS_URL_ . 'lib/tipsy/tipsy' . $suffix . '.js', + [ + 'jquery', + ], + '1.0.0', + true + ); + + wp_register_script( + 'imagesloaded', + _CE_ASSETS_URL_ . 'lib/imagesloaded/imagesloaded' . $suffix . '.js', + [ + 'jquery', + ], + '4.1.0', + true + ); + + wp_register_script( + 'heartbeat', + _CE_ASSETS_URL_ . 'lib/heartbeat/heartbeat' . $suffix . '.js', + [ + 'jquery', + ], + '5.5', + true + ); + wp_localize_script( + 'heartbeat', + 'heartbeatSettings', + apply_filters('heartbeat_settings', [ + 'ajaxurl' => Helper::getAjaxLink(), + ]) + ); + + wp_register_script( + 'jquery-elementor-select2', + _CE_ASSETS_URL_ . 'lib/e-select2/js/e-select2.full' . $suffix . '.js', + [ + 'jquery', + ], + '4.0.6-rc1', + true + ); + + wp_register_script( + 'flatpickr', + _CE_ASSETS_URL_ . 'lib/flatpickr/flatpickr' . $suffix . '.js', + [ + 'jquery', + ], + '1.12.0', + true + ); + + wp_register_script( + 'ace', + 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/ace.js', + [], + '1.2.5', + true + ); + + wp_register_script( + 'ace-language-tools', + 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/ext-language_tools.js', + [ + 'ace', + ], + '1.2.5', + true + ); + + wp_register_script( + 'jquery-hover-intent', + _CE_ASSETS_URL_ . 'lib/jquery-hover-intent/jquery-hover-intent' . $suffix . '.js', + [], + '1.0.0', + true + ); + + wp_register_script( + 'nouislider', + _CE_ASSETS_URL_ . 'lib/nouislider/nouislider' . $suffix . '.js', + [], + '13.0.0', + true + ); + + wp_register_script( + 'elementor-editor', + _CE_ASSETS_URL_ . 'js/editor' . $suffix . '.js', + [ + 'elementor-common', + 'elementor-editor-modules', + // 'wp-auth-check', + 'jquery-ui-sortable', + 'jquery-ui-resizable', + 'perfect-scrollbar', + 'nprogress', + 'tipsy', + 'imagesloaded', + 'heartbeat', + 'jquery-elementor-select2', + 'flatpickr', + 'ace', + 'ace-language-tools', + 'jquery-hover-intent', + 'nouislider', + ], + _CE_VERSION_, + true + ); + + /** + * Before editor enqueue scripts. + * + * Fires before Elementor editor scripts are enqueued. + * + * @since 1.0.0 + */ + do_action('elementor/editor/before_enqueue_scripts'); + + $document = Plugin::$instance->documents->getDocOrAutoSave($this->_post_id); + + // Get document data *after* the scripts hook - so plugins can run compatibility before get data, but *before* enqueue the editor script - so elements can enqueue their own scripts that depended in editor script. + $editor_data = $document->getElementsRawData(null, true); + + // Tweak for WP Admin menu icons + // wp_print_styles('editor-buttons'); + + $locked_user = $this->getLockedUser($this->_post_id); + + if ($locked_user) { + $locked_user = $locked_user->display_name; + } + + $page_title_selector = get_option('elementor_page_title_selector'); + + if (empty($page_title_selector)) { + $page_title_selector = 'h1.entry-title'; + } + + $post_type_object = get_post_type_object($document->getMainPost()->post_type); + $current_user_can_publish = current_user_can($post_type_object->cap->publish_posts); + + $config = [ + 'version' => _CE_VERSION_, + 'home_url' => home_url(), + 'data' => $editor_data, + // @TODO: `post_id` is bc since 2.0.0 + 'post_id' => "{$this->_post_id}", + 'document' => $document->getConfig(), + 'autosave_interval' => AUTOSAVE_INTERVAL, + 'current_user_can_publish' => $current_user_can_publish, + 'controls' => $plugin->controls_manager->getControlsData(), + 'elements' => $plugin->elements_manager->getElementTypesConfig(), + 'widgets' => $plugin->widgets_manager->getWidgetTypesConfig(), + 'schemes' => [ + 'items' => $plugin->schemes_manager->getRegisteredSchemesData(), + 'enabled_schemes' => SchemesManager::getEnabledSchemes(), + ], + 'default_schemes' => $plugin->schemes_manager->getSchemesDefaults(), + 'settings' => SettingsManager::getSettingsManagersConfig(), + 'system_schemes' => $plugin->schemes_manager->getSystemSchemes(), + 'wp_editor' => $this->getWpEditorConfig(), + 'settings_page_link' => Helper::getSettingsLink(), + 'is_active' => \Configuration::getGlobalValue('CE_LICENSE'), + 'elementor_site' => 'https://creativeelements.webshopworks.com/about', + 'docs_elementor_site' => __('http://docs.webshopworks.com/creative-elements'), + 'help_the_content_url' => 'http://docs.webshopworks.com/creative-elements/the-content-missing', + 'help_preview_error_url' => 'http://docs.webshopworks.com/creative-elements/preview-not-loaded', + 'help_right_click_url' => 'http://docs.webshopworks.com/creative-elements/meet-right-click', + 'help_flexbox_bc_url' => 'http://docs.webshopworks.com/creative-elements/flexbox-layout-bc', + 'additional_shapes' => Shapes::getAdditionalShapesForConfig(), + 'locked_user' => $locked_user, + 'user' => [ + // 'restrictions' => $plugin->role_manager->getUserRestrictionsArray(), + 'restrictions' => [], + 'is_administrator' => current_user_can('manage_options'), + 'introduction' => User::getIntroductionMeta(), + ], + // @deprecated since 2.3.0 - Use `elementorCommon.config.isRTL` instead + 'is_rtl' => is_rtl(), + 'locale' => get_locale(), + 'rich_editing_enabled' => filter_var(get_user_meta(get_current_user_id(), 'rich_editing', true), FILTER_VALIDATE_BOOLEAN), + 'page_title_selector' => $page_title_selector, + // 'tinymceHasCustomConfig' => class_exists('Tinymce_Advanced'), + 'inlineEditing' => Plugin::$instance->widgets_manager->getInlineEditingConfig(), + 'dynamicTags' => Plugin::$instance->dynamic_tags->getConfig(), + 'i18n' => [ + 'elementor' => __('Elementor'), + 'delete' => __('Delete'), + 'cancel' => __('Cancel'), + 'got_it' => __('Got It'), + + /* translators: %s: Element name. */ + 'edit_element' => __('Edit %s'), + 'flexbox_attention_header' => __('Note: Flexbox Changes'), + 'flexbox_attention_message' => __('Creative Elements 2.5 introduces key changes to the layout using CSS Flexbox. Your existing pages might have been affected, please review your page before publishing.'), + + // Menu. + 'about_elementor' => __('About Creative Elements'), + 'color_picker' => __('Color Picker'), + 'elementor_settings' => __('Module Settings'), + 'global_colors' => __('Default Colors'), + 'global_fonts' => __('Default Fonts'), + 'global_style' => __('Style'), + 'settings' => __('Settings'), + 'go_to' => __('Go To'), + 'view_page' => __('View Page'), + 'exit_to_dashboard' => __('Exit to Back-office'), + + // Elements. + 'inner_section' => __('Inner Section'), + + // Control Order. + 'asc' => __('Ascending order'), + 'desc' => __('Descending order'), + + // Clear Page. + 'clear_page' => __('Delete All Content'), + 'dialog_confirm_clear_page' => __('Attention: We are going to DELETE ALL CONTENT from this page. Are you sure you want to do that?'), + + // Panel Preview Mode. + 'back_to_editor' => __('Show Panel'), + 'preview' => __('Hide Panel'), + + // Inline Editing. + 'type_here' => __('Type Here'), + + // Library. + 'an_error_occurred' => __('An error occurred'), + 'category' => __('Category'), + 'delete_template' => __('Delete Template'), + 'delete_template_confirm' => __('Are you sure you want to delete this template?'), + 'import_template_dialog_header' => __('Import Document Settings'), + 'import_template_dialog_message' => __('Do you want to also import the document settings of the template?'), + 'import_template_dialog_message_attention' => __('Attention: Importing may override previous settings.'), + 'library' => __('Library'), + 'no' => __('No'), + 'page' => __('Page'), + /* translators: %s: Template type. */ + 'save_your_template' => __('Save Your %s to Library'), + 'save_your_template_description' => __('Your designs will be available for export and reuse on any page or website'), + 'section' => __('Section'), + 'templates_empty_message' => __('This is where your templates should be. Design it. Save it. Reuse it.'), + 'templates_empty_title' => __('Haven’t Saved Templates Yet?'), + 'templates_no_favorites_message' => __('You can mark any pre-designed template as a favorite.'), + 'templates_no_favorites_title' => __('No Favorite Templates'), + 'templates_no_results_message' => __('Please make sure your search is spelled correctly or try a different words.'), + 'templates_no_results_title' => __('No Results Found'), + 'templates_request_error' => __('The following error(s) occurred while processing the request:'), + 'yes' => __('Yes'), + 'blocks' => __('Blocks'), + 'pages' => __('Pages'), + 'my_templates' => __('My Templates'), + + // Incompatible Device. + 'device_incompatible_header' => __('Your browser isn\'t compatible'), + 'device_incompatible_message' => __('Your browser isn\'t compatible with all of Creative Elements\' editing features. We recommend you switch to another browser like Chrome or Firefox.'), + 'proceed_anyway' => __('Proceed Anyway'), + + // Preview not loaded. + 'learn_more' => __('Learn More'), + 'preview_el_not_found_header' => __('Sorry, the content area was not found in your page.'), + 'preview_el_not_found_message' => __('You must insert the selected module position (hook) in the current template, in order for CreativeElements to work on this page.'), + 'preview_not_loading_header' => __('The preview could not be loaded'), + 'preview_not_loading_message' => __('We\'re sorry, but something went wrong. Click on \'Learn more\' and follow each of the steps to quickly solve it.'), + + // Take Over. + /* translators: %s: User name. */ + 'dialog_user_taken_over' => __('%s has taken over and is currently editing. Do you want to take over this page editing?'), + 'go_back' => __('Go Back'), + 'take_over' => __('Take Over'), + + // Revisions. + /* translators: %s: Element type. */ + 'delete_element' => __('Delete %s'), + /* translators: %s: Template type. */ + 'dialog_confirm_delete' => __('Are you sure you want to remove this %s?'), + + // Saver. + 'before_unload_alert' => __('Please note: All unsaved changes will be lost.'), + 'published' => __('Published'), + 'publish' => __('Publish'), + 'save' => __('Save'), + 'saved' => __('Saved'), + 'update' => __('Update'), + 'submit' => __('Submit'), + 'working_on_draft_notification' => __('This is just a draft. Play around and when you\'re done - click update.'), + 'keep_editing' => __('Keep Editing'), + 'have_a_look' => __('Have a look'), + 'view_all_revisions' => __('View All Revisions'), + 'dismiss' => __('Dismiss'), + 'saving_disabled' => __('Saving has been disabled until you’re reconnected.'), + + // Ajax + 'server_error' => __('Server Error'), + 'server_connection_lost' => __('Connection Lost'), + 'unknown_error' => __('Unknown Error'), + + // Context Menu + 'duplicate' => __('Duplicate'), + 'copy' => __('Copy'), + 'paste' => __('Paste'), + 'copy_style' => __('Copy Style'), + 'paste_style' => __('Paste Style'), + 'reset_style' => __('Reset Style'), + // 'save_as_global' => __('Save as a Global'), + 'save_as_block' => __('Save as Template'), + 'new_column' => __('Add New Column'), + 'copy_all_content' => __('Copy All Content'), + 'delete_all_content' => __('Delete All Content'), + 'navigator' => __('Navigator'), + + // Right Click Introduction + 'meet_right_click_header' => __('Meet Right Click'), + 'meet_right_click_message' => __('Now you can access all editing actions using right click.'), + + // Hotkeys screen + 'keyboard_shortcuts' => __('Keyboard Shortcuts'), + + // Misc + 'autosave' => __('Autosave'), + 'elementor_docs' => __('Documentation'), + 'reload_page' => __('Reload Page'), + 'session_expired_header' => __('Timeout'), + 'session_expired_message' => __('Your session has expired. Please reload the page to continue editing.'), + 'unknown_value' => __('Unknown Value'), + 'multistore_notification' => __('You are in a multistore context: any modification will impact all your shops, or each shop of the active group.'), + ], + ]; + + $localized_settings = []; + + /** + * Localize editor settings. + * + * Filters the editor localized settings. + * + * @since 1.0.0 + * + * @param array $localized_settings Localized settings. + * @param int $post_id The ID of the current post being edited. + */ + $localized_settings = apply_filters('elementor/editor/localize_settings', $localized_settings, $this->_post_id); + + if (!empty($localized_settings)) { + $config = array_replace_recursive($config, $localized_settings); + } + + wp_localize_script('elementor-editor', 'ElementorConfig', $config); + + wp_enqueue_script('elementor-editor'); + + $plugin->controls_manager->enqueueControlScripts(); + + /** + * After editor enqueue scripts. + * + * Fires after Elementor editor scripts are enqueued. + * + * @since 1.0.0 + */ + do_action('elementor/editor/after_enqueue_scripts'); + } + + /** + * Enqueue styles. + * + * Registers all the editor styles and enqueues them. + * + * @since 1.0.0 + * @access public + */ + public function enqueueStyles() + { + /** + * Before editor enqueue styles. + * + * Fires before Elementor editor styles are enqueued. + * + * @since 1.0.0 + */ + do_action('elementor/editor/before_enqueue_styles'); + + $suffix = Utils::isScriptDebug() ? '' : '.min'; + + $direction_suffix = is_rtl() ? '-rtl' : ''; + + wp_register_style( + 'font-awesome', + _CE_ASSETS_URL_ . 'lib/font-awesome/css/font-awesome' . $suffix . '.css', + [], + '4.7-swap' + ); + + wp_register_style( + 'elementor-select2', + _CE_ASSETS_URL_ . 'lib/e-select2/css/e-select2' . $suffix . '.css', + [], + '4.0.6-rc1' + ); + + wp_register_style( + 'google-font-roboto', + 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap', + [], + _CE_VERSION_ + ); + + wp_register_style( + 'flatpickr', + _CE_ASSETS_URL_ . 'lib/flatpickr/flatpickr' . $suffix . '.css', + [], + '1.12.0' + ); + + wp_register_style( + 'elementor-editor', + _CE_ASSETS_URL_ . 'css/editor' . $direction_suffix . $suffix . '.css', + [ + 'elementor-common', + 'font-awesome', + 'elementor-select2', + 'elementor-icons', + 'ce-icons', + // 'wp-auth-check', + 'google-font-roboto', + 'flatpickr', + ], + _CE_VERSION_ + ); + + wp_enqueue_style('elementor-editor'); + + if (Responsive::hasCustomBreakpoints()) { + $breakpoints = Responsive::getBreakpoints(); + + wp_add_inline_style('elementor-editor', '.elementor-device-tablet #elementor-preview-responsive-wrapper { width: ' . $breakpoints['md'] . 'px; }'); + } + + /** + * After editor enqueue styles. + * + * Fires after Elementor editor styles are enqueued. + * + * @since 1.0.0 + */ + do_action('elementor/editor/after_enqueue_styles'); + } + + /** + * Get PrestaShop editor config. + * + * Config the default PrestaShop editor with custom settings for Elementor use. + * + * @since 1.9.0 + * @access private + */ + private function getWpEditorConfig() + { + return + '
' . + '
' . + '
'; + } + + /** + * Editor head trigger. + * + * Fires the 'elementor/editor/wp_head' action in the head tag in Elementor + * editor. + * + * @since 1.0.0 + * @access public + */ + public function editorHeadTrigger() + { + /** + * Elementor editor head. + * + * Fires on Elementor editor head tag. + * + * Used to prints scripts or any other data in the head tag. + * + * @since 1.0.0 + */ + do_action('elementor/editor/wp_head'); + } + + /** + * WP footer. + * + * Prints Elementor editor with all the editor templates, and render controls, + * widgets and content elements. + * + * Fired by `wp_footer` action. + * + * @since 1.0.0 + * @access public + */ + public function wpFooter() + { + $plugin = Plugin::$instance; + + $plugin->controls_manager->renderControls(); + $plugin->widgets_manager->renderWidgetsContent(); + $plugin->elements_manager->renderElementsContent(); + + $plugin->schemes_manager->printSchemesTemplates(); + + // $plugin->dynamic_tags->printTemplates(); + + $this->initEditorTemplates(); + + /** + * Elementor editor footer. + * + * Fires on Elementor editor before closing the body tag. + * + * Used to prints scripts or any other HTML before closing the body tag. + * + * @since 1.0.0 + */ + do_action('elementor/editor/footer'); + } + + /** + * Set edit mode. + * + * Used to update the edit mode. + * + * @since 1.0.0 + * @access public + * + * @param bool $edit_mode Whether the edit mode is active. + */ + public function setEditMode($edit_mode) + { + $this->_is_edit_mode = $edit_mode; + } + + // public function __construct() + + // public function filterWpLinkQueryArgs($query) + + // public function filterWpLinkQuery($results) + + /** + * Init editor templates. + * + * Initialize default elementor templates used in the editor panel. + * + * @since 1.7.0 + * @access private + */ + private function initEditorTemplates() + { + $template_names = [ + 'global', + 'panel', + 'panel-elements', + 'repeater', + 'templates', + 'navigator', + 'hotkeys', + ]; + + foreach ($template_names as $template_name) { + Plugin::$instance->common->addTemplate(_CE_PATH_ . "includes/editor-templates/$template_name.php"); + } + } +} diff --git a/modules/creativeelements/includes/elements/column.php b/modules/creativeelements/includes/elements/column.php new file mode 100644 index 00000000..26f3e4d4 --- /dev/null +++ b/modules/creativeelements/includes/elements/column.php @@ -0,0 +1,1179 @@ +getSettings('tabs'); + } + + /** + * Get initial config. + * + * Retrieve the current section initial configuration. + * + * Adds more configuration on top of the controls list, the tabs assigned to + * the control, element name, type, icon and more. This method also adds + * section presets. + * + * @since 2.5.0 + * @access protected + * + * @return array The initial config. + */ + protected function _getInitialConfig() + { + $config = parent::_getInitialConfig(); + + $config['controls'] = $this->getControls(); + $config['tabs_controls'] = $this->getTabsControls(); + + return $config; + } + + /** + * Get default edit tools. + * + * Retrieve the element default edit tools. Used to set initial tools. + * + * @since 1.0.0 + * @access protected + * @static + * + * @return array Default edit tools. + */ + protected static function getDefaultEditTools() + { + $column_label = __('Column'); + + $edit_tools = [ + 'edit' => [ + 'title' => __('Edit'), + 'icon' => 'column', + ], + ]; + + if (self::isEditButtonsEnabled()) { + $edit_tools += [ + 'duplicate' => [ + /* translators: %s: Column label */ + 'title' => sprintf(__('Duplicate %s'), $column_label), + 'icon' => 'clone', + ], + 'add' => [ + /* translators: %s: Column label */ + 'title' => sprintf(__('Add %s'), $column_label), + 'icon' => 'plus', + ], + 'remove' => [ + /* translators: %s: Column label */ + 'title' => sprintf(__('Remove %s'), $column_label), + 'icon' => 'close', + ], + ]; + } + + return $edit_tools; + } + + public function isControlVisible($control, $values = null) + { + if (null === $values && !empty($control['check_section'])) { + $values = Helper::$section_stack[0]->getSettings(); + } + + return parent::isControlVisible($control, $values); + } + + /** + * Register column controls. + * + * Used to add new controls to the column element. + * + * @since 1.0.0 + * @access protected + */ + protected function _registerControls() + { + // Section Layout. + $this->startControlsSection( + 'layout', + [ + 'label' => __('Layout'), + 'tab' => ControlsManager::TAB_LAYOUT, + ] + ); + + $this->addControl( + 'tab_title', + [ + 'type' => ControlsManager::RAW_HTML, + 'classes' => 'elementor-hidden', + 'check_section' => true, + 'condition' => [ + 'tabs!' => '', + ], + ] + ); + + $this->addControl( + '_title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXT, + 'render_type' => 'none', + 'style_transfer' => false, + ] + ); + + $this->addResponsiveControl( + '_inline_size', + [ + 'label' => __('Column Width') . ' (%)', + 'type' => ControlsManager::NUMBER, + 'min' => 2, + 'max' => 98, + 'required' => true, + 'device_args' => [ + ControlsStack::RESPONSIVE_TABLET => [ + 'max' => 100, + 'required' => false, + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'max' => 100, + 'required' => false, + ], + ], + 'min_affected_device' => [ + ControlsStack::RESPONSIVE_DESKTOP => ControlsStack::RESPONSIVE_TABLET, + ControlsStack::RESPONSIVE_TABLET => ControlsStack::RESPONSIVE_TABLET, + ], + 'selectors' => [ + '{{WRAPPER}}' => 'width: {{VALUE}}%', + ], + ] + ); + + $this->addResponsiveControl( + 'content_position', + [ + 'label' => __('Vertical Align'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'top' => __('Top'), + 'center' => __('Middle'), + 'bottom' => __('Bottom'), + 'space-between' => __('Space Between'), + 'space-around' => __('Space Around'), + 'space-evenly' => __('Space Evenly'), + ], + 'selectors_dictionary' => [ + 'top' => 'flex-start', + 'bottom' => 'flex-end', + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-column .elementor-column-wrap' => 'align-items: {{VALUE}}', + '{{WRAPPER}}.elementor-column > .elementor-column-wrap > .elementor-widget-wrap' => 'align-content: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Horizontal Align'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'flex-start' => __('Start'), + 'center' => __('Center'), + 'flex-end' => __('End'), + 'space-between' => __('Space Between'), + 'space-around' => __('Space Around'), + 'space-evenly' => __('Space Evenly'), + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-column > .elementor-column-wrap > .elementor-widget-wrap' => 'justify-content: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + 'space_between_widgets', + [ + 'label' => __('Widgets Space') . ' (px)', + 'type' => ControlsManager::NUMBER, + 'placeholder' => 20, + 'selectors' => [ + '{{WRAPPER}} > .elementor-column-wrap > .elementor-widget-wrap > .elementor-widget:not(.elementor-widget__width-auto):not(.elementor-widget__width-initial, .elementor-widget__width-calc):not(:last-child):not(.elementor-absolute)' => 'margin-bottom: {{VALUE}}px', //Need the full path for exclude the inner section + ], + ] + ); + + $possible_tags = [ + 'div', + 'header', + 'footer', + 'main', + 'article', + 'section', + 'aside', + 'nav', + ]; + + $options = [ + '' => __('Default'), + ] + array_combine($possible_tags, $possible_tags); + + $this->addControl( + 'html_tag', + [ + 'label' => __('HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => &$options, + 'render_type' => 'none', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style', + [ + 'label' => __('Background'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_background'); + + $this->startControlsTab( + 'tab_background_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background', + 'selector' => '{{WRAPPER}}:not(.elementor-motion-effects-element-type-background) > .elementor-element-populated, {{WRAPPER}} > .elementor-column-wrap > .elementor-motion-effects-container > .elementor-motion-effects-layer', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_background_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background_hover', + 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated', + ] + ); + + $this->addControl( + 'background_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0.3, + ], + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'render_type' => 'ui', + 'separator' => 'before', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + // Section Column Background Overlay. + $this->startControlsSection( + 'section_background_overlay', + [ + 'label' => __('Background Overlay'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'background_background' => ['classic', 'gradient'], + ], + ] + ); + + $this->startControlsTabs('tabs_background_overlay'); + + $this->startControlsTab( + 'tab_background_overlay_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background_overlay', + 'selector' => '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay', + ] + ); + + $this->addControl( + 'background_overlay_opacity', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => .5, + ], + 'range' => [ + 'px' => [ + 'max' => 1, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'opacity: {{SIZE}};', + ], + 'condition' => [ + 'background_overlay_background' => ['classic', 'gradient'], + ], + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters', + 'selector' => '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay', + ] + ); + + $this->addControl( + 'overlay_blend_mode', + [ + 'label' => __('Blend Mode'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Normal'), + 'multiply' => 'Multiply', + 'screen' => 'Screen', + 'overlay' => 'Overlay', + 'darken' => 'Darken', + 'lighten' => 'Lighten', + 'color-dodge' => 'Color Dodge', + 'saturation' => 'Saturation', + 'color' => 'Color', + 'luminosity' => 'Luminosity', + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'mix-blend-mode: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_background_overlay_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background_overlay_hover', + 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay', + ] + ); + + $this->addControl( + 'background_overlay_hover_opacity', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => .5, + ], + 'range' => [ + 'px' => [ + 'max' => 1, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay' => 'opacity: {{SIZE}};', + ], + 'condition' => [ + 'background_overlay_hover_background' => ['classic', 'gradient'], + ], + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters_hover', + 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay', + ] + ); + + $this->addControl( + 'background_overlay_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0.3, + ], + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'render_type' => 'ui', + 'separator' => 'before', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_border', + [ + 'label' => __('Border'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_border'); + + $this->startControlsTab( + 'tab_border_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border', + 'selector' => '{{WRAPPER}} > .elementor-element-populated', + ] + ); + + $this->addResponsiveControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} > .elementor-element-populated, {{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow', + 'selector' => '{{WRAPPER}} > .elementor-element-populated', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_border_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border_hover', + 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated', + ] + ); + + $this->addResponsiveControl( + 'border_radius_hover', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}}:hover > .elementor-element-populated, {{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow_hover', + 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated', + ] + ); + + $this->addControl( + 'border_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'separator' => 'before', + 'default' => [ + 'size' => 0.3, + ], + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'background_background', + 'operator' => '!==', + 'value' => '', + ], + [ + 'name' => 'border_border', + 'operator' => '!==', + 'value' => '', + ], + ], + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-element-populated' => 'transition: background {{background_hover_transition.SIZE}}s, border {{SIZE}}s, border-radius {{SIZE}}s, box-shadow {{SIZE}}s', + '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'transition: background {{background_overlay_hover_transition.SIZE}}s, border-radius {{SIZE}}s, opacity {{background_overlay_hover_transition.SIZE}}s', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + // Section Typography. + $this->startControlsSection( + 'section_typo', + [ + 'label' => __('Typography'), + 'type' => ControlsManager::SECTION, + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + if (in_array(SchemeColor::getType(), SchemesManager::getEnabledSchemes(), true)) { + $this->addControl( + 'colors_warning', + [ + 'type' => ControlsManager::RAW_HTML, + 'raw' => __('Note: The following colors won\'t work if Default Colors are enabled.'), + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning', + ] + ); + } + + $this->addControl( + 'heading_color', + [ + 'label' => __('Heading Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-element-populated .elementor-heading-title' => 'color: {{VALUE}};', + ], + 'separator' => 'none', + ] + ); + + $this->addControl( + 'color_text', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} > .elementor-element-populated' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'color_link', + [ + 'label' => __('Link Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-element-populated a:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'color_link_hover', + [ + 'label' => __('Link Hover Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-element-populated a:not(#e):hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'text_align', + [ + 'label' => __('Text Align'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-element-populated' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + // Section Advanced. + $this->startControlsSection( + 'section_advanced', + [ + 'label' => __('Advanced'), + 'type' => ControlsManager::SECTION, + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addResponsiveControl( + 'margin', + [ + 'label' => __('Margin'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} > .elementor-element-populated' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} > .elementor-element-populated' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'z_index', + [ + 'label' => __('Z-Index'), + 'type' => ControlsManager::NUMBER, + 'min' => 0, + 'selectors' => [ + '{{WRAPPER}}' => 'z-index: {{VALUE}};', + ], + 'label_block' => false, + ] + ); + + $this->addControl( + '_element_id', + [ + 'label' => __('CSS ID'), + 'type' => ControlsManager::TEXT, + 'default' => '', + 'dynamic' => [ + // 'active' => true, + ], + 'title' => __('Add your custom id WITHOUT the Pound key. e.g: my-id'), + 'label_block' => false, + 'style_transfer' => false, + ] + ); + + $this->addControl( + 'css_classes', + [ + 'label' => __('CSS Classes'), + 'type' => ControlsManager::TEXT, + 'default' => '', + 'dynamic' => [ + // 'active' => true, + ], + 'prefix_class' => '', + 'title' => __('Add your custom class WITHOUT the dot. e.g: my-class'), + 'label_block' => false, + ] + ); + + // TODO: Backward comparability for deprecated controls + $this->addControl( + 'screen_sm', + [ + 'type' => ControlsManager::HIDDEN, + ] + ); + + $this->addControl( + 'screen_sm_width', + [ + 'type' => ControlsManager::HIDDEN, + 'condition' => [ + 'screen_sm' => ['custom'], + ], + 'prefix_class' => 'elementor-sm-', + ] + ); + // END Backward comparability + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_effects', + [ + 'label' => __('Motion Effects'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addResponsiveControl( + 'animation', + [ + 'label' => __('Entrance Animation'), + 'type' => ControlsManager::ANIMATION, + 'frontend_available' => true, + 'exclude' => [ + 'Revealing', + 'Sliding & Revealing', + 'Scaling & Revealing', + ], + ] + ); + + $this->addControl( + 'animation_duration', + [ + 'label' => __('Animation Duration'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + 'slow' => __('Slow'), + '' => __('Normal'), + 'fast' => __('Fast'), + ], + 'prefix_class' => 'animated-', + 'condition' => [ + 'animation!' => ['', 'none'], + ], + ] + ); + + $this->addControl( + 'animation_delay', + [ + 'label' => __('Animation Delay') . ' (ms)', + 'type' => ControlsManager::NUMBER, + 'default' => '', + 'min' => 0, + 'step' => 100, + 'condition' => [ + 'animation!' => ['', 'none'], + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + '_section_responsive', + [ + 'label' => __('Responsive'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addControl( + 'responsive_description', + [ + 'raw' => __('Attention: The display settings (show/hide for mobile, tablet or desktop) will only take effect once you are on the preview or live page, and not while you\'re in editing mode in Elementor.'), + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-descriptor', + ] + ); + + $this->addControl( + 'hide_desktop', + [ + 'label' => __('Hide On Desktop'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'label_on' => 'Hide', + 'label_off' => 'Show', + 'return_value' => 'hidden-desktop', + ] + ); + + $this->addControl( + 'hide_tablet', + [ + 'label' => __('Hide On Tablet'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'label_on' => 'Hide', + 'label_off' => 'Show', + 'return_value' => 'hidden-tablet', + ] + ); + + $this->addControl( + 'hide_mobile', + [ + 'label' => __('Hide On Mobile'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'label_on' => 'Hide', + 'label_off' => 'Show', + 'return_value' => 'hidden-phone', + ] + ); + + $this->endControlsSection(); + + Plugin::$instance->controls_manager->addCustomCssControls($this); + } + + /** + * Render column edit tools. + * + * Used to generate the edit tools HTML. + * + * @since 1.8.0 + * @access protected + */ + protected function renderEditTools() + { + ?> +
+
    + $edit_tool) : ?> +
  • + + +
  • + +
+
+
+ + <# view._index || view.$el.addClass('elementor-active') #> +
+
+
+
+ getSettingsForDisplay(); + + $has_background_overlay = in_array($settings['background_overlay_background'], ['classic', 'gradient'], true) || + in_array($settings['background_overlay_hover_background'], ['classic', 'gradient'], true); + + $column_wrap_classes = ['elementor-column-wrap']; + + if ($this->getChildren()) { + $column_wrap_classes[] = 'elementor-element-populated'; + } + + if (($section = Helper::$section_stack[0])->getSettings('tabs') && + array_search($this, $section->getChildren(), true) === Helper::getFirstTabIndex($section) + ) { + $this->addRenderAttribute('_wrapper', 'class', 'elementor-active'); + } + + $this->addRenderAttribute([ + '_inner_wrapper' => [ + 'class' => $column_wrap_classes, + ], + '_widget_wrapper' => [ + 'class' => ['elementor-widget-wrap'], + ], + '_background_overlay' => [ + 'class' => ['elementor-background-overlay'], + ], + ]); + ?> + <getHtmlTag() ?> getRenderAttributeString('_wrapper') ?>> +
getRenderAttributeString('_inner_wrapper') ?>> + +
getRenderAttributeString('_background_overlay') ?>>
+ +
getRenderAttributeString('_widget_wrapper') ?>> + +
+
+ getHtmlTag() ?>> + getData('isInner'); + + $column_type = !empty($is_inner) ? 'inner' : 'top'; + + $this->addRenderAttribute('_wrapper', 'class', [ + 'elementor-column', + 'elementor-col-' . (Helper::$section_stack[0]->getSettings('tabs') + ? 100 + : $this->getSettings('_column_size') + ), + 'elementor-' . $column_type . '-column', + ]); + } + + /** + * Get default child type. + * + * Retrieve the column child type based on element data. + * + * @since 1.0.0 + * @access protected + * + * @param array $element_data Element ID. + * + * @return ElementBase Column default child type. + */ + protected function _getDefaultChildType(array $element_data) + { + if ('section' === $element_data['elType']) { + return Plugin::$instance->elements_manager->getElementTypes('section'); + } + + return Plugin::$instance->widgets_manager->getWidgetTypes($element_data['widgetType']); + } + + /** + * Get HTML tag. + * + * Retrieve the column element HTML tag. + * + * @since 1.5.3 + * @access private + * + * @return string Column HTML tag. + */ + private function getHtmlTag() + { + $html_tag = $this->getSettings('html_tag'); + + if (empty($html_tag)) { + $html_tag = 'div'; + } + + return $html_tag; + } +} diff --git a/modules/creativeelements/includes/elements/index.php b/modules/creativeelements/includes/elements/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/includes/elements/index.php @@ -0,0 +1,8 @@ +getCurrentTab(); + + if (null !== $current_tab) { + $args = array_merge($args, $current_tab); + } + + return Plugin::$instance->controls_manager->addControlToStack($this, $id, $args, $options); + } + + /** + * Get default child type. + * + * Retrieve the repeater child type based on element data. + * + * Note that repeater does not support children, therefore it returns false. + * + * @since 1.0.0 + * @access protected + * + * @param array $element_data Element ID. + * + * @return false Repeater default child type or False if type not found. + */ + protected function _getDefaultChildType(array $element_data) + { + return false; + } +} diff --git a/modules/creativeelements/includes/elements/section.php b/modules/creativeelements/includes/elements/section.php new file mode 100644 index 00000000..72a7ee1b --- /dev/null +++ b/modules/creativeelements/includes/elements/section.php @@ -0,0 +1,2364 @@ + [ + [ + 'preset' => [33, 66], + ], + [ + 'preset' => [66, 33], + ], + ], + 3 => [ + [ + 'preset' => [25, 25, 50], + ], + [ + 'preset' => [50, 25, 25], + ], + [ + 'preset' => [25, 50, 25], + ], + [ + 'preset' => [16, 66, 16], + ], + ], + ]; + + foreach (range(1, 10) as $columns_count) { + self::$presets[$columns_count] = [ + [ + 'preset' => [], + ], + ]; + + $preset_unit = floor(1 / $columns_count * 100); + + for ($i = 0; $i < $columns_count; $i++) { + self::$presets[$columns_count][0]['preset'][] = $preset_unit; + } + + if (!empty($additional_presets[$columns_count])) { + self::$presets[$columns_count] = array_merge(self::$presets[$columns_count], $additional_presets[$columns_count]); + } + + foreach (self::$presets[$columns_count] as $preset_index => &$preset) { + $preset['key'] = $columns_count . $preset_index; + } + } + } + + /** + * Get default edit tools. + * + * Retrieve the section default edit tools. Used to set initial tools. + * + * @since 1.0.0 + * @access protected + * @static + * + * @return array Default section edit tools. + */ + protected static function getDefaultEditTools() + { + $section_label = __('Section'); + + $edit_tools = [ + 'add' => [ + /* translators: %s: Section label */ + 'title' => sprintf(__('Add %s'), $section_label), + 'icon' => 'plus', + ], + 'edit' => [ + /* translators: %s: Section label */ + 'title' => sprintf(__('Edit %s'), $section_label), + 'icon' => 'handle', + ], + ]; + + if (self::isEditButtonsEnabled()) { + $edit_tools += [ + 'duplicate' => [ + /* translators: %s: Section label */ + 'title' => sprintf(__('Duplicate %s'), $section_label), + 'icon' => 'clone', + ], + ]; + } + + $edit_tools += [ + 'remove' => [ + /* translators: %s: Section label */ + 'title' => sprintf(__('Delete %s'), $section_label), + 'icon' => 'close', + ], + ]; + + return $edit_tools; + } + + /** + * Get initial config. + * + * Retrieve the current section initial configuration. + * + * Adds more configuration on top of the controls list, the tabs assigned to + * the control, element name, type, icon and more. This method also adds + * section presets. + * + * @since 1.0.10 + * @access protected + * + * @return array The initial config. + */ + protected function _getInitialConfig() + { + $config = parent::_getInitialConfig(); + + $config['presets'] = self::getPresets(); + $config['controls'] = $this->getControls(); + $config['tabs_controls'] = $this->getTabsControls(); + + return $config; + } + + /** + * Register section controls. + * + * Used to add new controls to the section element. + * + * @since 1.0.0 + * @access protected + */ + protected function _registerControls() + { + + $this->startControlsSection( + 'section_layout', + [ + 'label' => __('Layout'), + 'tab' => ControlsManager::TAB_LAYOUT, + ] + ); + + $this->addControl( + '_title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::HIDDEN, + 'render_type' => 'none', + ] + ); + + $this->addControl( + 'tabs', + [ + 'label' => '' . __('Tabbed Section') . '', + 'type' => ControlsManager::SWITCHER, + 'return_value' => 'tabbed', + 'prefix_class' => 'elementor-widget-nav-menu elementor-section-', + 'render_type' => 'template', + ] + ); + + $this->addControl( + 'tabs_layout', + [ + 'label' => __('Tab Bar'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'toggle' => false, + 'options' => [ + 'horizontal' => [ + 'title' => __('Horizontal'), + 'icon' => 'eicon-ellipsis-h', + ], + 'vertical' => [ + 'title' => __('Vertical'), + 'icon' => 'eicon-ellipsis-v', + ], + ], + 'default' => 'horizontal', + 'condition' => [ + 'tabs!' => '', + ], + ] + ); + + $this->addControl( + 'tabs_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + '' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'bottom' => [ + 'title' => __('Bottom'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs' => 'order: 1', + ], + 'condition' => [ + 'tabs!' => '', + 'tabs_layout' => 'horizontal', + ], + ] + ); + + $this->addControl( + 'tabs_vertical_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'selectors_dictionary' => [ + 'left' => '-1', + 'right' => '1', + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} > .elementor-container > .elementor-nav-tabs' => 'order: {{VALUE}}', + 'body.lang-rtl {{WRAPPER}} > .elementor-container > .elementor-row' => 'order: {{VALUE}}', + ], + 'condition' => [ + 'tabs!' => '', + 'tabs_layout' => 'vertical', + ], + ] + ); + + $this->addControl( + 'tabs_align_self', + [ + 'label' => __('Vertical Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'top' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'center' => [ + 'title' => __('Middle'), + 'icon' => 'eicon-v-align-middle', + ], + 'bottom' => [ + 'title' => __('Bottom'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'selectors_dictionary' => [ + 'top' => 'flex-start', + 'bottom' => 'flex-end', + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs' => 'align-self: {{VALUE}}', + ], + 'condition' => [ + 'tabs!' => '', + 'tabs_layout' => 'vertical', + ], + ] + ); + + $this->addControl( + 'tabs_align_items', + [ + 'label' => __('Align'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-h-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + 'justify' => [ + 'title' => __('Stretch'), + 'icon' => 'eicon-h-align-stretch', + ], + ], + 'prefix_class' => 'elementor-nav--align-', + 'condition' => [ + 'tabs!' => '', + ], + ] + ); + + $this->addControl( + 'pointer', + [ + 'label' => __('Pointer'), + 'type' => ControlsManager::SELECT, + 'default' => 'underline', + 'options' => [ + 'none' => __('None'), + 'underline' => __('Underline'), + 'overline' => __('Overline'), + 'double-line' => __('Double Line'), + 'framed' => __('Framed'), + 'background' => __('Background'), + 'text' => __('Text'), + ], + 'condition' => [ + 'tabs!' => '', + ], + ] + ); + + $this->addControl( + 'animation_line', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'fade', + 'options' => [ + 'fade' => 'Fade', + 'slide' => 'Slide', + 'grow' => 'Grow', + 'drop-in' => 'Drop In', + 'drop-out' => 'Drop Out', + 'none' => 'None', + ], + 'condition' => [ + 'tabs!' => '', + 'pointer' => ['underline', 'overline', 'double-line'], + ], + ] + ); + + $this->addControl( + 'animation_framed', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'fade', + 'options' => [ + 'fade' => 'Fade', + 'grow' => 'Grow', + 'shrink' => 'Shrink', + 'draw' => 'Draw', + 'corners' => 'Corners', + 'none' => 'None', + ], + 'condition' => [ + 'tabs!' => '', + 'pointer' => 'framed', + ], + ] + ); + + $this->addControl( + 'animation_background', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'fade', + 'options' => [ + 'fade' => 'Fade', + 'grow' => 'Grow', + 'shrink' => 'Shrink', + 'sweep-left' => 'Sweep Left', + 'sweep-right' => 'Sweep Right', + 'sweep-up' => 'Sweep Up', + 'sweep-down' => 'Sweep Down', + 'shutter-in-vertical' => 'Shutter In Vertical', + 'shutter-out-vertical' => 'Shutter Out Vertical', + 'shutter-in-horizontal' => 'Shutter In Horizontal', + 'shutter-out-horizontal' => 'Shutter Out Horizontal', + 'none' => 'None', + ], + 'condition' => [ + 'tabs!' => '', + 'pointer' => 'background', + ], + ] + ); + + $this->addControl( + 'animation_text', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'grow', + 'options' => [ + 'grow' => 'Grow', + 'shrink' => 'Shrink', + 'sink' => 'Sink', + 'float' => 'Float', + 'skew' => 'Skew', + 'rotate' => 'Rotate', + 'none' => 'None', + ], + 'condition' => [ + 'tabs!' => '', + 'pointer' => 'text', + ], + ] + ); + + $this->addResponsiveControl( + 'tabs_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'range' => [ + 'px' => [ + 'max' => 500, + ], + ], + 'default' => [ + 'size' => 25, + 'unit' => '%', + ], + 'mobile_default' => [ + 'size' => 100, + 'unit' => '%', + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs' => 'min-width: 1px; flex: 1 0 {{SIZE}}{{UNIT}}', + '{{WRAPPER}} > .elementor-container > .elementor-row' => 'min-width: 1px; flex: 1 0 calc(100% - {{SIZE}}{{UNIT}}); position: relative', + ], + 'condition' => [ + 'tabs!' => '', + 'tabs_layout' => 'vertical', + ], + ] + ); + + $this->addControl( + 'stretch_section', + [ + 'label' => __('Stretch Section'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'return_value' => 'section-stretched', + 'prefix_class' => 'elementor-', + 'hide_in_inner' => true, + 'description' => __('Stretch the section to the full width of the page using JS.'), + 'render_type' => 'none', + 'frontend_available' => true, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'layout', + [ + 'label' => __('Content Width'), + 'type' => ControlsManager::SELECT, + 'default' => 'boxed', + 'options' => [ + 'boxed' => __('Boxed'), + 'full_width' => __('Full Width'), + ], + 'prefix_class' => 'elementor-section-', + ] + ); + + $this->addControl( + 'content_width', + [ + 'label' => __('Content Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 500, + 'max' => 1600, + ], + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-container' => 'max-width: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'layout' => ['boxed'], + ], + 'show_label' => false, + 'separator' => 'none', + ] + ); + + $this->addControl( + 'gap', + [ + 'label' => __('Columns Gap'), + 'type' => ControlsManager::SELECT, + 'default' => 'default', + 'options' => [ + 'default' => __('Default'), + 'no' => __('No Gap'), + 'narrow' => __('Narrow'), + 'extended' => __('Extended'), + 'wide' => __('Wide'), + 'wider' => __('Wider'), + ], + ] + ); + + $this->addControl( + 'height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SELECT, + 'default' => 'default', + 'options' => [ + 'default' => __('Default'), + 'full' => __('Fit To Screen'), + 'min-height' => __('Min Height'), + ], + 'prefix_class' => 'elementor-section-height-', + 'hide_in_inner' => true, + ] + ); + + $this->addResponsiveControl( + 'custom_height', + [ + 'label' => __('Minimum Height'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 400, + ], + 'range' => [ + 'px' => [ + 'max' => 1440, + ], + ], + 'size_units' => ['px', 'vh', 'vw'], + 'selectors' => [ + '{{WRAPPER}} > .elementor-container' => 'min-height: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} > .elementor-container:after' => 'content: ""; min-height: inherit;', // Hack for IE11 + ], + 'condition' => [ + 'height' => ['min-height'], + ], + 'hide_in_inner' => true, + ] + ); + + $this->addControl( + 'height_inner', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SELECT, + 'default' => 'default', + 'options' => [ + 'default' => __('Default'), + 'full' => __('Fit To Screen'), + 'min-height' => __('Min Height'), + ], + 'prefix_class' => 'elementor-section-height-', + 'hide_in_top' => true, + ] + ); + + $this->addResponsiveControl( + 'custom_height_inner', + [ + 'label' => __('Minimum Height'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 400, + ], + 'range' => [ + 'px' => [ + 'max' => 1440, + ], + ], + 'size_units' => ['px', 'vh', 'vw'], + 'selectors' => [ + '{{WRAPPER}} > .elementor-container' => 'min-height: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'height_inner' => ['min-height'], + ], + 'hide_in_top' => true, + ] + ); + + $this->addControl( + 'column_position', + [ + 'label' => __('Column Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'middle', + 'options' => [ + 'stretch' => __('Stretch'), + 'top' => __('Top'), + 'middle' => __('Middle'), + 'bottom' => __('Bottom'), + ], + 'prefix_class' => 'elementor-section-items-', + 'condition' => [ + 'height' => ['full', 'min-height'], + ], + ] + ); + + $this->addControl( + 'content_position', + [ + 'label' => __('Content Position'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'top' => __('Top'), + 'middle' => __('Middle'), + 'bottom' => __('Bottom'), + ], + 'prefix_class' => 'elementor-section-content-', + ] + ); + + $this->addControl( + 'overflow', + [ + 'label' => __('Overflow'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'hidden' => __('Hidden'), + ], + 'selectors' => [ + '{{WRAPPER}}' => 'overflow: {{VALUE}}', + ], + ] + ); + + $possible_tags = [ + 'div', + 'header', + 'footer', + 'main', + 'article', + 'section', + 'aside', + 'nav', + ]; + + $options = [ + '' => __('Default'), + ] + array_combine($possible_tags, $possible_tags); + + $this->addControl( + 'html_tag', + [ + 'label' => __('HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => &$options, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'structure', + [ + 'label' => __('Structure'), + 'type' => ControlsManager::STRUCTURE, + 'default' => '10', + 'render_type' => 'none', + 'condition' => [ + 'tabs' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_tab_bar_style', + [ + 'label' => __('Tab Bar'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'tabs!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'menu_typography', + 'selector' => '{{WRAPPER}} .elementor-nav--main', + 'separator' => 'before' + ] + ); + + $this->startControlsTabs('tabs_menu_item_style'); + + $this->startControlsTab( + 'tab_menu_item_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'color_menu_item', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item:not(#e)' => 'color: {{VALUE}}', + ], + ] + ); + + // $this->addControl( + // 'color_icon', + // [ + // 'label' => __('Icon Color'), + // 'type' => ControlsManager::COLOR, + // 'selectors' => [ + // '{{WRAPPER}} .elementor-item > i' => 'color: {{VALUE}}', + // ], + // 'condition' => [ + // 'icon!' => '', + // ], + // ] + // ); + + $this->addControl( + 'background_color_menu_item', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs > .elementor-nav' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_menu_item_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'color_menu_item_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item.elementor-item-active:not(#e), ' . + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item.highlighted:not(#e), ' . + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item:not(#e):hover, ' . + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item:not(#e):focus' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'pointer!' => 'background', + ], + ] + ); + + // $this->addControl( + // 'color_icon_hover', + // [ + // 'label' => __('Icon Color'), + // 'type' => ControlsManager::COLOR, + // 'selectors' => [ + // '{{WRAPPER}} .elementor-item:hover > i' => 'color: {{VALUE}}', + // ], + // 'condition' => [ + // 'icon!' => '', + // ], + // ] + // ); + + $this->addControl( + 'color_menu_item_hover_pointer_bg', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#fff', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item.elementor-item-active:not(#e), ' . + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item.highlighted:not(#e), ' . + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item:not(#e):hover, ' . + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item:not(#e):focus' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'pointer' => 'background', + ], + ] + ); + + $this->addControl( + 'pointer_color_menu_item_hover', + [ + 'label' => __('Pointer Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav-tabs:not(.e--pointer-framed) .elementor-item:before, ' . + '{{WRAPPER}} .elementor-nav-tabs:not(.e--pointer-framed) .elementor-item:after' => 'background-color: {{VALUE}}', + '{{WRAPPER}} .elementor-nav-tabs.e--pointer-framed .elementor-item:before, ' . + '{{WRAPPER}} .elementor-nav-tabs.e--pointer-framed .elementor-item:after' => 'border-color: {{VALUE}}', + ], + 'condition' => [ + 'pointer!' => ['none', 'text'], + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_menu_item_active', + [ + 'label' => __('Active'), + ] + ); + + $this->addControl( + 'color_menu_item_active', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav-tabs a.elementor-item.elementor-item-active:not(#e)' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'pointer_color_menu_item_active', + [ + 'label' => __('Pointer Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav-tabs:not(.e--pointer-framed) .elementor-item.elementor-item-active:before, ' . + '{{WRAPPER}} .elementor-nav-tabs:not(.e--pointer-framed) .elementor-item.elementor-item-active:after' => 'background-color: {{VALUE}}', + '{{WRAPPER}} .elementor-nav-tabs.e--pointer-framed .elementor-item.elementor-item-active:before, ' . + '{{WRAPPER}} .elementor-nav-tabs.e--pointer-framed .elementor-item.elementor-item-active:after' => 'border-color: {{VALUE}}', + ], + 'condition' => [ + 'pointer!' => ['none', 'text'], + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'separator_tabs_style', + [ + 'type' => ControlsManager::DIVIDER, + ] + ); + + $this->startControlsTabs('tabs_tabs_style'); + + $this->startControlsTab( + 'tab_tabs_items', + [ + 'label' => __('Tabs Items'), + ] + ); + + $this->addResponsiveControl( + 'padding_horizontal_menu_item', + [ + 'label' => __('Horizontal Padding'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-nav-tabs .elementor-item' => 'padding-left: {{SIZE}}{{UNIT}}; padding-right: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'padding_vertical_menu_item', + [ + 'label' => __('Vertical Padding'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-nav-tabs .elementor-item' => 'padding-top: {{SIZE}}{{UNIT}}; padding-bottom: {{SIZE}}{{UNIT}}', + ], + ] + ); + + // $this->addControl( + // 'icon_size', + // [ + // 'label' => __('Icon Size'), + // 'type' => ControlsManager::SLIDER, + // 'range' => [ + // 'px' => [ + // 'max' => 50, + // ], + // ], + // 'size_units' => ['px', 'em'], + // 'selectors' => [ + // '{{WRAPPER}} .elementor-item > i' => 'font-size: {{SIZE}}{{UNIT}}', + // ], + // 'condition' => [ + // 'icon!' => '', + // ], + // ] + // ); + + $this->addResponsiveControl( + 'menu_space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .elementor-nav--layout-horizontal .elementor-nav > li:not(:last-child)' => 'margin-right: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .elementor-nav--layout-horizontal .elementor-nav > li:not(:last-child)' => 'margin-left: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-nav-tabs:not(.elementor-nav--layout-horizontal) .elementor-nav > li:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'border_radius_menu_item', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-item:before' => 'border-radius: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--animation-shutter-in-horizontal .elementor-item:before' => 'border-radius: {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0 0', + '{{WRAPPER}} .e--animation-shutter-in-horizontal .elementor-item:after' => 'border-radius: 0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--animation-shutter-in-vertical .elementor-item:before' => 'border-radius: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + '{{WRAPPER}} .e--animation-shutter-in-vertical .elementor-item:after' => 'border-radius: {{SIZE}}{{UNIT}} 0 0 {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'pointer' => 'background', + ], + ] + ); + + $this->addControl( + 'pointer_width', + [ + 'label' => __('Pointer Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 30, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .e--pointer-framed .elementor-item:before' => 'border-width: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--pointer-framed.e--animation-draw .elementor-item:before' => 'border-width: 0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--pointer-framed.e--animation-draw .elementor-item:after' => 'border-width: {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0 0', + '{{WRAPPER}} .e--pointer-framed.e--animation-corners .elementor-item:before' => 'border-width: {{SIZE}}{{UNIT}} 0 0 {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--pointer-framed.e--animation-corners .elementor-item:after' => 'border-width: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + '{{WRAPPER}} .e--pointer-underline .elementor-item:after, ' . + '{{WRAPPER}} .e--pointer-overline .elementor-item:before, ' . + '{{WRAPPER}} .e--pointer-double-line .elementor-item:before, ' . + '{{WRAPPER}} .e--pointer-double-line .elementor-item:after' => 'height: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'pointer' => ['underline', 'overline', 'double-line', 'framed'], + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_tabs', + [ + 'label' => __('Tabs'), + ] + ); + + $this->addControl( + 'tabs_full_width', + [ + 'label' => __('Full Width'), + 'type' => ControlsManager::SWITCHER, + 'selectors' => [ + '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs > .elementor-nav' => 'width: 100%', + ], + 'condition' => [ + 'tabs_layout' => 'horizontal', + ], + ] + ); + + $this->addControl( + 'tabs_overflow_scrolling', + [ + 'label' => __('Overflow Scrolling'), + 'type' => ControlsManager::SWITCHER, + 'selectors' => [ + '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs > .elementor-nav' => 'flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch', + ], + 'condition' => [ + 'tabs_layout' => 'horizontal', + ] + ] + ); + + $this->addResponsiveControl( + 'tabs_margin', + [ + 'label' => __('Margin'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'default' => [ + 'top' => 10, + 'right' => 10, + 'bottom' => 10, + 'left' => 10, + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'tabs_border', + 'selector' => '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs > .elementor-nav', + ] + ); + + $this->addResponsiveControl( + 'tabs_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs > .elementor-nav' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'tabs_box_shadow', + 'selector' => '{{WRAPPER}} > .elementor-container > .elementor-nav-tabs > .elementor-nav', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + // Section background + $this->startControlsSection( + 'section_background', + [ + 'label' => __('Background'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_background'); + + $this->startControlsTab( + 'tab_background_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background', + 'types' => ['classic', 'gradient', 'video'], + 'fields_options' => [ + 'background' => [ + 'frontend_available' => true, + ], + 'video_link' => [ + 'frontend_available' => true, + ], + 'video_start' => [ + 'frontend_available' => true, + ], + 'video_end' => [ + 'frontend_available' => true, + ], + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_background_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background_hover', + 'selector' => '{{WRAPPER}}:hover', + ] + ); + + $this->addControl( + 'background_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0.3, + ], + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'render_type' => 'ui', + 'separator' => 'before', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + // Background Overlay + $this->startControlsSection( + 'section_background_overlay', + [ + 'label' => __('Background Overlay'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'background_background' => ['classic', 'gradient', 'video'], + ], + ] + ); + + $this->startControlsTabs('tabs_background_overlay'); + + $this->startControlsTab( + 'tab_background_overlay_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background_overlay', + 'selector' => '{{WRAPPER}} > .elementor-background-overlay', + ] + ); + + $this->addControl( + 'background_overlay_opacity', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => .5, + ], + 'range' => [ + 'px' => [ + 'max' => 1, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-background-overlay' => 'opacity: {{SIZE}};', + ], + 'condition' => [ + 'background_overlay_background' => ['classic', 'gradient'], + ], + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters', + 'selector' => '{{WRAPPER}} .elementor-background-overlay', + ] + ); + + $this->addControl( + 'overlay_blend_mode', + [ + 'label' => __('Blend Mode'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Normal'), + 'multiply' => 'Multiply', + 'screen' => 'Screen', + 'overlay' => 'Overlay', + 'darken' => 'Darken', + 'lighten' => 'Lighten', + 'color-dodge' => 'Color Dodge', + 'saturation' => 'Saturation', + 'color' => 'Color', + 'luminosity' => 'Luminosity', + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-background-overlay' => 'mix-blend-mode: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_background_overlay_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background_overlay_hover', + 'selector' => '{{WRAPPER}}:hover > .elementor-background-overlay', + ] + ); + + $this->addControl( + 'background_overlay_hover_opacity', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => .5, + ], + 'range' => [ + 'px' => [ + 'max' => 1, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}}:hover > .elementor-background-overlay' => 'opacity: {{SIZE}};', + ], + 'condition' => [ + 'background_overlay_hover_background' => ['classic', 'gradient'], + ], + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters_hover', + 'selector' => '{{WRAPPER}}:hover > .elementor-background-overlay', + ] + ); + + $this->addControl( + 'background_overlay_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0.3, + ], + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'render_type' => 'ui', + 'separator' => 'before', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + // Section border + $this->startControlsSection( + 'section_border', + [ + 'label' => __('Border'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_border'); + + $this->startControlsTab( + 'tab_border_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border', + ] + ); + + $this->addResponsiveControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}}, {{WRAPPER}} > .elementor-background-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_border_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border_hover', + 'selector' => '{{WRAPPER}}:hover', + ] + ); + + $this->addResponsiveControl( + 'border_radius_hover', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}}:hover, {{WRAPPER}}:hover > .elementor-background-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow_hover', + 'selector' => '{{WRAPPER}}:hover', + ] + ); + + $this->addControl( + 'border_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'separator' => 'before', + 'default' => [ + 'size' => 0.3, + ], + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'background_background', + 'operator' => '!==', + 'value' => '', + ], + [ + 'name' => 'border_border', + 'operator' => '!==', + 'value' => '', + ], + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => 'transition: background {{background_hover_transition.SIZE}}s, border {{SIZE}}s, border-radius {{SIZE}}s, box-shadow {{SIZE}}s', + '{{WRAPPER}} > .elementor-background-overlay' => 'transition: background {{background_overlay_hover_transition.SIZE}}s, border-radius {{SIZE}}s, opacity {{background_overlay_hover_transition.SIZE}}s', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + // Section Shape Divider + $this->startControlsSection( + 'section_shape_divider', + [ + 'label' => __('Shape Divider'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_shape_dividers'); + + $shapes_options = [ + '' => __('None'), + ]; + + foreach (Shapes::getShapes() as $shape_name => $shape_props) { + $shapes_options[$shape_name] = $shape_props['title']; + } + + foreach ([ + 'top' => __('Top'), + 'bottom' => __('Bottom'), + ] as $side => $side_label + ) { + $base_control_key = "shape_divider_$side"; + + $this->startControlsTab( + "tab_$base_control_key", + [ + 'label' => $side_label, + ] + ); + + $this->addControl( + $base_control_key, + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'options' => $shapes_options, + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $this->addControl( + $base_control_key . '_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'condition' => [ + "shape_divider_$side!" => '', + ], + 'selectors' => [ + "{{WRAPPER}} > .elementor-shape-$side .elementor-shape-fill" => 'fill: {{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + $base_control_key . '_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => '%', + ], + 'tablet_default' => [ + 'unit' => '%', + ], + 'mobile_default' => [ + 'unit' => '%', + ], + 'range' => [ + '%' => [ + 'min' => 100, + 'max' => 300, + ], + ], + 'condition' => [ + "shape_divider_$side" => array_keys(Shapes::filterShapes('height_only', Shapes::FILTER_EXCLUDE)), + ], + 'selectors' => [ + "{{WRAPPER}} > .elementor-shape-$side svg" => 'width: calc({{SIZE}}{{UNIT}} + 1.3px)', + ], + ] + ); + + $this->addResponsiveControl( + $base_control_key . '_height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 500, + ], + ], + 'condition' => [ + "shape_divider_$side!" => '', + ], + 'selectors' => [ + "{{WRAPPER}} > .elementor-shape-$side svg" => 'height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + $base_control_key . '_flip', + [ + 'label' => __('Flip'), + 'type' => ControlsManager::SWITCHER, + 'condition' => [ + "shape_divider_$side" => array_keys(Shapes::filterShapes('has_flip')), + ], + 'selectors' => [ + "{{WRAPPER}} > .elementor-shape-$side svg" => 'transform: translateX(-50%) rotateY(180deg)', + ], + ] + ); + + $this->addControl( + $base_control_key . '_negative', + [ + 'label' => __('Invert'), + 'type' => ControlsManager::SWITCHER, + 'frontend_available' => true, + 'condition' => [ + "shape_divider_$side" => array_keys(Shapes::filterShapes('has_negative')), + ], + 'render_type' => 'none', + ] + ); + + $this->addControl( + $base_control_key . '_above_content', + [ + 'label' => __('Bring to Front'), + 'type' => ControlsManager::SWITCHER, + 'selectors' => [ + "{{WRAPPER}} > .elementor-shape-$side" => 'z-index: 2; pointer-events: none', + ], + 'condition' => [ + "shape_divider_$side!" => '', + ], + ] + ); + + $this->endControlsTab(); + } + + $this->endControlsTabs(); + + $this->endControlsSection(); + + // Section Typography + $this->startControlsSection( + 'section_typo', + [ + 'label' => __('Typography'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + if (in_array(SchemeColor::getType(), SchemesManager::getEnabledSchemes(), true)) { + $this->addControl( + 'colors_warning', + [ + 'type' => ControlsManager::RAW_HTML, + 'raw' => __('Note: The following colors won\'t work if Default Colors are enabled.'), + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning', + ] + ); + } + + $this->addControl( + 'heading_color', + [ + 'label' => __('Heading Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-heading-title' => 'color: {{VALUE}};', + ], + 'separator' => 'none', + ] + ); + + $this->addControl( + 'color_text', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}}' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'color_link', + [ + 'label' => __('Link Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} a:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'color_link_hover', + [ + 'label' => __('Link Hover Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} a:not(#e):hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'text_align', + [ + 'label' => __('Text Align'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-container' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + // Section Advanced + $this->startControlsSection( + 'section_advanced', + [ + 'label' => __('Advanced'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addResponsiveControl( + 'margin', + [ + 'label' => __('Margin'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'allowed_dimensions' => 'vertical', + 'placeholder' => [ + 'top' => '', + 'right' => 'auto', + 'bottom' => '', + 'left' => 'auto', + ], + 'selectors' => [ + '{{WRAPPER}}' => 'margin-top: {{TOP}}{{UNIT}}; margin-bottom: {{BOTTOM}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}}' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'z_index', + [ + 'label' => __('Z-Index'), + 'type' => ControlsManager::NUMBER, + 'min' => 0, + 'selectors' => [ + '{{WRAPPER}}' => 'z-index: {{VALUE}};', + ], + 'label_block' => false, + ] + ); + + $this->addControl( + '_element_id', + [ + 'label' => __('CSS ID'), + 'type' => ControlsManager::TEXT, + 'default' => '', + 'dynamic' => [ + // 'active' => true, + ], + 'title' => __('Add your custom id WITHOUT the Pound key. e.g: my-id'), + 'label_block' => false, + 'style_transfer' => false, + ] + ); + + $this->addControl( + 'css_classes', + [ + 'label' => __('CSS Classes'), + 'type' => ControlsManager::TEXT, + 'default' => '', + 'dynamic' => [ + // 'active' => true, + ], + 'prefix_class' => '', + 'title' => __('Add your custom class WITHOUT the dot. e.g: my-class'), + 'label_block' => false, + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_effects', + [ + 'label' => __('Motion Effects'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addResponsiveControl( + 'animation', + [ + 'label' => __('Entrance Animation'), + 'type' => ControlsManager::ANIMATION, + 'frontend_available' => true, + 'exclude' => [ + 'Revealing', + 'Sliding & Revealing', + 'Scaling & Revealing', + ], + ] + ); + + $this->addControl( + 'animation_duration', + [ + 'label' => __('Animation Duration'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + 'slow' => __('Slow'), + '' => __('Normal'), + 'fast' => __('Fast'), + ], + 'prefix_class' => 'animated-', + 'condition' => [ + 'animation!' => ['', 'none'], + ], + ] + ); + + $this->addControl( + 'animation_delay', + [ + 'label' => __('Animation Delay') . ' (ms)', + 'type' => ControlsManager::NUMBER, + 'default' => '', + 'min' => 0, + 'step' => 100, + 'condition' => [ + 'animation!' => ['', 'none'], + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $this->endControlsSection(); + + // Section Responsive + $this->startControlsSection( + '_section_responsive', + [ + 'label' => __('Responsive'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addControl( + 'reverse_order_tablet', + [ + 'label' => __('Reverse Columns') . ' (' . __('Tablet') . ')', + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'return_value' => 'reverse-tablet', + ] + ); + + $this->addControl( + 'reverse_order_mobile', + [ + 'label' => __('Reverse Columns') . ' (' . __('Mobile') . ')', + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'return_value' => 'reverse-mobile', + ] + ); + + // $this->addControl( + // 'heading_visibility', + // [ + // 'label' => __('Visibility'), + // 'type' => ControlsManager::HEADING, + // 'separator' => 'before', + // ] + // ); + + $this->addControl( + 'responsive_description', + [ + 'raw' => __('Attention: The display settings (show/hide for mobile, tablet or desktop) will only take effect once you are on the preview or live page, and not while you\'re in editing mode in Elementor.'), + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-descriptor', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'hide_desktop', + [ + 'label' => __('Hide On Desktop'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'label_on' => __('Hide'), + 'label_off' => __('Show'), + 'return_value' => 'hidden-desktop', + ] + ); + + $this->addControl( + 'hide_tablet', + [ + 'label' => __('Hide On Tablet'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'label_on' => __('Hide'), + 'label_off' => __('Show'), + 'return_value' => 'hidden-tablet', + ] + ); + + $this->addControl( + 'hide_mobile', + [ + 'label' => __('Hide On Mobile'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'label_on' => __('Hide'), + 'label_off' => __('Show'), + 'return_value' => 'hidden-phone', + ] + ); + + $this->endControlsSection(); + + Plugin::$instance->controls_manager->addCustomCssControls($this); + } + + /** + * Render section edit tools. + * + * Used to generate the edit tools HTML. + * + * @since 1.8.0 + * @access protected + */ + protected function renderEditTools() + { + ?> +
+
    + $edit_tool) : ?> + + <# if ( ! isInner ) { #> + +
  • + + +
  • + + <# } #> + + +
+
+ + <# if ( settings.background_video_link ) { #> +
+
+ +
+ <# } #> +
+
+
+
+ <# if ( settings.tabs ) { + view.addRenderAttribute( 'tabs', 'class', [ + 'elementor-nav-tabs', + 'elementor-nav--main', + 'elementor-nav--layout-' + settings.tabs_layout + ] ); + if ( 'none' !== settings.pointer ) { + var animation_type = ~ [ 'framed', 'background', 'text' ].indexOf( settings.pointer ) ? + 'animation_' + settings.pointer : 'animation_line'; + + view.addRenderAttribute( 'tabs', 'class', [ + 'e--pointer-' + settings.pointer, + 'e--animation-' + settings[ animation_type ] + ] ); + } + #> + + <# } #> +
+
+ getSettingsForDisplay(); + + $has_background_overlay = in_array($settings['background_overlay_background'], ['classic', 'gradient'], true) || + in_array($settings['background_overlay_hover_background'], ['classic', 'gradient'], true); + + if ($settings['tabs']) { + $this->addRenderAttribute('tabs', 'class', [ + 'elementor-nav-tabs', + 'elementor-nav--main', + 'elementor-nav--layout-' . $settings['tabs_layout'], + ]); + + if ('none' !== $settings['pointer']) { + $animation_type = call_user_func('CE\NavTrait::getPointerAnimationType', $settings['pointer']); + + $this->addRenderAttribute('tabs', 'class', [ + 'e--pointer-' . $settings['pointer'], + 'e--animation-' . $settings[$animation_type], + ]); + } + } + ?> + <getHtmlTag()) ?> getRenderAttributeString('_wrapper') ?>> + +
+ +
+ + + +
+ + +
+ printShapeDivider('top'); + empty($settings['shape_divider_bottom']) or $this->printShapeDivider('bottom'); + ?> +
+ + + + +
+ +
+
+ getHtmlTag()) ?>> + getData('isInner') ? 'inner' : 'top'; + + $this->addRenderAttribute('_wrapper', 'class', [ + 'elementor-section', + 'elementor-' . $section_type . '-section', + ]); + } + + /** + * Get default child type. + * + * Retrieve the section child type based on element data. + * + * @since 1.0.0 + * @access protected + * + * @param array $element_data Element ID. + * + * @return ElementBase Section default child type. + */ + protected function _getDefaultChildType(array $element_data) + { + return Plugin::$instance->elements_manager->getElementTypes('column'); + } + + /** + * Get HTML tag. + * + * Retrieve the section element HTML tag. + * + * @since 1.5.3 + * @access private + * + * @return string Section HTML tag. + */ + private function getHtmlTag() + { + $html_tag = $this->getSettings('html_tag'); + + if (empty($html_tag)) { + $html_tag = 'section'; + } + + return $html_tag; + } + + /** + * Print section shape divider. + * + * Used to generate the shape dividers HTML. + * + * @since 1.3.0 + * @access private + * @codingStandardsIgnoreStart Generic.Files.LineLength + * + * @param string $side Shape divider side, used to set the shape key. + */ + private function printShapeDivider($side) + { + $settings = $this->getActiveSettings(); + $base_setting_key = "shape_divider_$side"; + $negative = !empty($settings[$base_setting_key . '_negative']); + ?> +
+ +
+ '/^.*(?:youtu\.be\/|youtube(?:-nocookie)?\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^\?&\"\'>]+)/', + 'vimeo' => '/^.*vimeo\.com\/(?:[a-z]*\/)*([‌​0-9]{6,11})[?]?.*/', + 'dailymotion' => '/^.*dailymotion.com\/(?:video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/', + ]; + + /** + * Embed patterns. + * + * Holds a list of supported providers with their embed patters. + * + * @since 1.5.0 + * @access private + * @static + * + * @var array Embed patters. + */ + private static $embed_patterns = [ + 'youtube' => 'https://www.youtube{NO_COOKIE}.com/embed/{VIDEO_ID}?feature=oembed', + 'vimeo' => 'https://player.vimeo.com/video/{VIDEO_ID}#t={TIME}', + 'dailymotion' => 'https://dailymotion.com/embed/video/{VIDEO_ID}', + ]; + + /** + * Get video properties. + * + * Retrieve the video properties for a given video URL. + * + * @since 1.5.0 + * @access public + * @static + * + * @param string $video_url Video URL. + * + * @return null|array The video properties, or null. + */ + public static function getVideoProperties($video_url) + { + foreach (self::$provider_match_masks as $provider => $match_mask) { + preg_match($match_mask, $video_url, $matches); + + if ($matches) { + return [ + 'provider' => $provider, + 'video_id' => $matches[1], + ]; + } + } + + return null; + } + + /** + * Get embed URL. + * + * Retrieve the embed URL for a given video. + * + * @since 1.5.0 + * @access public + * @static + * + * @param string $video_url Video URL. + * @param array $embed_url_params Optional. Embed parameters. Default is an + * empty array. + * @param array $options Optional. Embed options. Default is an + * empty array. + * + * @return null|array The video properties, or null. + */ + public static function getEmbedUrl($video_url, array $embed_url_params = [], array $options = []) + { + $video_properties = self::getVideoProperties($video_url); + + if (!$video_properties) { + return null; + } + + $embed_pattern = self::$embed_patterns[$video_properties['provider']]; + + $replacements = [ + '{VIDEO_ID}' => $video_properties['video_id'], + ]; + + if ('youtube' === $video_properties['provider']) { + $replacements['{NO_COOKIE}'] = !empty($options['privacy']) ? '-nocookie' : ''; + } elseif ('vimeo' === $video_properties['provider']) { + $time_text = ''; + + if (!empty($options['start'])) { + $time_text = date('H\hi\ms\s', $options['start']); + } + + $replacements['{TIME}'] = $time_text; + } + + $embed_pattern = str_replace(array_keys($replacements), $replacements, $embed_pattern); + + return add_query_arg($embed_url_params, $embed_pattern); + } + + /** + * Get embed HTML. + * + * Retrieve the final HTML of the embedded URL. + * + * @since 1.5.0 + * @access public + * @static + * + * @param string $video_url Video URL. + * @param array $embed_url_params Optional. Embed parameters. Default is an + * empty array. + * @param array $options Optional. Embed options. Default is an + * empty array. + * @param array $frame_attributes Optional. Frame attributes. Default is an + * empty array. + * + * @return string The embed HTML. + */ + public static function getEmbedHtml($video_url, array $embed_url_params = [], array $options = [], array $frame_attributes = []) + { + $default_frame_attributes = [ + 'class' => "elementor-video-\x69frame", + 'allowfullscreen', + ]; + + $video_embed_url = self::getEmbedUrl($video_url, $embed_url_params, $options); + if (!$video_embed_url) { + return null; + } + if (!$options['lazy_load']) { + $default_frame_attributes['src'] = $video_embed_url; + $default_frame_attributes['loading'] = 'lazy'; + } else { + $default_frame_attributes['data-lazy-load'] = $video_embed_url; + } + + $frame_attributes = array_merge($default_frame_attributes, $frame_attributes); + + $attributes_for_print = []; + + foreach ($frame_attributes as $attribute_key => $attribute_value) { + $attribute_value = esc_attr($attribute_value); + + if (is_numeric($attribute_key)) { + $attributes_for_print[] = $attribute_value; + } else { + $attributes_for_print[] = sprintf('%1$s="%2$s"', $attribute_key, $attribute_value); + } + } + + $attributes_for_print = implode(' ', $attributes_for_print); + + $frame_html = "<\x69frame $attributes_for_print>"; + + /** This filter is documented in wp-includes/class-oembed.php */ + return apply_filters('oembed_result', $frame_html, $video_url, $frame_attributes); + } +} diff --git a/modules/creativeelements/includes/fonts.php b/modules/creativeelements/includes/fonts.php new file mode 100644 index 00000000..ffac2edc --- /dev/null +++ b/modules/creativeelements/includes/fonts.php @@ -0,0 +1,1562 @@ + __('System'), + self::GOOGLE => __('Google'), + self::EARLYACCESS => __('Google Early Access'), + ]; + + /** + * Font groups. + * + * Filters the fonts groups used by Elementor. + * + * @since 1.9.4 + * + * @param array $font_groups Font groups. + */ + $font_groups = apply_filters('elementor/fonts/groups', $font_groups); + + self::$font_groups = $font_groups; + } + + return self::$font_groups; + } + + /** + * Get fonts. + * + * Retrieve the list of supported fonts. + * + * @since 1.0.0 + * @access public + * @static + * + * @return array Supported fonts. + */ + public static function getFonts() + { + if (null === self::$fonts) { + $additional_fonts = []; + + /** + * Additional fonts. + * + * Filters the fonts used by Elementor to add additional fonts. + * + * @since 1.9.4 + * + * @param array $additional_fonts Additional Elementor fonts. + */ + $additional_fonts = apply_filters('elementor/fonts/additional_fonts', $additional_fonts); + + self::$fonts = array_merge(self::getNativeFonts(), $additional_fonts); + } + + return self::$fonts; + } + + /** + * Get Elementor native fonts. + * + * Retrieve the list of supported fonts. + * + * @since 1.9.4 + * @access private + * @static + * + * @return array Supported fonts. + */ + private static function getNativeFonts() + { + return [ + // System fonts. + 'Arial' => self::SYSTEM, + 'Tahoma' => self::SYSTEM, + 'Verdana' => self::SYSTEM, + 'Helvetica' => self::SYSTEM, + 'Times New Roman' => self::SYSTEM, + 'Trebuchet MS' => self::SYSTEM, + 'Georgia' => self::SYSTEM, + + // Google Fonts (last update: 17/01/2022). + 'ABeeZee' => self::GOOGLE, + 'Abel' => self::GOOGLE, + 'Abhaya Libre' => self::GOOGLE, + 'Abril Fatface' => self::GOOGLE, + 'Aclonica' => self::GOOGLE, + 'Acme' => self::GOOGLE, + 'Actor' => self::GOOGLE, + 'Adamina' => self::GOOGLE, + 'Advent Pro' => self::GOOGLE, + 'Aguafina Script' => self::GOOGLE, + 'Akaya Kanadaka' => self::GOOGLE, + 'Akaya Telivigala' => self::GOOGLE, + 'Akronim' => self::GOOGLE, + 'Aladin' => self::GOOGLE, + 'Alata' => self::GOOGLE, + 'Alatsi' => self::GOOGLE, + 'Aldrich' => self::GOOGLE, + 'Alef' => self::GOOGLE, + 'Alef Hebrew' => self::EARLYACCESS, // Hack for Google Early Access. + 'Alegreya' => self::GOOGLE, + 'Alegreya SC' => self::GOOGLE, + 'Alegreya Sans' => self::GOOGLE, + 'Alegreya Sans SC' => self::GOOGLE, + 'Aleo' => self::GOOGLE, + 'Alex Brush' => self::GOOGLE, + 'Alfa Slab One' => self::GOOGLE, + 'Alice' => self::GOOGLE, + 'Alike' => self::GOOGLE, + 'Alike Angular' => self::GOOGLE, + 'Allan' => self::GOOGLE, + 'Allerta' => self::GOOGLE, + 'Allerta Stencil' => self::GOOGLE, + 'Allison' => self::GOOGLE, + 'Allura' => self::GOOGLE, + 'Almarai' => self::GOOGLE, + 'Almendra' => self::GOOGLE, + 'Almendra Display' => self::GOOGLE, + 'Almendra SC' => self::GOOGLE, + 'Alumni Sans' => self::GOOGLE, + 'Amarante' => self::GOOGLE, + 'Amaranth' => self::GOOGLE, + 'Amatic SC' => self::GOOGLE, + 'Amethysta' => self::GOOGLE, + 'Amiko' => self::GOOGLE, + 'Amiri' => self::GOOGLE, + 'Amita' => self::GOOGLE, + 'Anaheim' => self::GOOGLE, + 'Andada Pro' => self::GOOGLE, + 'Andika' => self::GOOGLE, + 'Andika New Basic' => self::GOOGLE, + 'Angkor' => self::GOOGLE, + 'Annie Use Your Telescope' => self::GOOGLE, + 'Anonymous Pro' => self::GOOGLE, + 'Antic' => self::GOOGLE, + 'Antic Didone' => self::GOOGLE, + 'Antic Slab' => self::GOOGLE, + 'Anton' => self::GOOGLE, + 'Antonio' => self::GOOGLE, + 'Arapey' => self::GOOGLE, + 'Arbutus' => self::GOOGLE, + 'Arbutus Slab' => self::GOOGLE, + 'Architects Daughter' => self::GOOGLE, + 'Archivo' => self::GOOGLE, + 'Archivo Black' => self::GOOGLE, + 'Archivo Narrow' => self::GOOGLE, + 'Are You Serious' => self::GOOGLE, + 'Aref Ruqaa' => self::GOOGLE, + 'Arima Madurai' => self::GOOGLE, + 'Arimo' => self::GOOGLE, + 'Arizonia' => self::GOOGLE, + 'Armata' => self::GOOGLE, + 'Arsenal' => self::GOOGLE, + 'Artifika' => self::GOOGLE, + 'Arvo' => self::GOOGLE, + 'Arya' => self::GOOGLE, + 'Asap' => self::GOOGLE, + 'Asap Condensed' => self::GOOGLE, + 'Asar' => self::GOOGLE, + 'Asset' => self::GOOGLE, + 'Assistant' => self::GOOGLE, + 'Astloch' => self::GOOGLE, + 'Asul' => self::GOOGLE, + 'Athiti' => self::GOOGLE, + 'Atkinson Hyperlegible' => self::GOOGLE, + 'Atma' => self::GOOGLE, + 'Atomic Age' => self::GOOGLE, + 'Aubrey' => self::GOOGLE, + 'Audiowide' => self::GOOGLE, + 'Autour One' => self::GOOGLE, + 'Average' => self::GOOGLE, + 'Average Sans' => self::GOOGLE, + 'Averia Gruesa Libre' => self::GOOGLE, + 'Averia Libre' => self::GOOGLE, + 'Averia Sans Libre' => self::GOOGLE, + 'Averia Serif Libre' => self::GOOGLE, + 'Azeret Mono' => self::GOOGLE, + 'B612' => self::GOOGLE, + 'B612 Mono' => self::GOOGLE, + 'Bad Script' => self::GOOGLE, + 'Bahiana' => self::GOOGLE, + 'Bahianita' => self::GOOGLE, + 'Bai Jamjuree' => self::GOOGLE, + 'Bakbak One' => self::GOOGLE, + 'Ballet' => self::GOOGLE, + 'Baloo 2' => self::GOOGLE, + 'Baloo Bhai 2' => self::GOOGLE, + 'Baloo Bhaijaan 2' => self::GOOGLE, + 'Baloo Bhaina 2' => self::GOOGLE, + 'Baloo Chettan 2' => self::GOOGLE, + 'Baloo Da 2' => self::GOOGLE, + 'Baloo Paaji 2' => self::GOOGLE, + 'Baloo Tamma 2' => self::GOOGLE, + 'Baloo Tammudu 2' => self::GOOGLE, + 'Baloo Thambi 2' => self::GOOGLE, + 'Balsamiq Sans' => self::GOOGLE, + 'Balthazar' => self::GOOGLE, + 'Bangers' => self::GOOGLE, + 'Barlow' => self::GOOGLE, + 'Barlow Condensed' => self::GOOGLE, + 'Barlow Semi Condensed' => self::GOOGLE, + 'Barriecito' => self::GOOGLE, + 'Barrio' => self::GOOGLE, + 'Basic' => self::GOOGLE, + 'Baskervville' => self::GOOGLE, + 'Battambang' => self::GOOGLE, + 'Baumans' => self::GOOGLE, + 'Bayon' => self::GOOGLE, + 'Be Vietnam Pro' => self::GOOGLE, + 'Bebas Neue' => self::GOOGLE, + 'Belgrano' => self::GOOGLE, + 'Bellefair' => self::GOOGLE, + 'Belleza' => self::GOOGLE, + 'Bellota' => self::GOOGLE, + 'Bellota Text' => self::GOOGLE, + 'BenchNine' => self::GOOGLE, + 'Benne' => self::GOOGLE, + 'Bentham' => self::GOOGLE, + 'Berkshire Swash' => self::GOOGLE, + 'Besley' => self::GOOGLE, + 'Beth Ellen' => self::GOOGLE, + 'Bevan' => self::GOOGLE, + 'Big Shoulders Display' => self::GOOGLE, + 'Big Shoulders Inline Display' => self::GOOGLE, + 'Big Shoulders Inline Text' => self::GOOGLE, + 'Big Shoulders Stencil Display' => self::GOOGLE, + 'Big Shoulders Stencil Text' => self::GOOGLE, + 'Big Shoulders Text' => self::GOOGLE, + 'Bigelow Rules' => self::GOOGLE, + 'Bigshot One' => self::GOOGLE, + 'Bilbo' => self::GOOGLE, + 'Bilbo Swash Caps' => self::GOOGLE, + 'BioRhyme' => self::GOOGLE, + 'BioRhyme Expanded' => self::GOOGLE, + 'Birthstone' => self::GOOGLE, + 'Birthstone Bounce' => self::GOOGLE, + 'Biryani' => self::GOOGLE, + 'Bitter' => self::GOOGLE, + 'Black And White Picture' => self::GOOGLE, + 'Black Han Sans' => self::GOOGLE, + 'Black Ops One' => self::GOOGLE, + 'Blinker' => self::GOOGLE, + 'Bodoni Moda' => self::GOOGLE, + 'Bokor' => self::GOOGLE, + 'Bona Nova' => self::GOOGLE, + 'Bonbon' => self::GOOGLE, + 'Bonheur Royale' => self::GOOGLE, + 'Boogaloo' => self::GOOGLE, + 'Bowlby One' => self::GOOGLE, + 'Bowlby One SC' => self::GOOGLE, + 'Brawler' => self::GOOGLE, + 'Bree Serif' => self::GOOGLE, + 'Brygada 1918' => self::GOOGLE, + 'Bubblegum Sans' => self::GOOGLE, + 'Bubbler One' => self::GOOGLE, + 'Buda' => self::GOOGLE, + 'Buenard' => self::GOOGLE, + 'Bungee' => self::GOOGLE, + 'Bungee Hairline' => self::GOOGLE, + 'Bungee Inline' => self::GOOGLE, + 'Bungee Outline' => self::GOOGLE, + 'Bungee Shade' => self::GOOGLE, + 'Butcherman' => self::GOOGLE, + 'Butterfly Kids' => self::GOOGLE, + 'Cabin' => self::GOOGLE, + 'Cabin Condensed' => self::GOOGLE, + 'Cabin Sketch' => self::GOOGLE, + 'Caesar Dressing' => self::GOOGLE, + 'Cagliostro' => self::GOOGLE, + 'Cairo' => self::GOOGLE, + 'Caladea' => self::GOOGLE, + 'Calistoga' => self::GOOGLE, + 'Calligraffitti' => self::GOOGLE, + 'Cambay' => self::GOOGLE, + 'Cambo' => self::GOOGLE, + 'Candal' => self::GOOGLE, + 'Cantarell' => self::GOOGLE, + 'Cantata One' => self::GOOGLE, + 'Cantora One' => self::GOOGLE, + 'Capriola' => self::GOOGLE, + 'Caramel' => self::GOOGLE, + 'Carattere' => self::GOOGLE, + 'Cardo' => self::GOOGLE, + 'Carme' => self::GOOGLE, + 'Carrois Gothic' => self::GOOGLE, + 'Carrois Gothic SC' => self::GOOGLE, + 'Carter One' => self::GOOGLE, + 'Castoro' => self::GOOGLE, + 'Catamaran' => self::GOOGLE, + 'Caudex' => self::GOOGLE, + 'Caveat' => self::GOOGLE, + 'Caveat Brush' => self::GOOGLE, + 'Cedarville Cursive' => self::GOOGLE, + 'Ceviche One' => self::GOOGLE, + 'Chakra Petch' => self::GOOGLE, + 'Changa' => self::GOOGLE, + 'Changa One' => self::GOOGLE, + 'Chango' => self::GOOGLE, + 'Charm' => self::GOOGLE, + 'Charmonman' => self::GOOGLE, + 'Chathura' => self::GOOGLE, + 'Chau Philomene One' => self::GOOGLE, + 'Chela One' => self::GOOGLE, + 'Chelsea Market' => self::GOOGLE, + 'Chenla' => self::GOOGLE, + 'Cherish' => self::GOOGLE, + 'Cherry Cream Soda' => self::GOOGLE, + 'Cherry Swash' => self::GOOGLE, + 'Chewy' => self::GOOGLE, + 'Chicle' => self::GOOGLE, + 'Chilanka' => self::GOOGLE, + 'Chivo' => self::GOOGLE, + 'Chonburi' => self::GOOGLE, + 'Cinzel' => self::GOOGLE, + 'Cinzel Decorative' => self::GOOGLE, + 'Clicker Script' => self::GOOGLE, + 'Coda' => self::GOOGLE, + 'Coda Caption' => self::GOOGLE, + 'Codystar' => self::GOOGLE, + 'Coiny' => self::GOOGLE, + 'Combo' => self::GOOGLE, + 'Comfortaa' => self::GOOGLE, + 'Comforter' => self::GOOGLE, + 'Comforter Brush' => self::GOOGLE, + 'Comic Neue' => self::GOOGLE, + 'Coming Soon' => self::GOOGLE, + 'Commissioner' => self::GOOGLE, + 'Concert One' => self::GOOGLE, + 'Condiment' => self::GOOGLE, + 'Content' => self::GOOGLE, + 'Contrail One' => self::GOOGLE, + 'Convergence' => self::GOOGLE, + 'Cookie' => self::GOOGLE, + 'Copse' => self::GOOGLE, + 'Corben' => self::GOOGLE, + 'Corinthia' => self::GOOGLE, + 'Cormorant' => self::GOOGLE, + 'Cormorant Garamond' => self::GOOGLE, + 'Cormorant Infant' => self::GOOGLE, + 'Cormorant SC' => self::GOOGLE, + 'Cormorant Unicase' => self::GOOGLE, + 'Cormorant Upright' => self::GOOGLE, + 'Courgette' => self::GOOGLE, + 'Courier Prime' => self::GOOGLE, + 'Cousine' => self::GOOGLE, + 'Coustard' => self::GOOGLE, + 'Covered By Your Grace' => self::GOOGLE, + 'Crafty Girls' => self::GOOGLE, + 'Creepster' => self::GOOGLE, + 'Crete Round' => self::GOOGLE, + 'Crimson Pro' => self::GOOGLE, + 'Croissant One' => self::GOOGLE, + 'Crushed' => self::GOOGLE, + 'Cuprum' => self::GOOGLE, + 'Cute Font' => self::GOOGLE, + 'Cutive' => self::GOOGLE, + 'Cutive Mono' => self::GOOGLE, + 'DM Mono' => self::GOOGLE, + 'DM Sans' => self::GOOGLE, + 'DM Serif Display' => self::GOOGLE, + 'DM Serif Text' => self::GOOGLE, + 'Damion' => self::GOOGLE, + 'Dancing Script' => self::GOOGLE, + 'Dangrek' => self::GOOGLE, + 'Darker Grotesque' => self::GOOGLE, + 'David Libre' => self::GOOGLE, + 'Dawning of a New Day' => self::GOOGLE, + 'Days One' => self::GOOGLE, + 'Dekko' => self::GOOGLE, + 'Dela Gothic One' => self::GOOGLE, + 'Delius' => self::GOOGLE, + 'Delius Swash Caps' => self::GOOGLE, + 'Delius Unicase' => self::GOOGLE, + 'Della Respira' => self::GOOGLE, + 'Denk One' => self::GOOGLE, + 'Devonshire' => self::GOOGLE, + 'Dhurjati' => self::GOOGLE, + 'Didact Gothic' => self::GOOGLE, + 'Diplomata' => self::GOOGLE, + 'Diplomata SC' => self::GOOGLE, + 'Do Hyeon' => self::GOOGLE, + 'Dokdo' => self::GOOGLE, + 'Domine' => self::GOOGLE, + 'Donegal One' => self::GOOGLE, + 'Dongle' => self::GOOGLE, + 'Doppio One' => self::GOOGLE, + 'Dorsa' => self::GOOGLE, + 'Dosis' => self::GOOGLE, + 'DotGothic16' => self::GOOGLE, + 'Dr Sugiyama' => self::GOOGLE, + 'Droid Arabic Kufi' => self::EARLYACCESS, // Hack for Google Early Access. + 'Droid Arabic Naskh' => self::EARLYACCESS, // Hack for Google Early Access. + 'Duru Sans' => self::GOOGLE, + 'Dynalight' => self::GOOGLE, + 'EB Garamond' => self::GOOGLE, + 'Eagle Lake' => self::GOOGLE, + 'East Sea Dokdo' => self::GOOGLE, + 'Eater' => self::GOOGLE, + 'Economica' => self::GOOGLE, + 'Eczar' => self::GOOGLE, + 'El Messiri' => self::GOOGLE, + 'Electrolize' => self::GOOGLE, + 'Elsie' => self::GOOGLE, + 'Elsie Swash Caps' => self::GOOGLE, + 'Emblema One' => self::GOOGLE, + 'Emilys Candy' => self::GOOGLE, + 'Encode Sans' => self::GOOGLE, + 'Encode Sans Condensed' => self::GOOGLE, + 'Encode Sans Expanded' => self::GOOGLE, + 'Encode Sans SC' => self::GOOGLE, + 'Encode Sans Semi Condensed' => self::GOOGLE, + 'Encode Sans Semi Expanded' => self::GOOGLE, + 'Engagement' => self::GOOGLE, + 'Englebert' => self::GOOGLE, + 'Enriqueta' => self::GOOGLE, + 'Ephesis' => self::GOOGLE, + 'Epilogue' => self::GOOGLE, + 'Erica One' => self::GOOGLE, + 'Esteban' => self::GOOGLE, + 'Estonia' => self::GOOGLE, + 'Euphoria Script' => self::GOOGLE, + 'Ewert' => self::GOOGLE, + 'Exo' => self::GOOGLE, + 'Exo 2' => self::GOOGLE, + 'Expletus Sans' => self::GOOGLE, + 'Explora' => self::GOOGLE, + 'Fahkwang' => self::GOOGLE, + 'Fanwood Text' => self::GOOGLE, + 'Farro' => self::GOOGLE, + 'Farsan' => self::GOOGLE, + 'Fascinate' => self::GOOGLE, + 'Fascinate Inline' => self::GOOGLE, + 'Faster One' => self::GOOGLE, + 'Fasthand' => self::GOOGLE, + 'Fauna One' => self::GOOGLE, + 'Faustina' => self::GOOGLE, + 'Federant' => self::GOOGLE, + 'Federo' => self::GOOGLE, + 'Felipa' => self::GOOGLE, + 'Fenix' => self::GOOGLE, + 'Festive' => self::GOOGLE, + 'Finger Paint' => self::GOOGLE, + 'Fira Code' => self::GOOGLE, + 'Fira Mono' => self::GOOGLE, + 'Fira Sans' => self::GOOGLE, + 'Fira Sans Condensed' => self::GOOGLE, + 'Fira Sans Extra Condensed' => self::GOOGLE, + 'Fjalla One' => self::GOOGLE, + 'Fjord One' => self::GOOGLE, + 'Flamenco' => self::GOOGLE, + 'Flavors' => self::GOOGLE, + 'Fleur De Leah' => self::GOOGLE, + 'Flow Block' => self::GOOGLE, + 'Flow Circular' => self::GOOGLE, + 'Flow Rounded' => self::GOOGLE, + 'Fondamento' => self::GOOGLE, + 'Fontdiner Swanky' => self::GOOGLE, + 'Forum' => self::GOOGLE, + 'Francois One' => self::GOOGLE, + 'Frank Ruhl Libre' => self::GOOGLE, + 'Fraunces' => self::GOOGLE, + 'Freckle Face' => self::GOOGLE, + 'Fredericka the Great' => self::GOOGLE, + 'Fredoka One' => self::GOOGLE, + 'Freehand' => self::GOOGLE, + 'Fresca' => self::GOOGLE, + 'Frijole' => self::GOOGLE, + 'Fruktur' => self::GOOGLE, + 'Fugaz One' => self::GOOGLE, + 'Fuggles' => self::GOOGLE, + 'Fuzzy Bubbles' => self::GOOGLE, + 'GFS Didot' => self::GOOGLE, + 'GFS Neohellenic' => self::GOOGLE, + 'Gabriela' => self::GOOGLE, + 'Gaegu' => self::GOOGLE, + 'Gafata' => self::GOOGLE, + 'Galada' => self::GOOGLE, + 'Galdeano' => self::GOOGLE, + 'Galindo' => self::GOOGLE, + 'Gamja Flower' => self::GOOGLE, + 'Gayathri' => self::GOOGLE, + 'Gelasio' => self::GOOGLE, + 'Gemunu Libre' => self::GOOGLE, + 'Genos' => self::GOOGLE, + 'Gentium Basic' => self::GOOGLE, + 'Gentium Book Basic' => self::GOOGLE, + 'Geo' => self::GOOGLE, + 'Georama' => self::GOOGLE, + 'Geostar' => self::GOOGLE, + 'Geostar Fill' => self::GOOGLE, + 'Germania One' => self::GOOGLE, + 'Gideon Roman' => self::GOOGLE, + 'Gidugu' => self::GOOGLE, + 'Gilda Display' => self::GOOGLE, + 'Girassol' => self::GOOGLE, + 'Give You Glory' => self::GOOGLE, + 'Glass Antiqua' => self::GOOGLE, + 'Glegoo' => self::GOOGLE, + 'Gloria Hallelujah' => self::GOOGLE, + 'Glory' => self::GOOGLE, + 'Gluten' => self::GOOGLE, + 'Goblin One' => self::GOOGLE, + 'Gochi Hand' => self::GOOGLE, + 'Goldman' => self::GOOGLE, + 'Gorditas' => self::GOOGLE, + 'Gothic A1' => self::GOOGLE, + 'Gotu' => self::GOOGLE, + 'Goudy Bookletter 1911' => self::GOOGLE, + 'Gowun Batang' => self::GOOGLE, + 'Gowun Dodum' => self::GOOGLE, + 'Graduate' => self::GOOGLE, + 'Grand Hotel' => self::GOOGLE, + 'Grandstander' => self::GOOGLE, + 'Gravitas One' => self::GOOGLE, + 'Great Vibes' => self::GOOGLE, + 'Grechen Fuemen' => self::GOOGLE, + 'Grenze' => self::GOOGLE, + 'Grenze Gotisch' => self::GOOGLE, + 'Grey Qo' => self::GOOGLE, + 'Griffy' => self::GOOGLE, + 'Gruppo' => self::GOOGLE, + 'Gudea' => self::GOOGLE, + 'Gugi' => self::GOOGLE, + 'Gupter' => self::GOOGLE, + 'Gurajada' => self::GOOGLE, + 'Gwendolyn' => self::GOOGLE, + 'Habibi' => self::GOOGLE, + 'Hachi Maru Pop' => self::GOOGLE, + 'Hahmlet' => self::GOOGLE, + 'Halant' => self::GOOGLE, + 'Hammersmith One' => self::GOOGLE, + 'Hanalei' => self::GOOGLE, + 'Hanalei Fill' => self::GOOGLE, + 'Handlee' => self::GOOGLE, + 'Hanuman' => self::GOOGLE, + 'Happy Monkey' => self::GOOGLE, + 'Harmattan' => self::GOOGLE, + 'Headland One' => self::GOOGLE, + 'Heebo' => self::GOOGLE, + 'Henny Penny' => self::GOOGLE, + 'Hepta Slab' => self::GOOGLE, + 'Herr Von Muellerhoff' => self::GOOGLE, + 'Hi Melody' => self::GOOGLE, + 'Hina Mincho' => self::GOOGLE, + 'Hind' => self::GOOGLE, + 'Hind Guntur' => self::GOOGLE, + 'Hind Madurai' => self::GOOGLE, + 'Hind Siliguri' => self::GOOGLE, + 'Hind Vadodara' => self::GOOGLE, + 'Holtwood One SC' => self::GOOGLE, + 'Homemade Apple' => self::GOOGLE, + 'Homenaje' => self::GOOGLE, + 'Hurricane' => self::GOOGLE, + 'IBM Plex Mono' => self::GOOGLE, + 'IBM Plex Sans' => self::GOOGLE, + 'IBM Plex Sans Arabic' => self::GOOGLE, + 'IBM Plex Sans Condensed' => self::GOOGLE, + 'IBM Plex Sans Devanagari' => self::GOOGLE, + 'IBM Plex Sans Hebrew' => self::GOOGLE, + 'IBM Plex Sans KR' => self::GOOGLE, + 'IBM Plex Sans Thai' => self::GOOGLE, + 'IBM Plex Sans Thai Looped' => self::GOOGLE, + 'IBM Plex Serif' => self::GOOGLE, + 'IM Fell DW Pica' => self::GOOGLE, + 'IM Fell DW Pica SC' => self::GOOGLE, + 'IM Fell Double Pica' => self::GOOGLE, + 'IM Fell Double Pica SC' => self::GOOGLE, + 'IM Fell English' => self::GOOGLE, + 'IM Fell English SC' => self::GOOGLE, + 'IM Fell French Canon' => self::GOOGLE, + 'IM Fell French Canon SC' => self::GOOGLE, + 'IM Fell Great Primer' => self::GOOGLE, + 'IM Fell Great Primer SC' => self::GOOGLE, + 'Ibarra Real Nova' => self::GOOGLE, + 'Iceberg' => self::GOOGLE, + 'Iceland' => self::GOOGLE, + 'Imbue' => self::GOOGLE, + 'Imperial Script' => self::GOOGLE, + 'Imprima' => self::GOOGLE, + 'Inconsolata' => self::GOOGLE, + 'Inder' => self::GOOGLE, + 'Indie Flower' => self::GOOGLE, + 'Inika' => self::GOOGLE, + 'Inknut Antiqua' => self::GOOGLE, + 'Inria Sans' => self::GOOGLE, + 'Inria Serif' => self::GOOGLE, + 'Inspiration' => self::GOOGLE, + 'Inter' => self::GOOGLE, + 'Irish Grover' => self::GOOGLE, + 'Island Moments' => self::GOOGLE, + 'Istok Web' => self::GOOGLE, + 'Italiana' => self::GOOGLE, + 'Italianno' => self::GOOGLE, + 'Itim' => self::GOOGLE, + 'Jacques Francois' => self::GOOGLE, + 'Jacques Francois Shadow' => self::GOOGLE, + 'Jaldi' => self::GOOGLE, + 'JetBrains Mono' => self::GOOGLE, + 'Jim Nightshade' => self::GOOGLE, + 'Jockey One' => self::GOOGLE, + 'Jolly Lodger' => self::GOOGLE, + 'Jomhuria' => self::GOOGLE, + 'Jomolhari' => self::GOOGLE, + 'Josefin Sans' => self::GOOGLE, + 'Josefin Slab' => self::GOOGLE, + 'Jost' => self::GOOGLE, + 'Joti One' => self::GOOGLE, + 'Jua' => self::GOOGLE, + 'Judson' => self::GOOGLE, + 'Julee' => self::GOOGLE, + 'Julius Sans One' => self::GOOGLE, + 'Junge' => self::GOOGLE, + 'Jura' => self::GOOGLE, + 'Just Another Hand' => self::GOOGLE, + 'Just Me Again Down Here' => self::GOOGLE, + 'K2D' => self::GOOGLE, + 'Kadwa' => self::GOOGLE, + 'Kaisei Decol' => self::GOOGLE, + 'Kaisei HarunoUmi' => self::GOOGLE, + 'Kaisei Opti' => self::GOOGLE, + 'Kaisei Tokumin' => self::GOOGLE, + 'Kalam' => self::GOOGLE, + 'Kameron' => self::GOOGLE, + 'Kanit' => self::GOOGLE, + 'Kantumruy' => self::GOOGLE, + 'Karantina' => self::GOOGLE, + 'Karla' => self::GOOGLE, + 'Karma' => self::GOOGLE, + 'Katibeh' => self::GOOGLE, + 'Kaushan Script' => self::GOOGLE, + 'Kavivanar' => self::GOOGLE, + 'Kavoon' => self::GOOGLE, + 'Kdam Thmor' => self::GOOGLE, + 'Keania One' => self::GOOGLE, + 'Kelly Slab' => self::GOOGLE, + 'Kenia' => self::GOOGLE, + 'Khand' => self::GOOGLE, + 'Khmer' => self::GOOGLE, + 'Khula' => self::GOOGLE, + 'Kings' => self::GOOGLE, + 'Kirang Haerang' => self::GOOGLE, + 'Kite One' => self::GOOGLE, + 'Kiwi Maru' => self::GOOGLE, + 'Klee One' => self::GOOGLE, + 'Knewave' => self::GOOGLE, + 'KoHo' => self::GOOGLE, + 'Kodchasan' => self::GOOGLE, + 'Koh Santepheap' => self::GOOGLE, + 'Kolker Brush' => self::GOOGLE, + 'Kosugi' => self::GOOGLE, + 'Kosugi Maru' => self::GOOGLE, + 'Kotta One' => self::GOOGLE, + 'Koulen' => self::GOOGLE, + 'Kranky' => self::GOOGLE, + 'Kreon' => self::GOOGLE, + 'Kristi' => self::GOOGLE, + 'Krona One' => self::GOOGLE, + 'Krub' => self::GOOGLE, + 'Kufam' => self::GOOGLE, + 'Kulim Park' => self::GOOGLE, + 'Kumar One' => self::GOOGLE, + 'Kumar One Outline' => self::GOOGLE, + 'Kumbh Sans' => self::GOOGLE, + 'Kurale' => self::GOOGLE, + 'La Belle Aurore' => self::GOOGLE, + 'Lacquer' => self::GOOGLE, + 'Laila' => self::GOOGLE, + 'Lakki Reddy' => self::GOOGLE, + 'Lalezar' => self::GOOGLE, + 'Lancelot' => self::GOOGLE, + 'Langar' => self::GOOGLE, + 'Lateef' => self::GOOGLE, + 'Lato' => self::GOOGLE, + 'League Script' => self::GOOGLE, + 'Leckerli One' => self::GOOGLE, + 'Ledger' => self::GOOGLE, + 'Lekton' => self::GOOGLE, + 'Lemon' => self::GOOGLE, + 'Lemonada' => self::GOOGLE, + 'Lexend' => self::GOOGLE, + 'Lexend Deca' => self::GOOGLE, + 'Lexend Exa' => self::GOOGLE, + 'Lexend Giga' => self::GOOGLE, + 'Lexend Mega' => self::GOOGLE, + 'Lexend Peta' => self::GOOGLE, + 'Lexend Tera' => self::GOOGLE, + 'Lexend Zetta' => self::GOOGLE, + 'Libre Barcode 128' => self::GOOGLE, + 'Libre Barcode 128 Text' => self::GOOGLE, + 'Libre Barcode 39' => self::GOOGLE, + 'Libre Barcode 39 Extended' => self::GOOGLE, + 'Libre Barcode 39 Extended Text' => self::GOOGLE, + 'Libre Barcode 39 Text' => self::GOOGLE, + 'Libre Barcode EAN13 Text' => self::GOOGLE, + 'Libre Baskerville' => self::GOOGLE, + 'Libre Caslon Display' => self::GOOGLE, + 'Libre Caslon Text' => self::GOOGLE, + 'Libre Franklin' => self::GOOGLE, + 'Licorice' => self::GOOGLE, + 'Life Savers' => self::GOOGLE, + 'Lilita One' => self::GOOGLE, + 'Lily Script One' => self::GOOGLE, + 'Limelight' => self::GOOGLE, + 'Linden Hill' => self::GOOGLE, + 'Literata' => self::GOOGLE, + 'Liu Jian Mao Cao' => self::GOOGLE, + 'Livvic' => self::GOOGLE, + 'Lobster' => self::GOOGLE, + 'Lobster Two' => self::GOOGLE, + 'Londrina Outline' => self::GOOGLE, + 'Londrina Shadow' => self::GOOGLE, + 'Londrina Sketch' => self::GOOGLE, + 'Londrina Solid' => self::GOOGLE, + 'Long Cang' => self::GOOGLE, + 'Lora' => self::GOOGLE, + 'Love Light' => self::GOOGLE, + 'Love Ya Like A Sister' => self::GOOGLE, + 'Loved by the King' => self::GOOGLE, + 'Lovers Quarrel' => self::GOOGLE, + 'Luckiest Guy' => self::GOOGLE, + 'Lusitana' => self::GOOGLE, + 'Lustria' => self::GOOGLE, + 'Luxurious Roman' => self::GOOGLE, + 'Luxurious Script' => self::GOOGLE, + 'M PLUS 1' => self::GOOGLE, + 'M PLUS 1 Code' => self::GOOGLE, + 'M PLUS 1p' => self::GOOGLE, + 'M PLUS 2' => self::GOOGLE, + 'M PLUS Code Latin' => self::GOOGLE, + 'M PLUS Rounded 1c' => self::GOOGLE, + 'Ma Shan Zheng' => self::GOOGLE, + 'Macondo' => self::GOOGLE, + 'Macondo Swash Caps' => self::GOOGLE, + 'Mada' => self::GOOGLE, + 'Magra' => self::GOOGLE, + 'Maiden Orange' => self::GOOGLE, + 'Maitree' => self::GOOGLE, + 'Major Mono Display' => self::GOOGLE, + 'Mako' => self::GOOGLE, + 'Mali' => self::GOOGLE, + 'Mallanna' => self::GOOGLE, + 'Mandali' => self::GOOGLE, + 'Manjari' => self::GOOGLE, + 'Manrope' => self::GOOGLE, + 'Mansalva' => self::GOOGLE, + 'Manuale' => self::GOOGLE, + 'Marcellus' => self::GOOGLE, + 'Marcellus SC' => self::GOOGLE, + 'Marck Script' => self::GOOGLE, + 'Margarine' => self::GOOGLE, + 'Markazi Text' => self::GOOGLE, + 'Marko One' => self::GOOGLE, + 'Marmelad' => self::GOOGLE, + 'Martel' => self::GOOGLE, + 'Martel Sans' => self::GOOGLE, + 'Marvel' => self::GOOGLE, + 'Mate' => self::GOOGLE, + 'Mate SC' => self::GOOGLE, + 'Maven Pro' => self::GOOGLE, + 'McLaren' => self::GOOGLE, + 'Mea Culpa' => self::GOOGLE, + 'Meddon' => self::GOOGLE, + 'MedievalSharp' => self::GOOGLE, + 'Medula One' => self::GOOGLE, + 'Meera Inimai' => self::GOOGLE, + 'Megrim' => self::GOOGLE, + 'Meie Script' => self::GOOGLE, + 'Meow Script' => self::GOOGLE, + 'Merienda' => self::GOOGLE, + 'Merienda One' => self::GOOGLE, + 'Merriweather' => self::GOOGLE, + 'Merriweather Sans' => self::GOOGLE, + 'Metal' => self::GOOGLE, + 'Metal Mania' => self::GOOGLE, + 'Metamorphous' => self::GOOGLE, + 'Metrophobic' => self::GOOGLE, + 'Michroma' => self::GOOGLE, + 'Milonga' => self::GOOGLE, + 'Miltonian' => self::GOOGLE, + 'Miltonian Tattoo' => self::GOOGLE, + 'Mina' => self::GOOGLE, + 'Miniver' => self::GOOGLE, + 'Miriam Libre' => self::GOOGLE, + 'Mirza' => self::GOOGLE, + 'Miss Fajardose' => self::GOOGLE, + 'Mitr' => self::GOOGLE, + 'Mochiy Pop One' => self::GOOGLE, + 'Mochiy Pop P One' => self::GOOGLE, + 'Modak' => self::GOOGLE, + 'Modern Antiqua' => self::GOOGLE, + 'Mogra' => self::GOOGLE, + 'Mohave' => self::GOOGLE, + 'Molengo' => self::GOOGLE, + 'Molle' => self::GOOGLE, + 'Monda' => self::GOOGLE, + 'Monofett' => self::GOOGLE, + 'Monoton' => self::GOOGLE, + 'Monsieur La Doulaise' => self::GOOGLE, + 'Montaga' => self::GOOGLE, + 'Montagu Slab' => self::GOOGLE, + 'MonteCarlo' => self::GOOGLE, + 'Montez' => self::GOOGLE, + 'Montserrat' => self::GOOGLE, + 'Montserrat Alternates' => self::GOOGLE, + 'Montserrat Subrayada' => self::GOOGLE, + 'Moo Lah Lah' => self::GOOGLE, + 'Moon Dance' => self::GOOGLE, + 'Moul' => self::GOOGLE, + 'Moulpali' => self::GOOGLE, + 'Mountains of Christmas' => self::GOOGLE, + 'Mouse Memoirs' => self::GOOGLE, + 'Mr Bedfort' => self::GOOGLE, + 'Mr Dafoe' => self::GOOGLE, + 'Mr De Haviland' => self::GOOGLE, + 'Mrs Saint Delafield' => self::GOOGLE, + 'Mrs Sheppards' => self::GOOGLE, + 'Mukta' => self::GOOGLE, + 'Mukta Mahee' => self::GOOGLE, + 'Mukta Malar' => self::GOOGLE, + 'Mukta Vaani' => self::GOOGLE, + 'Mulish' => self::GOOGLE, + 'Murecho' => self::GOOGLE, + 'MuseoModerno' => self::GOOGLE, + 'Mystery Quest' => self::GOOGLE, + 'NTR' => self::GOOGLE, + 'Nanum Brush Script' => self::GOOGLE, + 'Nanum Gothic' => self::GOOGLE, + 'Nanum Gothic Coding' => self::GOOGLE, + 'Nanum Myeongjo' => self::GOOGLE, + 'Nanum Pen Script' => self::GOOGLE, + 'Neonderthaw' => self::GOOGLE, + 'Nerko One' => self::GOOGLE, + 'Neucha' => self::GOOGLE, + 'Neuton' => self::GOOGLE, + 'New Rocker' => self::GOOGLE, + 'New Tegomin' => self::GOOGLE, + 'News Cycle' => self::GOOGLE, + 'Newsreader' => self::GOOGLE, + 'Niconne' => self::GOOGLE, + 'Niramit' => self::GOOGLE, + 'Nixie One' => self::GOOGLE, + 'Nobile' => self::GOOGLE, + 'Nokora' => self::GOOGLE, + 'Norican' => self::GOOGLE, + 'Nosifer' => self::GOOGLE, + 'Notable' => self::GOOGLE, + 'Nothing You Could Do' => self::GOOGLE, + 'Noticia Text' => self::GOOGLE, + 'Noto Kufi Arabic' => self::EARLYACCESS, // Hack for Google Early Access. + 'Noto Music' => self::GOOGLE, + 'Noto Naskh Arabic' => self::EARLYACCESS, // Hack for Google Early Access. + 'Noto Nastaliq Urdu' => self::GOOGLE, + 'Noto Rashi Hebrew' => self::GOOGLE, + 'Noto Sans' => self::GOOGLE, + 'Noto Sans Adlam' => self::GOOGLE, + 'Noto Sans Adlam Unjoined' => self::GOOGLE, + 'Noto Sans Anatolian Hieroglyphs' => self::GOOGLE, + 'Noto Sans Arabic' => self::GOOGLE, + 'Noto Sans Armenian' => self::GOOGLE, + 'Noto Sans Avestan' => self::GOOGLE, + 'Noto Sans Balinese' => self::GOOGLE, + 'Noto Sans Bamum' => self::GOOGLE, + 'Noto Sans Bassa Vah' => self::GOOGLE, + 'Noto Sans Batak' => self::GOOGLE, + 'Noto Sans Bengali' => self::GOOGLE, + 'Noto Sans Bhaiksuki' => self::GOOGLE, + 'Noto Sans Brahmi' => self::GOOGLE, + 'Noto Sans Buginese' => self::GOOGLE, + 'Noto Sans Buhid' => self::GOOGLE, + 'Noto Sans Canadian Aboriginal' => self::GOOGLE, + 'Noto Sans Carian' => self::GOOGLE, + 'Noto Sans Caucasian Albanian' => self::GOOGLE, + 'Noto Sans Chakma' => self::GOOGLE, + 'Noto Sans Cham' => self::GOOGLE, + 'Noto Sans Cherokee' => self::GOOGLE, + 'Noto Sans Coptic' => self::GOOGLE, + 'Noto Sans Cuneiform' => self::GOOGLE, + 'Noto Sans Cypriot' => self::GOOGLE, + 'Noto Sans Deseret' => self::GOOGLE, + 'Noto Sans Devanagari' => self::GOOGLE, + 'Noto Sans Display' => self::GOOGLE, + 'Noto Sans Duployan' => self::GOOGLE, + 'Noto Sans Egyptian Hieroglyphs' => self::GOOGLE, + 'Noto Sans Elbasan' => self::GOOGLE, + 'Noto Sans Elymaic' => self::GOOGLE, + 'Noto Sans Georgian' => self::GOOGLE, + 'Noto Sans Glagolitic' => self::GOOGLE, + 'Noto Sans Gothic' => self::GOOGLE, + 'Noto Sans Grantha' => self::GOOGLE, + 'Noto Sans Gujarati' => self::GOOGLE, + 'Noto Sans Gunjala Gondi' => self::GOOGLE, + 'Noto Sans Gurmukhi' => self::GOOGLE, + 'Noto Sans HK' => self::GOOGLE, + 'Noto Sans Hanifi Rohingya' => self::GOOGLE, + 'Noto Sans Hanunoo' => self::GOOGLE, + 'Noto Sans Hatran' => self::GOOGLE, + 'Noto Sans Hebrew' => self::EARLYACCESS, // Hack for Google Early Access. + 'Noto Sans Imperial Aramaic' => self::GOOGLE, + 'Noto Sans Indic Siyaq Numbers' => self::GOOGLE, + 'Noto Sans Inscriptional Pahlavi' => self::GOOGLE, + 'Noto Sans Inscriptional Parthian' => self::GOOGLE, + 'Noto Sans JP' => self::GOOGLE, + 'Noto Sans Javanese' => self::GOOGLE, + 'Noto Sans KR' => self::GOOGLE, + 'Noto Sans Kaithi' => self::GOOGLE, + 'Noto Sans Kannada' => self::GOOGLE, + 'Noto Sans Kayah Li' => self::GOOGLE, + 'Noto Sans Kharoshthi' => self::GOOGLE, + 'Noto Sans Khmer' => self::GOOGLE, + 'Noto Sans Khojki' => self::GOOGLE, + 'Noto Sans Khudawadi' => self::GOOGLE, + 'Noto Sans Lao' => self::GOOGLE, + 'Noto Sans Lepcha' => self::GOOGLE, + 'Noto Sans Limbu' => self::GOOGLE, + 'Noto Sans Linear A' => self::GOOGLE, + 'Noto Sans Linear B' => self::GOOGLE, + 'Noto Sans Lisu' => self::GOOGLE, + 'Noto Sans Lycian' => self::GOOGLE, + 'Noto Sans Lydian' => self::GOOGLE, + 'Noto Sans Mahajani' => self::GOOGLE, + 'Noto Sans Malayalam' => self::GOOGLE, + 'Noto Sans Mandaic' => self::GOOGLE, + 'Noto Sans Manichaean' => self::GOOGLE, + 'Noto Sans Marchen' => self::GOOGLE, + 'Noto Sans Masaram Gondi' => self::GOOGLE, + 'Noto Sans Math' => self::GOOGLE, + 'Noto Sans Mayan Numerals' => self::GOOGLE, + 'Noto Sans Medefaidrin' => self::GOOGLE, + 'Noto Sans Meetei Mayek' => self::GOOGLE, + 'Noto Sans Meroitic' => self::GOOGLE, + 'Noto Sans Miao' => self::GOOGLE, + 'Noto Sans Modi' => self::GOOGLE, + 'Noto Sans Mongolian' => self::GOOGLE, + 'Noto Sans Mono' => self::GOOGLE, + 'Noto Sans Mro' => self::GOOGLE, + 'Noto Sans Multani' => self::GOOGLE, + 'Noto Sans Myanmar' => self::GOOGLE, + 'Noto Sans N Ko' => self::GOOGLE, + 'Noto Sans Nabataean' => self::GOOGLE, + 'Noto Sans New Tai Lue' => self::GOOGLE, + 'Noto Sans Newa' => self::GOOGLE, + 'Noto Sans Nushu' => self::GOOGLE, + 'Noto Sans Ogham' => self::GOOGLE, + 'Noto Sans Ol Chiki' => self::GOOGLE, + 'Noto Sans Old Hungarian' => self::GOOGLE, + 'Noto Sans Old Italic' => self::GOOGLE, + 'Noto Sans Old North Arabian' => self::GOOGLE, + 'Noto Sans Old Permic' => self::GOOGLE, + 'Noto Sans Old Persian' => self::GOOGLE, + 'Noto Sans Old Sogdian' => self::GOOGLE, + 'Noto Sans Old South Arabian' => self::GOOGLE, + 'Noto Sans Old Turkic' => self::GOOGLE, + 'Noto Sans Oriya' => self::GOOGLE, + 'Noto Sans Osage' => self::GOOGLE, + 'Noto Sans Osmanya' => self::GOOGLE, + 'Noto Sans Pahawh Hmong' => self::GOOGLE, + 'Noto Sans Palmyrene' => self::GOOGLE, + 'Noto Sans Pau Cin Hau' => self::GOOGLE, + 'Noto Sans Phags Pa' => self::GOOGLE, + 'Noto Sans Phoenician' => self::GOOGLE, + 'Noto Sans Psalter Pahlavi' => self::GOOGLE, + 'Noto Sans Rejang' => self::GOOGLE, + 'Noto Sans Runic' => self::GOOGLE, + 'Noto Sans SC' => self::GOOGLE, + 'Noto Sans Samaritan' => self::GOOGLE, + 'Noto Sans Saurashtra' => self::GOOGLE, + 'Noto Sans Sharada' => self::GOOGLE, + 'Noto Sans Shavian' => self::GOOGLE, + 'Noto Sans Siddham' => self::GOOGLE, + 'Noto Sans Sinhala' => self::GOOGLE, + 'Noto Sans Sogdian' => self::GOOGLE, + 'Noto Sans Sora Sompeng' => self::GOOGLE, + 'Noto Sans Soyombo' => self::GOOGLE, + 'Noto Sans Sundanese' => self::GOOGLE, + 'Noto Sans Syloti Nagri' => self::GOOGLE, + 'Noto Sans Symbols' => self::GOOGLE, + 'Noto Sans Symbols 2' => self::GOOGLE, + 'Noto Sans Syriac' => self::GOOGLE, + 'Noto Sans TC' => self::GOOGLE, + 'Noto Sans Tagalog' => self::GOOGLE, + 'Noto Sans Tagbanwa' => self::GOOGLE, + 'Noto Sans Tai Le' => self::GOOGLE, + 'Noto Sans Tai Tham' => self::GOOGLE, + 'Noto Sans Tai Viet' => self::GOOGLE, + 'Noto Sans Takri' => self::GOOGLE, + 'Noto Sans Tamil' => self::GOOGLE, + 'Noto Sans Tamil Supplement' => self::GOOGLE, + 'Noto Sans Telugu' => self::GOOGLE, + 'Noto Sans Thaana' => self::GOOGLE, + 'Noto Sans Thai' => self::GOOGLE, + 'Noto Sans Thai Looped' => self::GOOGLE, + 'Noto Sans Tifinagh' => self::GOOGLE, + 'Noto Sans Tirhuta' => self::GOOGLE, + 'Noto Sans Ugaritic' => self::GOOGLE, + 'Noto Sans Vai' => self::GOOGLE, + 'Noto Sans Wancho' => self::GOOGLE, + 'Noto Sans Warang Citi' => self::GOOGLE, + 'Noto Sans Yi' => self::GOOGLE, + 'Noto Sans Zanabazar Square' => self::GOOGLE, + 'Noto Serif' => self::GOOGLE, + 'Noto Serif Ahom' => self::GOOGLE, + 'Noto Serif Armenian' => self::GOOGLE, + 'Noto Serif Balinese' => self::GOOGLE, + 'Noto Serif Bengali' => self::GOOGLE, + 'Noto Serif Devanagari' => self::GOOGLE, + 'Noto Serif Display' => self::GOOGLE, + 'Noto Serif Dogra' => self::GOOGLE, + 'Noto Serif Ethiopic' => self::GOOGLE, + 'Noto Serif Georgian' => self::GOOGLE, + 'Noto Serif Grantha' => self::GOOGLE, + 'Noto Serif Gujarati' => self::GOOGLE, + 'Noto Serif Gurmukhi' => self::GOOGLE, + 'Noto Serif Hebrew' => self::GOOGLE, + 'Noto Serif JP' => self::GOOGLE, + 'Noto Serif KR' => self::GOOGLE, + 'Noto Serif Kannada' => self::GOOGLE, + 'Noto Serif Khmer' => self::GOOGLE, + 'Noto Serif Lao' => self::GOOGLE, + 'Noto Serif Malayalam' => self::GOOGLE, + 'Noto Serif Myanmar' => self::GOOGLE, + 'Noto Serif Nyiakeng Puachue Hmong' => self::GOOGLE, + 'Noto Serif SC' => self::GOOGLE, + 'Noto Serif Sinhala' => self::GOOGLE, + 'Noto Serif TC' => self::GOOGLE, + 'Noto Serif Tamil' => self::GOOGLE, + 'Noto Serif Tangut' => self::GOOGLE, + 'Noto Serif Telugu' => self::GOOGLE, + 'Noto Serif Thai' => self::GOOGLE, + 'Noto Serif Tibetan' => self::GOOGLE, + 'Noto Serif Yezidi' => self::GOOGLE, + 'Noto Traditional Nushu' => self::GOOGLE, + 'Nova Cut' => self::GOOGLE, + 'Nova Flat' => self::GOOGLE, + 'Nova Mono' => self::GOOGLE, + 'Nova Oval' => self::GOOGLE, + 'Nova Round' => self::GOOGLE, + 'Nova Script' => self::GOOGLE, + 'Nova Slim' => self::GOOGLE, + 'Nova Square' => self::GOOGLE, + 'Numans' => self::GOOGLE, + 'Nunito' => self::GOOGLE, + 'Nunito Sans' => self::GOOGLE, + 'Odibee Sans' => self::GOOGLE, + 'Odor Mean Chey' => self::GOOGLE, + 'Offside' => self::GOOGLE, + 'Oi' => self::GOOGLE, + 'Old Standard TT' => self::GOOGLE, + 'Oldenburg' => self::GOOGLE, + 'Ole' => self::GOOGLE, + 'Oleo Script' => self::GOOGLE, + 'Oleo Script Swash Caps' => self::GOOGLE, + 'Oooh Baby' => self::GOOGLE, + 'Open Sans' => self::GOOGLE, + 'Open Sans Condensed' => self::GOOGLE, + 'Open Sans Hebrew' => self::EARLYACCESS, // Hack for Google Early Access. + 'Open Sans Hebrew Condensed' => self::EARLYACCESS, // Hack for Google Early Access. + 'Oranienbaum' => self::GOOGLE, + 'Orbitron' => self::GOOGLE, + 'Oregano' => self::GOOGLE, + 'Orelega One' => self::GOOGLE, + 'Orienta' => self::GOOGLE, + 'Original Surfer' => self::GOOGLE, + 'Oswald' => self::GOOGLE, + 'Otomanopee One' => self::GOOGLE, + 'Outfit' => self::GOOGLE, + 'Over the Rainbow' => self::GOOGLE, + 'Overlock' => self::GOOGLE, + 'Overlock SC' => self::GOOGLE, + 'Overpass' => self::GOOGLE, + 'Overpass Mono' => self::GOOGLE, + 'Ovo' => self::GOOGLE, + 'Oxanium' => self::GOOGLE, + 'Oxygen' => self::GOOGLE, + 'Oxygen Mono' => self::GOOGLE, + 'PT Mono' => self::GOOGLE, + 'PT Sans' => self::GOOGLE, + 'PT Sans Caption' => self::GOOGLE, + 'PT Sans Narrow' => self::GOOGLE, + 'PT Serif' => self::GOOGLE, + 'PT Serif Caption' => self::GOOGLE, + 'Pacifico' => self::GOOGLE, + 'Padauk' => self::GOOGLE, + 'Palanquin' => self::GOOGLE, + 'Palanquin Dark' => self::GOOGLE, + 'Palette Mosaic' => self::GOOGLE, + 'Pangolin' => self::GOOGLE, + 'Paprika' => self::GOOGLE, + 'Parisienne' => self::GOOGLE, + 'Passero One' => self::GOOGLE, + 'Passion One' => self::GOOGLE, + 'Passions Conflict' => self::GOOGLE, + 'Pathway Gothic One' => self::GOOGLE, + 'Patrick Hand' => self::GOOGLE, + 'Patrick Hand SC' => self::GOOGLE, + 'Pattaya' => self::GOOGLE, + 'Patua One' => self::GOOGLE, + 'Pavanam' => self::GOOGLE, + 'Paytone One' => self::GOOGLE, + 'Peddana' => self::GOOGLE, + 'Peralta' => self::GOOGLE, + 'Permanent Marker' => self::GOOGLE, + 'Petemoss' => self::GOOGLE, + 'Petit Formal Script' => self::GOOGLE, + 'Petrona' => self::GOOGLE, + 'Philosopher' => self::GOOGLE, + 'Piazzolla' => self::GOOGLE, + 'Piedra' => self::GOOGLE, + 'Pinyon Script' => self::GOOGLE, + 'Pirata One' => self::GOOGLE, + 'Plaster' => self::GOOGLE, + 'Play' => self::GOOGLE, + 'Playball' => self::GOOGLE, + 'Playfair Display' => self::GOOGLE, + 'Playfair Display SC' => self::GOOGLE, + 'Podkova' => self::GOOGLE, + 'Poiret One' => self::GOOGLE, + 'Poller One' => self::GOOGLE, + 'Poly' => self::GOOGLE, + 'Pompiere' => self::GOOGLE, + 'Pontano Sans' => self::GOOGLE, + 'Poor Story' => self::GOOGLE, + 'Poppins' => self::GOOGLE, + 'Port Lligat Sans' => self::GOOGLE, + 'Port Lligat Slab' => self::GOOGLE, + 'Potta One' => self::GOOGLE, + 'Pragati Narrow' => self::GOOGLE, + 'Praise' => self::GOOGLE, + 'Prata' => self::GOOGLE, + 'Preahvihear' => self::GOOGLE, + 'Press Start 2P' => self::GOOGLE, + 'Pridi' => self::GOOGLE, + 'Princess Sofia' => self::GOOGLE, + 'Prociono' => self::GOOGLE, + 'Prompt' => self::GOOGLE, + 'Prosto One' => self::GOOGLE, + 'Proza Libre' => self::GOOGLE, + 'Public Sans' => self::GOOGLE, + 'Puppies Play' => self::GOOGLE, + 'Puritan' => self::GOOGLE, + 'Purple Purse' => self::GOOGLE, + 'Qahiri' => self::GOOGLE, + 'Quando' => self::GOOGLE, + 'Quantico' => self::GOOGLE, + 'Quattrocento' => self::GOOGLE, + 'Quattrocento Sans' => self::GOOGLE, + 'Questrial' => self::GOOGLE, + 'Quicksand' => self::GOOGLE, + 'Quintessential' => self::GOOGLE, + 'Qwigley' => self::GOOGLE, + 'Qwitcher Grypen' => self::GOOGLE, + 'Racing Sans One' => self::GOOGLE, + 'Radley' => self::GOOGLE, + 'Rajdhani' => self::GOOGLE, + 'Rakkas' => self::GOOGLE, + 'Raleway' => self::GOOGLE, + 'Raleway Dots' => self::GOOGLE, + 'Ramabhadra' => self::GOOGLE, + 'Ramaraja' => self::GOOGLE, + 'Rambla' => self::GOOGLE, + 'Rammetto One' => self::GOOGLE, + 'Rampart One' => self::GOOGLE, + 'Ranchers' => self::GOOGLE, + 'Rancho' => self::GOOGLE, + 'Ranga' => self::GOOGLE, + 'Rasa' => self::GOOGLE, + 'Rationale' => self::GOOGLE, + 'Ravi Prakash' => self::GOOGLE, + 'Readex Pro' => self::GOOGLE, + 'Recursive' => self::GOOGLE, + 'Red Hat Display' => self::GOOGLE, + 'Red Hat Mono' => self::GOOGLE, + 'Red Hat Text' => self::GOOGLE, + 'Red Rose' => self::GOOGLE, + 'Redacted' => self::GOOGLE, + 'Redacted Script' => self::GOOGLE, + 'Redressed' => self::GOOGLE, + 'Reem Kufi' => self::GOOGLE, + 'Reenie Beanie' => self::GOOGLE, + 'Reggae One' => self::GOOGLE, + 'Revalia' => self::GOOGLE, + 'Rhodium Libre' => self::GOOGLE, + 'Ribeye' => self::GOOGLE, + 'Ribeye Marrow' => self::GOOGLE, + 'Righteous' => self::GOOGLE, + 'Risque' => self::GOOGLE, + 'Road Rage' => self::GOOGLE, + 'Roboto' => self::GOOGLE, + 'Roboto Condensed' => self::GOOGLE, + 'Roboto Mono' => self::GOOGLE, + 'Roboto Slab' => self::GOOGLE, + 'Rochester' => self::GOOGLE, + 'Rock 3D' => self::GOOGLE, + 'Rock Salt' => self::GOOGLE, + 'RocknRoll One' => self::GOOGLE, + 'Rokkitt' => self::GOOGLE, + 'Romanesco' => self::GOOGLE, + 'Ropa Sans' => self::GOOGLE, + 'Rosario' => self::GOOGLE, + 'Rosarivo' => self::GOOGLE, + 'Rouge Script' => self::GOOGLE, + 'Rowdies' => self::GOOGLE, + 'Rozha One' => self::GOOGLE, + 'Rubik' => self::GOOGLE, + 'Rubik Beastly' => self::GOOGLE, + 'Rubik Mono One' => self::GOOGLE, + 'Ruda' => self::GOOGLE, + 'Rufina' => self::GOOGLE, + 'Ruge Boogie' => self::GOOGLE, + 'Ruluko' => self::GOOGLE, + 'Rum Raisin' => self::GOOGLE, + 'Ruslan Display' => self::GOOGLE, + 'Russo One' => self::GOOGLE, + 'Ruthie' => self::GOOGLE, + 'Rye' => self::GOOGLE, + 'STIX Two Text' => self::GOOGLE, + 'Sacramento' => self::GOOGLE, + 'Sahitya' => self::GOOGLE, + 'Sail' => self::GOOGLE, + 'Saira' => self::GOOGLE, + 'Saira Condensed' => self::GOOGLE, + 'Saira Extra Condensed' => self::GOOGLE, + 'Saira Semi Condensed' => self::GOOGLE, + 'Saira Stencil One' => self::GOOGLE, + 'Salsa' => self::GOOGLE, + 'Sanchez' => self::GOOGLE, + 'Sancreek' => self::GOOGLE, + 'Sansita' => self::GOOGLE, + 'Sansita Swashed' => self::GOOGLE, + 'Sarabun' => self::GOOGLE, + 'Sarala' => self::GOOGLE, + 'Sarina' => self::GOOGLE, + 'Sarpanch' => self::GOOGLE, + 'Sassy Frass' => self::GOOGLE, + 'Satisfy' => self::GOOGLE, + 'Sawarabi Gothic' => self::GOOGLE, + 'Sawarabi Mincho' => self::GOOGLE, + 'Scada' => self::GOOGLE, + 'Scheherazade New' => self::GOOGLE, + 'Schoolbell' => self::GOOGLE, + 'Scope One' => self::GOOGLE, + 'Seaweed Script' => self::GOOGLE, + 'Secular One' => self::GOOGLE, + 'Sedgwick Ave' => self::GOOGLE, + 'Sedgwick Ave Display' => self::GOOGLE, + 'Sen' => self::GOOGLE, + 'Sevillana' => self::GOOGLE, + 'Seymour One' => self::GOOGLE, + 'Shadows Into Light' => self::GOOGLE, + 'Shadows Into Light Two' => self::GOOGLE, + 'Shalimar' => self::GOOGLE, + 'Shanti' => self::GOOGLE, + 'Share' => self::GOOGLE, + 'Share Tech' => self::GOOGLE, + 'Share Tech Mono' => self::GOOGLE, + 'Shippori Antique' => self::GOOGLE, + 'Shippori Antique B1' => self::GOOGLE, + 'Shippori Mincho' => self::GOOGLE, + 'Shippori Mincho B1' => self::GOOGLE, + 'Shizuru' => self::GOOGLE, + 'Shojumaru' => self::GOOGLE, + 'Short Stack' => self::GOOGLE, + 'Shrikhand' => self::GOOGLE, + 'Siemreap' => self::GOOGLE, + 'Sigmar One' => self::GOOGLE, + 'Signika' => self::GOOGLE, + 'Signika Negative' => self::GOOGLE, + 'Simonetta' => self::GOOGLE, + 'Single Day' => self::GOOGLE, + 'Sintony' => self::GOOGLE, + 'Sirin Stencil' => self::GOOGLE, + 'Six Caps' => self::GOOGLE, + 'Skranji' => self::GOOGLE, + 'Slabo 13px' => self::GOOGLE, + 'Slabo 27px' => self::GOOGLE, + 'Slackey' => self::GOOGLE, + 'Smokum' => self::GOOGLE, + 'Smooch' => self::GOOGLE, + 'Smythe' => self::GOOGLE, + 'Sniglet' => self::GOOGLE, + 'Snippet' => self::GOOGLE, + 'Snowburst One' => self::GOOGLE, + 'Sofadi One' => self::GOOGLE, + 'Sofia' => self::GOOGLE, + 'Solway' => self::GOOGLE, + 'Song Myung' => self::GOOGLE, + 'Sonsie One' => self::GOOGLE, + 'Sora' => self::GOOGLE, + 'Sorts Mill Goudy' => self::GOOGLE, + 'Source Code Pro' => self::GOOGLE, + 'Source Sans 3' => self::GOOGLE, + 'Source Sans Pro' => self::GOOGLE, + 'Source Serif 4' => self::GOOGLE, + 'Source Serif Pro' => self::GOOGLE, + 'Space Grotesk' => self::GOOGLE, + 'Space Mono' => self::GOOGLE, + 'Spartan' => self::GOOGLE, + 'Special Elite' => self::GOOGLE, + 'Spectral' => self::GOOGLE, + 'Spectral SC' => self::GOOGLE, + 'Spicy Rice' => self::GOOGLE, + 'Spinnaker' => self::GOOGLE, + 'Spirax' => self::GOOGLE, + 'Spline Sans' => self::GOOGLE, + 'Squada One' => self::GOOGLE, + 'Sree Krushnadevaraya' => self::GOOGLE, + 'Sriracha' => self::GOOGLE, + 'Srisakdi' => self::GOOGLE, + 'Staatliches' => self::GOOGLE, + 'Stalemate' => self::GOOGLE, + 'Stalinist One' => self::GOOGLE, + 'Stardos Stencil' => self::GOOGLE, + 'Stick' => self::GOOGLE, + 'Stick No Bills' => self::GOOGLE, + 'Stint Ultra Condensed' => self::GOOGLE, + 'Stint Ultra Expanded' => self::GOOGLE, + 'Stoke' => self::GOOGLE, + 'Strait' => self::GOOGLE, + 'Style Script' => self::GOOGLE, + 'Stylish' => self::GOOGLE, + 'Sue Ellen Francisco' => self::GOOGLE, + 'Suez One' => self::GOOGLE, + 'Sulphur Point' => self::GOOGLE, + 'Sumana' => self::GOOGLE, + 'Sunflower' => self::GOOGLE, + 'Sunshiney' => self::GOOGLE, + 'Supermercado One' => self::GOOGLE, + 'Sura' => self::GOOGLE, + 'Suranna' => self::GOOGLE, + 'Suravaram' => self::GOOGLE, + 'Suwannaphum' => self::GOOGLE, + 'Swanky and Moo Moo' => self::GOOGLE, + 'Syncopate' => self::GOOGLE, + 'Syne' => self::GOOGLE, + 'Syne Mono' => self::GOOGLE, + 'Syne Tactile' => self::GOOGLE, + 'Tajawal' => self::GOOGLE, + 'Tangerine' => self::GOOGLE, + 'Taprom' => self::GOOGLE, + 'Tauri' => self::GOOGLE, + 'Taviraj' => self::GOOGLE, + 'Teko' => self::GOOGLE, + 'Telex' => self::GOOGLE, + 'Tenali Ramakrishna' => self::GOOGLE, + 'Tenor Sans' => self::GOOGLE, + 'Text Me One' => self::GOOGLE, + 'Texturina' => self::GOOGLE, + 'Thasadith' => self::GOOGLE, + 'The Girl Next Door' => self::GOOGLE, + 'The Nautigal' => self::GOOGLE, + 'Tienne' => self::GOOGLE, + 'Tillana' => self::GOOGLE, + 'Timmana' => self::GOOGLE, + 'Tinos' => self::GOOGLE, + 'Titan One' => self::GOOGLE, + 'Titillium Web' => self::GOOGLE, + 'Tomorrow' => self::GOOGLE, + 'Tourney' => self::GOOGLE, + 'Trade Winds' => self::GOOGLE, + 'Train One' => self::GOOGLE, + 'Trirong' => self::GOOGLE, + 'Trispace' => self::GOOGLE, + 'Trocchi' => self::GOOGLE, + 'Trochut' => self::GOOGLE, + 'Truculenta' => self::GOOGLE, + 'Trykker' => self::GOOGLE, + 'Tulpen One' => self::GOOGLE, + 'Turret Road' => self::GOOGLE, + 'Twinkle Star' => self::GOOGLE, + 'Ubuntu' => self::GOOGLE, + 'Ubuntu Condensed' => self::GOOGLE, + 'Ubuntu Mono' => self::GOOGLE, + 'Uchen' => self::GOOGLE, + 'Ultra' => self::GOOGLE, + 'Uncial Antiqua' => self::GOOGLE, + 'Underdog' => self::GOOGLE, + 'Unica One' => self::GOOGLE, + 'UnifrakturCook' => self::GOOGLE, + 'UnifrakturMaguntia' => self::GOOGLE, + 'Unkempt' => self::GOOGLE, + 'Unlock' => self::GOOGLE, + 'Unna' => self::GOOGLE, + 'Urbanist' => self::GOOGLE, + 'VT323' => self::GOOGLE, + 'Vampiro One' => self::GOOGLE, + 'Varela' => self::GOOGLE, + 'Varela Round' => self::GOOGLE, + 'Varta' => self::GOOGLE, + 'Vast Shadow' => self::GOOGLE, + 'Vesper Libre' => self::GOOGLE, + 'Viaoda Libre' => self::GOOGLE, + 'Vibes' => self::GOOGLE, + 'Vibur' => self::GOOGLE, + 'Vidaloka' => self::GOOGLE, + 'Viga' => self::GOOGLE, + 'Voces' => self::GOOGLE, + 'Volkhov' => self::GOOGLE, + 'Vollkorn' => self::GOOGLE, + 'Vollkorn SC' => self::GOOGLE, + 'Voltaire' => self::GOOGLE, + 'Vujahday Script' => self::GOOGLE, + 'Waiting for the Sunrise' => self::GOOGLE, + 'Wallpoet' => self::GOOGLE, + 'Walter Turncoat' => self::GOOGLE, + 'Warnes' => self::GOOGLE, + 'Waterfall' => self::GOOGLE, + 'Wellfleet' => self::GOOGLE, + 'Wendy One' => self::GOOGLE, + 'WindSong' => self::GOOGLE, + 'Wire One' => self::GOOGLE, + 'Work Sans' => self::GOOGLE, + 'Xanh Mono' => self::GOOGLE, + 'Yaldevi' => self::GOOGLE, + 'Yanone Kaffeesatz' => self::GOOGLE, + 'Yantramanav' => self::GOOGLE, + 'Yatra One' => self::GOOGLE, + 'Yellowtail' => self::GOOGLE, + 'Yeon Sung' => self::GOOGLE, + 'Yeseva One' => self::GOOGLE, + 'Yesteryear' => self::GOOGLE, + 'Yomogi' => self::GOOGLE, + 'Yrsa' => self::GOOGLE, + 'Yuji Boku' => self::GOOGLE, + 'Yuji Hentaigana Akari' => self::GOOGLE, + 'Yuji Hentaigana Akebono' => self::GOOGLE, + 'Yuji Mai' => self::GOOGLE, + 'Yuji Syuku' => self::GOOGLE, + 'Yusei Magic' => self::GOOGLE, + 'ZCOOL KuaiLe' => self::GOOGLE, + 'ZCOOL QingKe HuangYou' => self::GOOGLE, + 'ZCOOL XiaoWei' => self::GOOGLE, + 'Zen Antique' => self::GOOGLE, + 'Zen Antique Soft' => self::GOOGLE, + 'Zen Dots' => self::GOOGLE, + 'Zen Kaku Gothic Antique' => self::GOOGLE, + 'Zen Kaku Gothic New' => self::GOOGLE, + 'Zen Kurenaido' => self::GOOGLE, + 'Zen Loop' => self::GOOGLE, + 'Zen Maru Gothic' => self::GOOGLE, + 'Zen Old Mincho' => self::GOOGLE, + 'Zen Tokyo Zoo' => self::GOOGLE, + 'Zeyada' => self::GOOGLE, + 'Zhi Mang Xing' => self::GOOGLE, + 'Zilla Slab' => self::GOOGLE, + 'Zilla Slab Highlight' => self::GOOGLE, + ]; + } + + /** + * Get font type. + * + * Retrieve the font type for a given font. + * + * @since 1.0.0 + * @access public + * @static + * + * @param string $name Font name. + * + * @return string|false Font type, or false if font doesn't exist. + */ + public static function getFontType($name) + { + $fonts = self::getFonts(); + + if (empty($fonts[$name])) { + return false; + } + + return $fonts[$name]; + } + + /** + * Get fonts by group. + * + * Retrieve all the fonts belong to specific group. + * + * @since 1.0.0 + * @access public + * @static + * + * @param array $groups Optional. Font group. Default is an empty array. + * + * @return array Font type, or false if font doesn't exist. + */ + public static function getFontsByGroups($groups = []) + { + return array_filter(self::getFonts(), function ($font) use ($groups) { + return in_array($font, $groups); + }); + } +} diff --git a/modules/creativeelements/includes/frontend.php b/modules/creativeelements/includes/frontend.php new file mode 100644 index 00000000..32880f9b --- /dev/null +++ b/modules/creativeelements/includes/frontend.php @@ -0,0 +1,998 @@ +addContentFilter(); + + // Hack to avoid enqueue post CSS while it's a `the_excerpt` call. + // add_filter('get_the_excerpt', [$this, 'start_excerpt_flag'], 1); + // add_filter('get_the_excerpt', [$this, 'end_excerpt_flag'], 20); + } + + /** + * Get module name. + * + * Retrieve the module name. + * + * @since 2.3.0 + * @access public + * + * @return string Module name. + */ + public function getName() + { + return 'frontend'; + } + + /** + * Init. + * + * Initialize Elementor front end. Hooks the needed actions to run Elementor + * in the front end, including script and style registration. + * + * Fired by `template_redirect` action. + * + * @since 1.0.0 + * @access public + */ + public function init() + { + if (Plugin::$instance->editor->isEditMode()) { + return; + } + + add_filter('body_class', [$this, 'body_class']); + + if (Plugin::$instance->preview->isPreviewMode()) { + return; + } + + // if (current_user_can('manage_options')) { + // Plugin::$instance->initCommon(); + // } + + $this->post_id = get_the_ID(); + + if (is_singular() && Plugin::$instance->db->isBuiltWithElementor($this->post_id)) { + add_action('wp_enqueue_scripts', [$this, 'enqueue_styles']); + } + + // Priority 7 to allow google fonts in header template to load in tag + add_action('wp_head', [$this, 'print_fonts_links'], 7); + add_action('wp_footer', [$this, 'wp_footer']); + + // Add Edit with the Elementor in Admin Bar. + // add_action('admin_bar_menu', [$this, 'add_menu_in_admin_bar'], 200); + } + + // public function addBodyClass($class) + + // public function bodyClass($classes = []) + + /** + * Add content filter. + * + * Remove plain content and render the content generated by Elementor. + * + * @since 1.8.0 + * @access public + */ + public function addContentFilter() + { + add_filter('the_content', [$this, 'apply_builder_in_content'], self::THE_CONTENT_FILTER_PRIORITY); + } + + // public function removeContentFilter() + + /** + * Registers scripts. + * + * Registers all the frontend scripts. + * + * Fired by `wp_enqueue_scripts` action. + * + * @since 1.2.1 + * @access public + */ + public function registerScripts() + { + /** + * Before frontend register scripts. + * + * Fires before Elementor frontend scripts are registered. + * + * @since 1.2.1 + */ + do_action('elementor/frontend/before_register_scripts'); + + wp_register_script( + 'elementor-frontend-modules', + $this->getJsAssetsUrl('frontend-modules'), + [ + 'jquery', + ], + _CE_VERSION_, + true + ); + + \Configuration::get('elementor_load_waypoints') && wp_register_script( + 'elementor-waypoints', + $this->getJsAssetsUrl('waypoints', 'views/lib/waypoints/'), + [ + 'jquery', + ], + '4.0.2', + true + ); + + wp_register_script( + 'flatpickr', + $this->getJsAssetsUrl('flatpickr', 'views/lib/flatpickr/'), + [ + 'jquery', + ], + '4.1.4', + true + ); + + // wp_register_script( + // 'imagesloaded', + // $this->getJsAssetsUrl('imagesloaded', 'views/lib/imagesloaded/'), + // [ + // 'jquery', + // ], + // '4.1.0', + // true + // ); + + wp_register_script( + 'jquery-numerator', + $this->getJsAssetsUrl('jquery-numerator', 'views/lib/jquery-numerator/'), + [ + 'jquery', + ], + '0.2.1', + true + ); + + \Configuration::get('elementor_global_image_lightbox') && wp_register_script( + 'swiper', + $this->getJsAssetsUrl('swiper', 'views/lib/swiper/'), + [], + '4.4.7', + true + ); + + \Configuration::get('elementor_load_slick') && wp_register_script( + 'jquery-slick', + $this->getJsAssetsUrl('slick', 'views/lib/slick/'), + [ + 'jquery', + ], + '1.8.1', + true + ); + + wp_register_script( + 'elementor-dialog', + $this->getJsAssetsUrl('dialog', 'views/lib/dialog/'), + [ + 'jquery-ui-position', + ], + '4.7.1', + true + ); + + wp_register_script( + 'smartmenus', + $this->getJsAssetsUrl('jquery.smartmenus', 'views/lib/smartmenus/'), + [ + 'jquery', + ], + '1.0.1', + true + ); + + wp_register_script( + 'elementor-frontend', + $this->getJsAssetsUrl('frontend'), + [ + 'elementor-frontend-modules', + 'elementor-dialog', + 'elementor-waypoints', + 'swiper', + ], + _CE_VERSION_, + true + ); + + /** + * After frontend register scripts. + * + * Fires after Elementor frontend scripts are registered. + * + * @since 1.2.1 + */ + do_action('elementor/frontend/after_register_scripts'); + } + + /** + * Registers styles. + * + * Registers all the frontend styles. + * + * Fired by `wp_enqueue_scripts` action. + * + * @since 1.2.0 + * @access public + */ + public function registerStyles() + { + /** + * Before frontend register styles. + * + * Fires before Elementor frontend styles are registered. + * + * @since 1.2.0 + */ + do_action('elementor/frontend/before_register_styles'); + + wp_register_style( + 'elementor-icons', + $this->getCssAssetsUrl('elementor-icons', 'views/lib/eicons/css/'), + [], + '4.3.1' + ); + + wp_register_style( + 'ce-icons', + $this->getCssAssetsUrl('ceicons', 'views/lib/ceicons/'), + [], + _CE_VERSION_ + ); + + \Configuration::get('elementor_load_fontawesome') && wp_register_style( + 'font-awesome', + $this->getCssAssetsUrl('font-awesome', 'views/lib/font-awesome/css/'), + [], + '4.7-swap' + ); + + wp_register_style( + 'elementor-animations', + $this->getCssAssetsUrl('animations', 'views/lib/animations/'), + [], + _CE_VERSION_ + ); + + wp_register_style( + 'flatpickr', + $this->getCssAssetsUrl('flatpickr', 'views/lib/flatpickr/'), + [], + '4.1.4' + ); + + $min_suffix = Utils::isScriptDebug() ? '' : '.min'; + + $direction_suffix = is_rtl() ? '-rtl' : ''; + + $frontend_file_name = 'frontend' . $direction_suffix . $min_suffix . '.css'; + + $has_custom_file = Responsive::hasCustomBreakpoints(); + + if ($has_custom_file) { + $id_shop = (int) \Context::getContext()->shop->id; + + $frontend_file = new FrontendFile("$id_shop-" . $frontend_file_name, Responsive::getStylesheetTemplatesPath() . $frontend_file_name); + + $time = $frontend_file->getMeta('time'); + + if (!$time) { + $frontend_file->update(); + } + + $frontend_file_url = $frontend_file->getUrl(); + } else { + $frontend_file_url = _CE_ASSETS_URL_ . 'css/' . $frontend_file_name; + } + + wp_register_style( + 'elementor-frontend', + $frontend_file_url, + [], + $has_custom_file ? null : _CE_VERSION_ + ); + + /** + * After frontend register styles. + * + * Fires after Elementor frontend styles are registered. + * + * @since 1.2.0 + */ + do_action('elementor/frontend/after_register_styles'); + } + + /** + * Enqueue scripts. + * + * Enqueue all the frontend scripts. + * + * @since 1.0.0 + * @access public + */ + public function enqueueScripts() + { + /** + * Before frontend enqueue scripts. + * + * Fires before Elementor frontend scripts are enqueued. + * + * @since 1.0.0 + */ + do_action('elementor/frontend/before_enqueue_scripts'); + + $this->printConfig(); + + wp_enqueue_script('elementor-frontend'); + + /** + * After frontend enqueue scripts. + * + * Fires after Elementor frontend scripts are enqueued. + * + * @since 1.0.0 + */ + do_action('elementor/frontend/after_enqueue_scripts'); + } + + /** + * Enqueue styles. + * + * Enqueue all the frontend styles. + * + * Fired by `wp_enqueue_scripts` action. + * + * @since 1.0.0 + * @access public + */ + public function enqueueStyles() + { + /** + * Before frontend styles enqueued. + * + * Fires before Elementor frontend styles are enqueued. + * + * @since 1.0.0 + */ + do_action('elementor/frontend/before_enqueue_styles'); + + wp_enqueue_style('font-awesome'); + wp_enqueue_style('elementor-animations'); + wp_enqueue_style('elementor-frontend'); + wp_enqueue_style('ce-icons'); + + /** + * After frontend styles enqueued. + * + * Fires after Elementor frontend styles are enqueued. + * + * @since 1.0.0 + */ + do_action('elementor/frontend/after_enqueue_styles'); + + if (Plugin::$instance->preview->isPreviewMode()) { + // Load only in preview mode + wp_enqueue_style('elementor-icons'); + } else { + $this->parseGlobalCssCode(); + + $css_file = new PostCSS(get_the_ID()); + $css_file->enqueue(); + } + } + + /** + * Elementor footer scripts and styles. + * + * Handle styles and scripts that are not printed in the header. + * + * Fired by `wp_footer` action. + * + * @since 1.0.11 + * @access public + */ + public function wpFooter() + { + if (!$this->_has_elementor_in_page) { + return; + } + + $this->enqueueStyles(); + $this->enqueueScripts(); + + $this->printFontsLinks(); + } + + /** + * Print fonts links. + * + * Enqueue all the frontend fonts by url. + * + * Fired by `wp_head` action. + * + * @since 1.9.4 + * @access public + */ + public function printFontsLinks() + { + $google_fonts = [ + 'google' => [], + 'early' => [], + ]; + + foreach ($this->fonts_to_enqueue as $font) { + $font_type = Fonts::getFontType($font); + + switch ($font_type) { + case Fonts::GOOGLE: + $google_fonts['google'][] = $font; + break; + + case Fonts::EARLYACCESS: + $google_fonts['early'][] = $font; + break; + + default: + /** + * Print font links. + * + * Fires when Elementor frontend fonts are printed on the HEAD tag. + * + * The dynamic portion of the hook name, `$font_type`, refers to the font type. + * + * @since 2.0.0 + * + * @param string $font Font name. + */ + do_action("elementor/fonts/print_font_links/{$font_type}", $font); + } + } + $this->fonts_to_enqueue = []; + + $this->enqueueGoogleFonts($google_fonts); + } + + /** + * Print Google fonts. + * + * Enqueue all the frontend Google fonts. + * + * Fired by `wp_head` action. + * + * @since 1.0.0 + * @access private + * + * @param array $google_fonts Optional. Google fonts to print in the frontend. + * Default is an empty array. + */ + private function enqueueGoogleFonts($google_fonts = []) + { + static $google_fonts_index = 0; + + $print_google_fonts = true; + + /** + * Print frontend google fonts. + * + * Filters whether to enqueue Google fonts in the frontend. + * + * @since 1.0.0 + * + * @param bool $print_google_fonts Whether to enqueue Google fonts. Default is true. + */ + $print_google_fonts = apply_filters('elementor/frontend/print_google_fonts', $print_google_fonts); + + if (!$print_google_fonts) { + return; + } + + // Print used fonts + if (!empty($google_fonts['google'])) { + $google_fonts_index++; + + foreach ($google_fonts['google'] as &$font) { + $font = str_replace(' ', '+', $font) . ':100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic'; + } + + $fonts_url = sprintf('https://fonts.googleapis.com/css?family=%s&display=swap', implode(rawurlencode('|'), $google_fonts['google'])); + + $subsets = [ + 'ru' => 'cyrillic', + 'bg' => 'cyrillic', + 'he' => 'hebrew', + 'el' => 'greek', + 'vi' => 'vietnamese', + 'uk' => 'cyrillic', + 'cs' => 'latin-ext', + 'ro' => 'latin-ext', + 'pl' => 'latin-ext', + ]; + $locale = get_locale(); + + if (isset($subsets[$locale])) { + $fonts_url .= '&subset=' . $subsets[$locale]; + } + + wp_enqueue_style('google-fonts-' . $google_fonts_index, $fonts_url); + } + + if (!empty($google_fonts['early'])) { + foreach ($google_fonts['early'] as $current_font) { + $google_fonts_index++; + + $font_url = sprintf('https://fonts.googleapis.com/earlyaccess/%s.css', call_user_func('strtolower', str_replace(' ', '', $current_font))); + + wp_enqueue_style('google-earlyaccess-' . $google_fonts_index, $font_url); + } + } + } + + /** + * Enqueue fonts. + * + * Enqueue all the frontend fonts. + * + * @since 1.2.0 + * @access public + * + * @param array $font Fonts to enqueue in the frontend. + */ + public function enqueueFont($font) + { + if (in_array($font, $this->registered_fonts)) { + return; + } + + $this->fonts_to_enqueue[] = $font; + $this->registered_fonts[] = $font; + } + + /** + * Parse global CSS. + * + * Enqueue the global CSS file. + * + * @since 1.2.0 + * @access protected + */ + protected function parseGlobalCssCode() + { + $id_shop = (int) \Context::getContext()->shop->id; + + $scheme_css_file = new GlobalCSS("$id_shop-global.css"); + $scheme_css_file->enqueue(); + } + + /** + * Apply builder in content. + * + * Used to apply the Elementor page editor on the post content. + * + * @since 1.0.0 + * @access public + * + * @param string $content The post content. + * + * @return string The post content. + */ + public function applyBuilderInContent($content) + { + // $this->restoreContentFilters(); + $post_id = UId::$_ID; + + if (\CreativeElements::getPreviewUId() == $post_id || $this->_is_excerpt) { + return $content; + } + + // Remove the filter itself in order to allow other `the_content` in the elements + // $this->removeContentFilter(); + + $builder_content = $this->getBuilderContent($post_id); + + if (!empty($builder_content)) { + $content = $builder_content; + // $this->removeContentFilters(); + } + + // Add the filter again for other `the_content` calls + // $this->addContentFilter(); + + return $content; + } + + /** + * Retrieve builder content. + * + * Used to render and return the post content with all the Elementor elements. + * + * Note that this method is an internal method, please use `getBuilderContentForDisplay()`. + * + * @since 1.0.0 + * @access public + * + * @param int $post_id The post ID. + * @param bool $with_css Optional. Whether to retrieve the content with CSS or not. Default is false. + * + * @return string The post content. + */ + public function getBuilderContent($post_id, $with_css = false) + { + // if (post_password_required($post_id)) { + // return ''; + // } + + if (!Plugin::$instance->db->isBuiltWithElementor($post_id)) { + return ''; + } + + $document = Plugin::$instance->documents->getDocForFrontend($post_id); + + // Change the current post, so widgets can use `documents->get_current`. + Plugin::$instance->documents->switchToDocument($document); + + // if ($document->isEditableByCurrentUser()) { + // $this->admin_bar_edit_documents[$document->getMainId()] = $document; + // } + + $data = $document->getElementsData(); + + /** + * Frontend builder content data. + * + * Filters the builder content in the frontend. + * + * @since 1.0.0 + * + * @param array $data The builder content. + * @param int $post_id The post ID. + */ + $data = apply_filters('elementor/frontend/builder_content_data', $data, $post_id); + + if (empty($data)) { + return ''; + } + + if (!$this->_is_excerpt) { + if ($document->isAutosave()) { + $css_file = new PostPreview($document->getPost()->ID); + } else { + $css_file = new PostCSS($post_id); + } + + $css_file->enqueue(); + } + + ob_start(); + + // Handle JS and Customizer requests, with CSS inline. + if (is_customize_preview() || Utils::isAjax()) { + $with_css = true; + } + + if (!empty($css_file) && $with_css) { + $css_file->printCss(); + } + + $document->printElementsWithWrapper($data); + + $content = ob_get_clean(); + + // $content = $this->processMoreTag($content); + + /** + * Frontend content. + * + * Filters the content in the frontend. + * + * @since 1.0.0 + * + * @param string $content The content. + */ + $content = apply_filters('elementor/frontend/the_content', $content); + + if (!empty($content)) { + $this->_has_elementor_in_page = true; + } + + Plugin::$instance->documents->restoreDocument(); + + return $content; + } + + // public function addMenuInAdminBar(\WPAdminBar $wp_admin_bar) + + /** + * Retrieve builder content for display. + * + * Used to render and return the post content with all the Elementor elements. + * + * @since 1.0.0 + * @access public + * + * @param int $post_id The post ID. + * + * @param bool $with_css Optional. Whether to retrieve the content with CSS + * or not. Default is false. + * + * @return string The post content. + */ + public function getBuilderContentForDisplay($post_id, $with_css = false) + { + if (!get_post($post_id)) { + return ''; + } + + $editor = Plugin::$instance->editor; + + // Avoid recursion + if (get_the_ID() === (int) $post_id) { + $content = ''; + if ($editor->isEditMode()) { + $content = '
' . __( + 'Invalid Data: The Template ID cannot be the same as the currently edited template. ' . + 'Please choose a different one.' + ) . '
'; + } + + return $content; + } + + // Set edit mode as false, so don't render settings and etc. use the $is_edit_mode to indicate if we need the CSS inline + $is_edit_mode = $editor->isEditMode(); + $editor->setEditMode(false); + + $with_css = $with_css ? true : $is_edit_mode; + + $content = $this->getBuilderContent($post_id, $with_css); + + // Restore edit mode state + Plugin::$instance->editor->setEditMode($is_edit_mode); + + return $content; + } + + // public function startExcerptFlag($excerpt) + + // public function endExcerptFlag($excerpt) + + // public function removeContentFilters(); + + /** + * Has Elementor In Page + * + * Determine whether the current page is using Elementor. + * + * @since 2.0.9 + * + * @access public + * @return bool + */ + public function hasElementorInPage($value = null) + { + if (null === $value) { + // getter + return $this->_has_elementor_in_page; + } else { + // setter + $this->_has_elementor_in_page = (bool) $value; + } + } + + /** + * Get Init Settings + * + * Used to define the default/initial settings of the object. Inheriting classes may implement this method to define + * their own default/initial settings. + * + * @since 2.3.0 + * + * @access protected + * @return array + */ + protected function getInitSettings() + { + $is_preview_mode = Plugin::$instance->preview->isPreviewMode(Plugin::$instance->preview->getPostId()); + + $settings = [ + 'environmentMode' => [ + 'edit' => $is_preview_mode, + 'wpPreview' => is_preview(), + ], + 'is_rtl' => is_rtl(), + 'breakpoints' => Responsive::getBreakpoints(), + 'version' => _CE_VERSION_, + 'urls' => [ + 'assets' => _MODULE_DIR_ . 'creativeelements/views/', + ], + 'productQuickView' => (int) \Configuration::get('CE_PRODUCT_QUICK_VIEW'), + ]; + + $settings['settings'] = SettingsManager::getSettingsFrontendConfig(); + + if (is_singular()) { + $post = get_post(); + $settings['post'] = [ + 'id' => $post->ID, + 'title' => $post->post_title, + 'excerpt' => $post->post_excerpt, + ]; + } else { + $settings['post'] = [ + 'id' => 0, + 'title' => wp_get_document_title(), + 'excerpt' => '', + ]; + } + + $empty_object = (object) []; + + if ($is_preview_mode) { + $settings['elements'] = [ + 'data' => $empty_object, + 'editSettings' => $empty_object, + 'keys' => $empty_object, + ]; + } + + // if (is_user_logged_in()) { + // $user = wp_get_current_user(); + + // if (!empty($user->roles)) { + // $settings['user'] = [ + // 'roles' => $user->roles, + // ]; + // } + // } + + return $settings; + } + + // private function restoreContentFilters(); + + // private function processMoreTag($content); +} diff --git a/modules/creativeelements/includes/heartbeat.php b/modules/creativeelements/includes/heartbeat.php new file mode 100644 index 00000000..2ff3ce76 --- /dev/null +++ b/modules/creativeelements/includes/heartbeat.php @@ -0,0 +1,106 @@ +editor->getLockedUser($post_id); + + if (!$locked_user || !empty($data['elementor_force_post_lock'])) { + Plugin::$instance->editor->lockPost($post_id); + } else { + $response['locked_user'] = $locked_user->display_name; + } + + /** @var Core\Common\Modules\Ajax\Module $ajax */ + $ajax = Plugin::$instance->common->getComponent('ajax'); + + $response['elementorNonce'] = $ajax->createNonce(); + } + return $response; + } + + /** + * Refresh nonces. + * + * Filter the nonces to send to the editor when editing with Elementor. Used + * to refresh the nonce when the nonce expires while editing. This way the + * user doesn't need to log-in again as Elementor fetches the new nonce from + * the server using ajax. + * + * Fired by `wp_refresh_nonces` filter. + * + * @since 1.8.0 + * @access public + * + * @param array $response The no-priv Heartbeat response object or array. + * @param array $data The POST data sent. + * + * @return array Refreshed nonces. + */ + public function refreshNonces($response, $data) + { + if (isset($data['elementor_post_lock']['post_ID'])) { + /** @var Core\Common\Modules\Ajax\Module $ajax */ + $ajax = Plugin::$instance->common->getComponent('ajax'); + + $response['elementor-refresh-nonces'] = [ + 'elementorNonce' => $ajax->createNonce(), + 'heartbeatNonce' => wp_create_nonce('heartbeat-nonce'), + ]; + } + + return $response; + } + + /** + * Heartbeat constructor. + * + * Initializing Elementor heartbeat. + * + * @since 1.0.0 + * @access public + */ + public function __construct() + { + add_filter('heartbeat_received', [$this, 'heartbeat_received'], 10, 2); + add_filter('wp_refresh_nonces', [$this, 'refresh_nonces'], 30, 2); + } +} diff --git a/modules/creativeelements/includes/index.php b/modules/creativeelements/includes/index.php new file mode 100644 index 00000000..0e32c6a1 --- /dev/null +++ b/modules/creativeelements/includes/index.php @@ -0,0 +1,16 @@ + __('Content'), + self::TAB_STYLE => __('Style'), + self::TAB_ADVANCED => __('Advanced'), + self::TAB_RESPONSIVE => __('Responsive'), + self::TAB_LAYOUT => __('Layout'), + self::TAB_SETTINGS => __('Settings'), + ]; + } + + /** + * Get tabs. + * + * Retrieve the tabs of the current control. + * + * @since 1.6.0 + * @access public + * @static + * + * @return array Control tabs. + */ + public static function getTabs() + { + if (!self::$tabs) { + self::initTabs(); + } + + return self::$tabs; + } + + /** + * Add tab. + * + * This method adds a new tab to the current control. + * + * @since 1.6.0 + * @access public + * @static + * + * @param string $tab_name Tab name. + * @param string $tab_label Tab label. + */ + public static function addTab($tab_name, $tab_label) + { + if (!self::$tabs) { + self::initTabs(); + } + + if (isset(self::$tabs[$tab_name])) { + return; + } + + self::$tabs[$tab_name] = $tab_label; + } + + public static function getGroupsNames() + { + // Group name must use "-" instead of "_" + return [ + 'background', + 'border', + 'typography', + 'image-size', + 'box-shadow', + 'css-filter', + 'text-shadow', + 'text-stroke', + ]; + } + + public static function getControlsNames() + { + return [ + self::TEXT, + self::NUMBER, + self::TEXTAREA, + self::SELECT, + self::SWITCHER, + + self::BUTTON, + self::HIDDEN, + self::HEADING, + self::RAW_HTML, + self::POPOVER_TOGGLE, + self::SECTION, + self::TAB, + self::TABS, + self::DIVIDER, + + self::COLOR, + self::MEDIA, + self::SLIDER, + self::DIMENSIONS, + self::CHOOSE, + self::WYSIWYG, + self::CODE, + self::FONT, + // self::IMAGE_DIMENSIONS, + // self::WP_WIDGET, + + self::URL, + self::REPEATER, + self::ICON, + // self::GALLERY, + self::STRUCTURE, + self::SELECT2, + self::DATE_TIME, + self::BOX_SHADOW, + self::TEXT_SHADOW, + self::ANIMATION, + self::HOVER_ANIMATION, + ]; + } + + /** + * Register controls. + * + * This method creates a list of all the supported controls by requiring the + * control files and initializing each one of them. + * + * The list of supported controls includes the regular controls and the group + * controls. + * + * External developers can register new controls by hooking to the + * `elementor/controls/controls_registered` action. + * + * @since 1.0.0 + * @access private + */ + private function registerControls() + { + $this->controls = []; + + foreach (self::getControlsNames() as $control_id) { + $control_class_id = str_replace(' ', '', ucwords(str_replace('_', ' ', $control_id))); + $class_name = __NAMESPACE__ . '\Control' . $control_class_id; + + $this->registerControl($control_id, new $class_name()); + } + + // Group Controls + foreach (self::getGroupsNames() as $group_name) { + $group_class_id = str_replace(' ', '', ucwords(str_replace('-', ' ', $group_name))); + $class_name = __NAMESPACE__ . '\GroupControl' . $group_class_id; + + $this->control_groups[$group_name] = new $class_name(); + } + + /** + * After controls registered. + * + * Fires after Elementor controls are registered. + * + * @since 1.0.0 + * + * @param ControlsManager $this The controls manager. + */ + do_action('elementor/controls/controls_registered', $this); + } + + /** + * Register control. + * + * This method adds a new control to the controls list. It adds any given + * control to any given control instance. + * + * @since 1.0.0 + * @access public + * + * @param string $control_id Control ID. + * @param BaseControl $control_instance Control instance, usually the + * current instance. + */ + public function registerControl($control_id, BaseControl $control_instance) + { + $this->controls[$control_id] = $control_instance; + } + + /** + * Unregister control. + * + * This method removes control from the controls list. + * + * @since 1.0.0 + * @access public + * + * @param string $control_id Control ID. + * + * @return bool True if the control was removed, False otherwise. + */ + public function unregisterControl($control_id) + { + if (!isset($this->controls[$control_id])) { + return false; + } + + unset($this->controls[$control_id]); + + return true; + } + + /** + * Get controls. + * + * Retrieve the controls list from the current instance. + * + * @since 1.0.0 + * @access public + * + * @return BaseControl[] Controls list. + */ + public function getControls() + { + if (null === $this->controls) { + $this->registerControls(); + } + + return $this->controls; + } + + /** + * Get control. + * + * Retrieve a specific control from the current controls instance. + * + * @since 1.0.0 + * @access public + * + * @param string $control_id Control ID. + * + * @return bool|Base_Control Control instance, or False otherwise. + */ + public function getControl($control_id) + { + $controls = $this->getControls(); + + return isset($controls[$control_id]) ? $controls[$control_id] : false; + } + + /** + * Get controls data. + * + * Retrieve all the registered controls and all the data for each control. + * + * @since 1.0.0 + * @access public + * + * @return array { + * Control data. + * + * @type array $name Control data. + * } + */ + public function getControlsData() + { + $controls_data = []; + + foreach ($this->getControls() as $name => $control) { + $controls_data[$name] = $control->getSettings(); + } + + return $controls_data; + } + + /** + * Render controls. + * + * Generate the final HTML for all the registered controls using the element + * template. + * + * @since 1.0.0 + * @access public + */ + public function renderControls() + { + foreach ($this->getControls() as $control) { + $control->printTemplate(); + } + } + + /** + * Get control groups. + * + * Retrieve a specific group for a given ID, or a list of all the control + * groups. + * + * If the given group ID is wrong, it will return `null`. When the ID valid, + * it will return the group control instance. When no ID was given, it will + * return all the control groups. + * + * @since 1.0.10 + * @access public + * + * @param string $id Optional. Group ID. Default is null. + * + * @return null|Group_Control_Base|Group_Control_Base[] + */ + public function getControlGroups($id = null) + { + if ($id) { + return isset($this->control_groups[$id]) ? $this->control_groups[$id] : null; + } + + return $this->control_groups; + } + + /** + * Add group control. + * + * This method adds a new group control to the control groups list. It adds + * any given group control to any given group control instance. + * + * @since 1.0.0 + * @access public + * + * @param string $id Group control ID. + * @param GroupControlBase $instance Group control instance, usually the + * current instance. + * + * @return GroupControlBase Group control instance. + */ + public function addGroupControl($id, $instance) + { + $this->control_groups[$id] = $instance; + + return $instance; + } + + /** + * Enqueue control scripts and styles. + * + * Used to register and enqueue custom scripts and styles used by the control. + * + * @since 1.0.0 + * @access public + */ + public function enqueueControlScripts() + { + foreach ($this->getControls() as $control) { + $control->enqueue(); + } + } + + /** + * Open new stack. + * + * This method adds a new stack to the control stacks list. It adds any + * given stack to the current control instance. + * + * @since 1.0.0 + * @access public + * + * @param ControlsStack $controls_stack Controls stack. + */ + public function openStack(ControlsStack $controls_stack) + { + $stack_id = $controls_stack->getUniqueName(); + + $this->stacks[$stack_id] = [ + 'tabs' => [], + 'controls' => [], + ]; + } + + /** + * Add control to stack. + * + * This method adds a new control to the stack. + * + * @since 1.0.0 + * @access public + * + * @param ControlsStack $element Element stack. + * @param string $control_id Control ID. + * @param array $control_data Control data. + * @param array $options Optional. Control additional options. + * Default is an empty array. + * + * @return bool True if control added, False otherwise. + */ + public function addControlToStack(ControlsStack $element, $control_id, $control_data, $options = []) + { + $default_options = [ + 'overwrite' => false, + 'index' => null, + ]; + + $options = array_merge($default_options, $options); + + $default_args = [ + 'type' => self::TEXT, + 'tab' => self::TAB_CONTENT, + ]; + + $control_data['name'] = $control_id; + + $control_data = array_merge($default_args, $control_data); + + $control_type_instance = $this->getControl($control_data['type']); + + if (!$control_type_instance) { + _doing_it_wrong(sprintf('%1$s::%2$s', __CLASS__, __FUNCTION__), sprintf('Control type "%s" not found.', $control_data['type']), '1.0.0'); + return false; + } + + if ($control_type_instance instanceof BaseDataControl) { + $control_default_value = $control_type_instance->getDefaultValue(); + + if (is_array($control_default_value)) { + $control_data['default'] = isset($control_data['default']) ? array_merge($control_default_value, $control_data['default']) : $control_default_value; + } else { + $control_data['default'] = isset($control_data['default']) ? $control_data['default'] : $control_default_value; + } + } + + $stack_id = $element->getUniqueName(); + + if (!$options['overwrite'] && isset($this->stacks[$stack_id]['controls'][$control_id])) { + _doing_it_wrong(sprintf('%1$s::%2$s', __CLASS__, __FUNCTION__), sprintf('Cannot redeclare control with same name "%s".', $control_id), '1.0.0'); + + return false; + } + + $tabs = self::getTabs(); + + if (!isset($tabs[$control_data['tab']])) { + $control_data['tab'] = $default_args['tab']; + } + + $this->stacks[$stack_id]['tabs'][$control_data['tab']] = $tabs[$control_data['tab']]; + + $this->stacks[$stack_id]['controls'][$control_id] = $control_data; + + if (null !== $options['index']) { + $controls = $this->stacks[$stack_id]['controls']; + + $controls_keys = array_keys($controls); + + array_splice($controls_keys, $options['index'], 0, $control_id); + + $this->stacks[$stack_id]['controls'] = array_merge(array_flip($controls_keys), $controls); + } + + return true; + } + + /** + * Remove control from stack. + * + * This method removes a control a the stack. + * + * @since 1.0.0 + * @access public + * + * @param string $stack_id Stack ID. + * @param array|string $control_id The ID of the control to remove. + * + * @return bool|WPError True if the stack was removed, False otherwise. + */ + public function removeControlFromStack($stack_id, $control_id) + { + if (is_array($control_id)) { + foreach ($control_id as $id) { + $this->removeControlFromStack($stack_id, $id); + } + + return true; + } + + if (empty($this->stacks[$stack_id]['controls'][$control_id])) { + return new WPError('Cannot remove not-exists control.'); + } + + unset($this->stacks[$stack_id]['controls'][$control_id]); + + return true; + } + + /** + * Get control from stack. + * + * Retrieve a specific control for a given a specific stack. + * + * If the given control does not exist in the stack, or the stack does not + * exist, it will return `WP_Error`. Otherwise, it will retrieve the control + * from the stack. + * + * @since 1.1.0 + * @access public + * + * @param string $stack_id Stack ID. + * @param string $control_id Control ID. + * + * @return array|WPError The control, or an error. + */ + public function getControlFromStack($stack_id, $control_id) + { + if (empty($this->stacks[$stack_id]['controls'][$control_id])) { + return new WPError('Cannot get a not-exists control.'); + } + + return $this->stacks[$stack_id]['controls'][$control_id]; + } + + /** + * Update control in stack. + * + * This method updates the control data for a given stack. + * + * @since 1.1.0 + * @access public + * + * @param ControlsStack $element Element stack. + * @param string $control_id Control ID. + * @param array $control_data Control data. + * @param array $options Optional. Control additional options. + * Default is an empty array. + * + * @return bool True if control updated, False otherwise. + */ + public function updateControlInStack(ControlsStack $element, $control_id, $control_data, array $options = []) + { + $old_control_data = $this->getControlFromStack($element->getUniqueName(), $control_id); + + if (is_wp_error($old_control_data)) { + return false; + } + + if (!empty($options['recursive'])) { + $control_data = array_replace_recursive($old_control_data, $control_data); + } else { + $control_data = array_merge($old_control_data, $control_data); + } + + return $this->addControlToStack($element, $control_id, $control_data, [ + 'overwrite' => true, + ]); + } + + /** + * Get stacks. + * + * Retrieve a specific stack for the list of stacks. + * + * If the given stack is wrong, it will return `null`. When the stack valid, + * it will return the the specific stack. When no stack was given, it will + * return all the stacks. + * + * @since 1.7.1 + * @access public + * + * @param string $stack_id Optional. stack ID. Default is null. + * + * @return null|array A list of stacks. + */ + public function getStacks($stack_id = null) + { + if ($stack_id) { + if (isset($this->stacks[$stack_id])) { + return $this->stacks[$stack_id]; + } + + return null; + } + + return $this->stacks; + } + + /** + * Get element stack. + * + * Retrieve a specific stack for the list of stacks from the current instance. + * + * @since 1.0.0 + * @access public + * + * @param ControlsStack $controls_stack Controls stack. + * + * @return null|array Stack data if it exist, `null` otherwise. + */ + public function getElementStack(ControlsStack $controls_stack) + { + $stack_id = $controls_stack->getUniqueName(); + + if (!isset($this->stacks[$stack_id])) { + return null; + } + + return $this->stacks[$stack_id]; + } + + /** + * Add custom CSS controls. + * + * This method adds a new control for the "Custom CSS" feature. + * + * @since 1.0.0 + * @access public + * + * @param ControlsStack $controls_stack. + */ + public function addCustomCssControls(ControlsStack $controls_stack) + { + $controls_stack->startControlsSection( + 'section_custom_css', + [ + 'label' => __('Custom CSS'), + 'tab' => self::TAB_ADVANCED, + ] + ); + + $controls_stack->addControl( + 'custom_css_title', + [ + 'raw' => __('Add your own custom CSS here'), + 'type' => ControlsManager::RAW_HTML, + ] + ); + + $controls_stack->addControl( + 'custom_css', + [ + 'type' => ControlsManager::CODE, + 'label' => __('Custom CSS'), + 'language' => 'css', + 'render_type' => 'ui', + 'show_label' => false, + 'description' => __('Use "selector" to target wrapper element. Examples:') . + '
' . __(
+                        "/* For main element */\nselector { color: red; }\n" .
+                        "/* For child element */\nselector .child-element { margin: 10px; }\n" .
+                        "/* Or use any custom selector */\n.my-class { text-align: center; }"
+                    ) . '
', + ] + ); + + $controls_stack->endControlsSection(); + } +} diff --git a/modules/creativeelements/includes/managers/elements.php b/modules/creativeelements/includes/managers/elements.php new file mode 100644 index 00000000..b9ccccad --- /dev/null +++ b/modules/creativeelements/includes/managers/elements.php @@ -0,0 +1,340 @@ +requireFiles(); + } + + /** + * Create element instance. + * + * This method creates a new element instance for any given element. + * + * @since 1.0.0 + * @access public + * + * @param array $element_data Element data. + * @param array $element_args Optional. Element arguments. Default is + * an empty array. + * @param ElementBase $element_type Optional. Element type. Default is null. + * + * @return ElementBase|null Element instance if element created, or null + * otherwise. + */ + public function createElementInstance(array $element_data, array $element_args = [], ElementBase $element_type = null) + { + if (null === $element_type) { + if ('widget' === $element_data['elType']) { + $element_type = Plugin::$instance->widgets_manager->getWidgetTypes($element_data['widgetType']); + } else { + $element_type = $this->getElementTypes($element_data['elType']); + } + } + + if (!$element_type) { + return null; + } + + $args = array_merge($element_type->getDefaultArgs(), $element_args); + + $element_class = $element_type->getClassName(); + + try { + $element = new $element_class($element_data, $args); + } catch (\Exception $e) { + return null; + } + + return $element; + } + + /** + * Get element categories. + * + * Retrieve the list of categories the element belongs to. + * + * @since 1.0.0 + * @access public + * + * @return array Element categories. + */ + public function getCategories() + { + if (null === $this->categories) { + $this->initCategories(); + } + + return $this->categories; + } + + /** + * Add element category. + * + * Register new category for the element. + * + * @since 1.7.12 + * @since 2.0.0 The third parameter was deprecated. + * @access public + * + * @param string $category_name Category name. + * @param array $category_properties Category properties. + */ + public function addCategory($category_name, $category_properties) + { + if (null === $this->categories) { + $this->getCategories(); + } + + if (!isset($this->categories[$category_name])) { + $this->categories[$category_name] = $category_properties; + } + } + + /** + * Register element type. + * + * Add new type to the list of registered types. + * + * @since 1.0.0 + * @access public + * + * @param ElementBase $element Element instance. + * + * @return bool Whether the element type was registered. + */ + public function registerElementType(ElementBase $element) + { + $this->_element_types[$element->getName()] = $element; + + return true; + } + + /** + * Unregister element type. + * + * Remove element type from the list of registered types. + * + * @since 1.0.0 + * @access public + * + * @param string $name Element name. + * + * @return bool Whether the element type was unregister, or not. + */ + public function unregisterElementType($name) + { + if (!isset($this->_element_types[$name])) { + return false; + } + + unset($this->_element_types[$name]); + + return true; + } + + /** + * Get element types. + * + * Retrieve the list of all the element types, or if a specific element name + * was provided retrieve his element types. + * + * @since 1.0.0 + * @access public + * + * @param string $element_name Optional. Element name. Default is null. + * + * @return null|ElementBase|ElementBase[] Element types, or a list of all the element + * types, or null if element does not exist. + */ + public function getElementTypes($element_name = null) + { + if (is_null($this->_element_types)) { + $this->initElements(); + } + + if (null !== $element_name) { + return isset($this->_element_types[$element_name]) ? $this->_element_types[$element_name] : null; + } + + return $this->_element_types; + } + + /** + * Get element types config. + * + * Retrieve the config of all the element types. + * + * @since 1.0.0 + * @access public + * + * @return array Element types config. + */ + public function getElementTypesConfig() + { + $config = []; + + foreach ($this->getElementTypes() as $element) { + $config[$element->getName()] = $element->getConfig(); + } + + return $config; + } + + /** + * Render elements content. + * + * Used to generate the elements templates on the editor. + * + * @since 1.0.0 + * @access public + */ + public function renderElementsContent() + { + foreach ($this->getElementTypes() as $element_type) { + $element_type->printTemplate(); + } + } + + /** + * Init elements. + * + * Initialize Elementor elements by registering the supported elements. + * Elementor supports by default `section` element and `column` element. + * + * @since 2.0.0 + * @access private + */ + private function initElements() + { + $this->_element_types = []; + + foreach (['section', 'column'] as $element_name) { + $class_name = __NAMESPACE__ . '\Element' . $element_name; + + $this->registerElementType(new $class_name()); + } + + /** + * After elements registered. + * + * Fires after Elementor elements are registered. + * + * @since 1.0.0 + */ + do_action('elementor/elements/elements_registered'); + } + + /** + * Init categories. + * + * Initialize the element categories. + * + * @since 1.7.12 + * @access private + */ + private function initCategories() + { + $this->categories = [ + 'basic' => [ + 'title' => __('Basic'), + 'icon' => 'eicon-font', + ], + 'general' => [ + 'title' => __('General'), + 'icon' => 'eicon-font', + ], + 'premium' => [ + 'title' => __('Premium'), + 'icon' => 'fa fa-shopping-bag', + ], + 'theme-elements' => [ + 'title' => __('Site'), + 'active' => false, + ], + ]; + + /** + * When categories are registered. + * + * Fires after basic categories are registered, before PrestaShop + * category have been registered. + * + * This is where categories registered by external developers are + * added. + * + * @since 2.0.0 + * + * @param ElementsManager $this Elements manager instance. + */ + do_action('elementor/elements/categories_registered', $this); + } + + /** + * Require files. + * + * Require Elementor element base class and column, section and repeater + * elements. + * + * @since 1.0.0 + * @access private + */ + private function requireFiles() + { + require_once _CE_PATH_ . 'includes/base/element-base.php'; + + require _CE_PATH_ . 'includes/elements/column.php'; + require _CE_PATH_ . 'includes/elements/section.php'; + require _CE_PATH_ . 'includes/elements/repeater.php'; + } +} diff --git a/modules/creativeelements/includes/managers/index.php b/modules/creativeelements/includes/managers/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/includes/managers/index.php @@ -0,0 +1,8 @@ + 'SchemeColor', + 'typography' => 'SchemeTypography', + 'color-picker' => 'SchemeColorPicker', + ]; + + /** + * Register new scheme. + * + * Add a new scheme to the schemes list. The method creates a new scheme + * instance for any given scheme class and adds the scheme to the registered + * schemes list. + * + * @since 1.0.0 + * @access public + * + * @param string $scheme_class Scheme class name. + */ + public function registerScheme($scheme_class) + { + /** @var SchemeBase $scheme_instance */ + $scheme_instance = new $scheme_class(); + + $this->_registered_schemes[$scheme_instance::getType()] = $scheme_instance; + } + + /** + * Unregister scheme. + * + * Removes a scheme from the list of registered schemes. + * + * @since 1.0.0 + * @access public + * + * @param string $id Scheme ID. + * + * @return bool True if the scheme was removed, False otherwise. + */ + public function unregisterScheme($id) + { + if (!isset($this->_registered_schemes[$id])) { + return false; + } + unset($this->_registered_schemes[$id]); + return true; + } + + /** + * Get registered schemes. + * + * Retrieve the registered schemes list from the current instance. + * + * @since 1.0.0 + * @access public + * + * @return SchemeBase[] Registered schemes. + */ + public function getRegisteredSchemes() + { + return $this->_registered_schemes; + } + + /** + * Get schemes data. + * + * Retrieve all the registered schemes with data for each scheme. + * + * @since 1.0.0 + * @access public + * + * @return array Registered schemes with each scheme data. + */ + public function getRegisteredSchemesData() + { + $data = []; + + foreach ($this->getRegisteredSchemes() as $scheme) { + $data[$scheme::getType()] = [ + 'title' => $scheme->getTitle(), + 'disabled_title' => $scheme->getDisabledTitle(), + 'items' => $scheme->getScheme(), + ]; + } + + return $data; + } + + /** + * Get default schemes. + * + * Retrieve all the registered schemes with default scheme for each scheme. + * + * @since 1.0.0 + * @access public + * + * @return array Registered schemes with with default scheme for each scheme. + */ + public function getSchemesDefaults() + { + $data = []; + + foreach ($this->getRegisteredSchemes() as $scheme) { + $data[$scheme::getType()] = [ + 'title' => $scheme->getTitle(), + 'items' => $scheme->getDefaultScheme(), + ]; + } + + return $data; + } + + /** + * Get system schemes. + * + * Retrieve all the registered schemes with system schemes for each scheme. + * + * @since 1.0.0 + * @access public + * + * @return array Registered schemes with with system scheme for each scheme. + */ + public function getSystemSchemes() + { + $data = []; + + foreach ($this->getRegisteredSchemes() as $scheme) { + $data[$scheme::getType()] = $scheme->getSystemSchemes(); + } + + return $data; + } + + /** + * Get scheme. + * + * Retrieve a single scheme from the list of all the registered schemes in + * the current instance. + * + * @since 1.0.0 + * @access public + * + * @param string $id Scheme ID. + * + * @return false|Scheme_Base Scheme instance if scheme exist, False otherwise. + */ + public function getScheme($id) + { + $schemes = $this->getRegisteredSchemes(); + + if (!isset($schemes[$id])) { + return false; + } + return $schemes[$id]; + } + + /** + * Get scheme value. + * + * Retrieve the scheme value from the list of all the registered schemes in + * the current instance. + * + * @since 1.0.0 + * @access public + * + * @param string $scheme_type Scheme type. + * @param string $scheme_value Scheme value. + * + * @return false|string Scheme value if scheme exist, False otherwise. + */ + public function getSchemeValue($scheme_type, $scheme_value) + { + $scheme = $this->getScheme($scheme_type); + if (!$scheme) { + return false; + } + + return $scheme->getSchemeValue()[$scheme_value]; + } + + /** + * Ajax apply scheme. + * + * Ajax handler for Elementor apply_scheme. + * + * Fired by `wp_ajax_elementor_apply_scheme` action. + * + * @since 1.0.0 + * @access public + */ + public function ajaxApplyScheme($data) + { + if (!User::isCurrentUserCanEditPostType(SourceLocal::CPT)) { + return false; + } + + if (!isset($data['scheme_name'])) { + return false; + } + + $scheme_obj = $this->getScheme($data['scheme_name']); + + if (!$scheme_obj) { + return false; + } + + $posted = json_decode($data['data'], true); + + $scheme_obj->saveScheme($posted); + + return true; + } + + /** + * Print schemes templates. + * + * Used to generate the scheme templates on the editor using Underscore JS + * template, for all the registered schemes. + * + * @since 1.0.0 + * @access public + */ + public function printSchemesTemplates() + { + foreach ($this->getRegisteredSchemes() as $scheme) { + $scheme->printTemplate(); + } + } + + /** + * @since 2.3.0 + * @access public + */ + public function registerAjaxActions(Ajax $ajax) + { + $ajax->registerAjaxAction('apply_scheme', [$this, 'ajax_apply_scheme']); + } + /** + * Get enabled schemes. + * + * Retrieve all enabled schemes from the list of the registered schemes in + * the current instance. + * + * @since 1.0.0 + * @access public + * @static + * + * @return array Enabled schemes. + */ + public static function getEnabledSchemes() + { + if (null === self::$_enabled_schemes) { + $enabled_schemes = []; + + foreach (self::$_schemes_types as $schemes_type => $scheme_class) { + if (get_option('elementor_disable_' . $schemes_type . '_schemes')) { + continue; + } + $enabled_schemes[] = $schemes_type; + } + + /** + * Enabled schemes. + * + * Filters the list of enabled schemes. + * + * @since 1.0.0 + * + * @param array $enabled_schemes The list of enabled schemes. + */ + $enabled_schemes = apply_filters('elementor/schemes/enabled_schemes', $enabled_schemes); + + self::$_enabled_schemes = $enabled_schemes; + } + return self::$_enabled_schemes; + } + + /** + * Register default schemes. + * + * Add a default schemes to the register schemes list. + * + * This method is used to set initial schemes when initializing the class. + * + * @since 1.7.12 + * @access private + */ + private function registerDefaultSchemes() + { + foreach (self::$_schemes_types as $schemes_class) { + $this->registerScheme(__NAMESPACE__ . '\\' . $schemes_class); + } + } + + /** + * Schemes manager constructor. + * + * Initializing Elementor schemes manager and register default schemes. + * + * @since 1.0.0 + * @access public + */ + public function __construct() + { + $this->registerDefaultSchemes(); + + add_action('elementor/ajax/register_actions', [$this, 'register_ajax_actions']); + } +} diff --git a/modules/creativeelements/includes/managers/skins.php b/modules/creativeelements/includes/managers/skins.php new file mode 100644 index 00000000..408d6326 --- /dev/null +++ b/modules/creativeelements/includes/managers/skins.php @@ -0,0 +1,123 @@ +getName(); + + if (!isset($this->_skins[$widget_name])) { + $this->_skins[$widget_name] = []; + } + + $this->_skins[$widget_name][$skin->getId()] = $skin; + + return true; + } + + /** + * Remove a skin. + * + * Unregister an existing skin from a widget. + * + * @since 1.0.0 + * @access public + * + * @param WidgetBase $widget Elementor widget. + * @param string $skin_id Elementor skin ID. + * + * @return true|WPError True if skin removed, `WP_Error` otherwise. + */ + public function removeSkin(WidgetBase $widget, $skin_id) + { + $widget_name = $widget->getName(); + + if (!isset($this->_skins[$widget_name][$skin_id])) { + return new WPError('Cannot remove not-exists skin.'); + } + + unset($this->_skins[$widget_name][$skin_id]); + + return true; + } + + /** + * Get skins. + * + * Retrieve all the skins assigned for a specific widget. + * + * @since 1.0.0 + * @access public + * + * @param WidgetBase $widget Elementor widget. + * + * @return false|array Skins if the widget has skins, False otherwise. + */ + public function getSkins(WidgetBase $widget) + { + $widget_name = $widget->getName(); + + if (!isset($this->_skins[$widget_name])) { + return false; + } + + return $this->_skins[$widget_name]; + } + + /** + * Skins manager constructor. + * + * Initializing Elementor skins manager by requiring the skin base class. + * + * @since 1.0.0 + * @access public + */ + public function __construct() + { + require _CE_PATH_ . 'includes/base/skin-base.php'; + } +} diff --git a/modules/creativeelements/includes/managers/widgets.php b/modules/creativeelements/includes/managers/widgets.php new file mode 100644 index 00000000..17b37346 --- /dev/null +++ b/modules/creativeelements/includes/managers/widgets.php @@ -0,0 +1,459 @@ +_widget_types = []; + + foreach ($build_widgets_filename as $widget_filename) { + include _CE_PATH_ . 'includes/widgets/' . $widget_filename . '.php'; + + $class_name = str_replace('-', '', $widget_filename); + + $class_name = __NAMESPACE__ . '\Widget' . $class_name; + + $this->registerWidgetType(new $class_name()); + } + + // $this->registerWpWidgets(); + + /** + * After widgets registered. + * + * Fires after Elementor widgets are registered. + * + * @since 1.0.0 + * + * @param WidgetsManager $this The widgets manager. + */ + do_action('elementor/widgets/widgets_registered', $this); + } + + // private function registerWpWidgets(); + + /** + * Require files. + * + * Require Elementor widget base class. + * + * @since 2.0.0 + * @access private + */ + private function requireFiles() + { + require _CE_PATH_ . 'includes/base/widget-base.php'; + require _CE_PATH_ . 'includes/base/widget-product-base.php'; + require _CE_PATH_ . 'includes/base/widget-category-base.php'; + require _CE_PATH_ . 'includes/traits/carousel.php'; + require _CE_PATH_ . 'includes/traits/nav.php'; + } + + /** + * Register widget type. + * + * Add a new widget type to the list of registered widget types. + * + * @since 1.0.0 + * @access public + * + * @param WidgetBase $widget Elementor widget. + * + * @return true True if the widget was registered. + */ + public function registerWidgetType(WidgetBase $widget) + { + if (is_null($this->_widget_types)) { + $this->initWidgets(); + } + + $this->_widget_types[$widget->getName()] = $widget; + + return true; + } + + /** + * Unregister widget type. + * + * Removes widget type from the list of registered widget types. + * + * @since 1.0.0 + * @access public + * + * @param string $name Widget name. + * + * @return true True if the widget was unregistered, False otherwise. + */ + public function unregisterWidgetType($name) + { + if (!isset($this->_widget_types[$name])) { + return false; + } + + unset($this->_widget_types[$name]); + + return true; + } + + /** + * Get widget types. + * + * Retrieve the registered widget types list. + * + * @since 1.0.0 + * @access public + * + * @param string $widget_name Optional. Widget name. Default is null. + * + * @return WidgetBase|Widget_Base[]|null Registered widget types. + */ + public function getWidgetTypes($widget_name = null) + { + if (is_null($this->_widget_types)) { + $this->initWidgets(); + } + + if (null !== $widget_name) { + return isset($this->_widget_types[$widget_name]) ? $this->_widget_types[$widget_name] : null; + } + + return $this->_widget_types; + } + + /** + * Get widget types config. + * + * Retrieve all the registered widgets with config for each widgets. + * + * @since 1.0.0 + * @access public + * + * @return array Registered widget types with each widget config. + */ + public function getWidgetTypesConfig() + { + $config = []; + + foreach ($this->getWidgetTypes() as $widget_key => $widget) { + $config[$widget_key] = $widget->getConfig(); + } + + return $config; + } + + public function ajaxGetWidgetTypesControlsConfig(array $data) + { + $config = []; + + foreach ($this->getWidgetTypes() as $widget_key => $widget) { + if (isset($data['exclude'][$widget_key])) { + continue; + } + + $config[$widget_key] = [ + 'controls' => $widget->getStack(false)['controls'], + 'tabs_controls' => $widget->getTabsControls(), + ]; + } + + return $config; + } + + /** + * Ajax render widget. + * + * Ajax handler for Elementor render_widget. + * + * @since 1.0.0 + * @access public + * + * @throws \Exception If current user don't have permissions to edit the post. + * + * @return array { + * Rendered widget. + * + * @type string $render The rendered HTML. + * } + */ + public function ajaxRenderWidget() + { + setup_postdata(\Tools::getValue('editor_post_id')); + $requests = json_decode(${'_POST'}['actions'], true); + $response = []; + $document = Plugin::$instance->documents->get(UId::$_ID); + + if (!$document->isEditableByCurrentUser()) { + throw new \Exception('Access denied.', Exceptions::FORBIDDEN); + } + + $editor = Plugin::$instance->editor; + $editor->setEditMode(true); + + Plugin::$instance->documents->switchToDocument($document); + + foreach ($requests as $action => &$request) { + try { + $response[$action] = $document->renderElement($request['data']); + } catch (\Exception $ex) { + $response[$action] = $ex->getMessage(); + + if (_PS_MODE_DEV_) { + $response[$action] .= " ({$ex->getFile()}:{$ex->getLine()})"; + } + } + } + + return $response; + } + + // public function ajaxGetWpWidgetForm($request); + + /** + * Render widgets content. + * + * Used to generate the widget templates on the editor using Underscore JS + * template, for all the registered widget types. + * + * @since 1.0.0 + * @access public + */ + public function renderWidgetsContent() + { + foreach ($this->getWidgetTypes() as $widget) { + $widget->printTemplate(); + } + } + + /** + * Get widgets frontend settings keys. + * + * Retrieve frontend controls settings keys for all the registered widget + * types. + * + * @since 1.3.0 + * @access public + * + * @return array Registered widget types with settings keys for each widget. + */ + public function getWidgetsFrontendSettingsKeys() + { + $keys = []; + + foreach ($this->getWidgetTypes() as $widget_type_name => $widget_type) { + $widget_type_keys = $widget_type->getFrontendSettingsKeys(); + + if ($widget_type_keys) { + $keys[$widget_type_name] = $widget_type_keys; + } + } + + return $keys; + } + + /** + * Enqueue widgets scripts. + * + * Enqueue all the scripts defined as a dependency for each widget. + * + * @since 1.3.0 + * @access public + */ + public function enqueueWidgetsScripts() + { + foreach ($this->getWidgetTypes() as $widget) { + $widget->enqueueScripts(); + } + } + + /** + * Retrieve inline editing configuration. + * + * Returns general inline editing configurations like toolbar types etc. + * + * @access public + * @since 1.8.0 + * + * @return array { + * Inline editing configuration. + * + * @type array $toolbar { + * Toolbar types and the actions each toolbar includes. + * Note: Wysiwyg controls uses the advanced toolbar, textarea controls + * uses the basic toolbar and text controls has no toolbar. + * + * @type array $basic Basic actions included in the edit tool. + * @type array $advanced Advanced actions included in the edit tool. + * } + * } + */ + public function getInlineEditingConfig() + { + $basic_tools = [ + 'bold', + 'underline', + 'italic', + ]; + + $advanced_tools = array_merge($basic_tools, [ + 'createlink', + 'unlink', + 'h1' => [ + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'p', + 'blockquote', + 'pre', + ], + 'list' => [ + 'insertOrderedList', + 'insertUnorderedList', + ], + ]); + + return [ + 'toolbar' => [ + 'basic' => $basic_tools, + 'advanced' => $advanced_tools, + ], + ]; + } + + /** + * Widgets manager constructor. + * + * Initializing Elementor widgets manager. + * + * @since 1.0.0 + * @access public + */ + public function __construct() + { + $this->requireFiles(); + + add_action('elementor/ajax/register_actions', [$this, 'register_ajax_actions']); + } + + /** + * Register ajax actions. + * + * Add new actions to handle data after an ajax requests returned. + * + * @since 2.0.0 + * @access public + * + * @param Ajax $ajax_manager + */ + public function registerAjaxActions(Ajax $ajax_manager) + { + // $ajax_manager->registerAjaxAction('render_widget', [$this, 'ajax_render_widget']); + // $ajax_manager->registerAjaxAction('editor_get_wp_widget_form', [$this, 'ajax_get_wp_widget_form']); + $ajax_manager->registerAjaxAction('get_widgets_config', [$this, 'ajax_get_widget_types_controls_config']); + } +} diff --git a/modules/creativeelements/includes/plugin.php b/modules/creativeelements/includes/plugin.php new file mode 100644 index 00000000..b8e8ff1c --- /dev/null +++ b/modules/creativeelements/includes/plugin.php @@ -0,0 +1,482 @@ +addCptSupport(); + + $this->initComponents(); + + /** + * Elementor init. + * + * Fires on Elementor init, after Elementor has finished loading but + * before any headers are sent. + * + * @since 1.0.0 + */ + do_action('elementor/init'); + + \Hook::exec('actionCreativeElementsInit'); + } + + // public function onRestApiInit(); + + /** + * Init components. + * + * Initialize Elementor components. Register actions, run setting manager, + * initialize all the components that run elementor, and if in admin page + * initialize admin components. + * + * @since 1.0.0 + * @access private + */ + private function initComponents() + { + // $this->inspector = new Inspector(); + // $this->debugger = $this->inspector; + + SettingsManager::run(); + + $this->db = new DB(); + $this->controls_manager = new ControlsManager(); + $this->documents = new DocumentsManager(); + $this->schemes_manager = new SchemesManager(); + $this->elements_manager = new ElementsManager(); + $this->widgets_manager = new WidgetsManager(); + $this->skins_manager = new SkinsManager(); + $this->files_manager = new FilesManager(); + // $this->settings = new Settings(); + // $this->tools = new Tools(); + $this->editor = new Editor(); + $this->preview = new Preview(); + $this->frontend = new Frontend(); + $this->templates_manager = new TemplateLibraryXManager(); + // $this->maintenance_mode = new MaintenanceMode(); + $this->dynamic_tags = new DynamicTagsManager(); + $this->modules_manager = new ModulesManager(); + // $this->role_manager = new Core\RoleManager\Role_Manager(); + // $this->system_info = new System_Info\Main(); + $this->revisions_manager = new RevisionsManager(); + + User::init(); + Api::init(); + // Tracker::init(); + + // $this->upgrade = new Core\Upgrade\Manager(); + + if (is_admin()) { + $this->heartbeat = new Heartbeat(); + // $this->wordpress_widgets_manager = new WordPressWidgetsManager(); + // $this->admin = new Admin(); + // $this->beta_testers = new BetaTesters(); + + // if (Utils::isAjax()) { + // new ImagesManager(); + // } + $this->initCommon(); + } + } + + /** + * @since 2.3.0 + * @access public + */ + public function initCommon() + { + $this->common = new CommonApp(); + + $this->common->initComponents(); + } + + // private function addCptSupport() + + /** + * Register autoloader. + * + * Elementor autoloader loads all the classes needed to run the plugin. + * + * @since 1.6.0 + * @access private + */ + private function registerAutoloader() + { + require _CE_PATH_ . '/includes/autoloader.php'; + + Autoloader::run(); + } + + /** + * Plugin constructor. + * + * Initializing Elementor plugin. + * + * @since 1.0.0 + * @access private + */ + private function __construct() + { + $this->registerAutoloader(); + + // $this->logger = LogManager::instance(); + + // Maintenance::init(); + // Compatibility::registerActions(); + + add_action('init', [$this, 'init'], 0); + // add_action('rest_api_init', [$this, 'on_rest_api_init']); + } +} diff --git a/modules/creativeelements/includes/preview.php b/modules/creativeelements/includes/preview.php new file mode 100644 index 00000000..c65d7c36 --- /dev/null +++ b/modules/creativeelements/includes/preview.php @@ -0,0 +1,267 @@ +isPreviewMode()) { + return; + } + + $this->post_id = \CreativeElements::getPreviewUId(); + + add_action('wp_enqueue_scripts', function () { + ${'this'}->enqueueStyles(); + ${'this'}->enqueueScripts(); + }); + + add_filter('the_content', [$this, 'builder_wrapper'], 999999); + + add_action('wp_footer', [$this, 'wp_footer']); + + /** + * Preview init. + * + * Fires on Elementor preview init, after Elementor preview has finished + * loading but before any headers are sent. + * + * @since 1.0.0 + * + * @param Preview $this The current preview. + */ + do_action('elementor/preview/init', $this); + } + + /** + * Retrieve post ID. + * + * Get the ID of the current post. + * + * @since 1.8.0 + * @access public + * + * @return int Post ID. + */ + public function getPostId() + { + return $this->post_id; + } + + /** + * Whether preview mode is active. + * + * Used to determine whether we are in the preview mode. + * + * @since 1.0.0 + * @access public + * + * @param int $post_id Optional. Post ID. Default is `0`. + * + * @return bool Whether preview mode is active. + */ + public function isPreviewMode($post_id = 0) + { + if (empty($post_id)) { + // $post_id = get_the_ID(); + $post_id = \CreativeElements::getPreviewUId(false); + } + + if (!User::isCurrentUserCanEdit($post_id)) { + return false; + } + + // if (!isset($_GET['elementor-preview']) || $post_id != $_GET['elementor-preview']) { + if (!isset(${'_GET'}['preview_id']) || $post_id != ${'_GET'}['preview_id'] || !isset(${'_GET'}['ver'])) { + return false; + } + + return true; + } + + /** + * Builder wrapper. + * + * Used to add an empty HTML wrapper for the builder, the javascript will add + * the content later. + * + * @since 1.0.0 + * @access public + * + * @param string $content The content of the builder. + * + * @return string HTML wrapper for the builder. + */ + public function builderWrapper($content) + { + if (UId::$_ID == $this->post_id) { + $document = Plugin::$instance->documents->get($this->post_id); + + $attributes = $document->getContainerAttributes(); + $attributes['id'] = 'elementor'; + $attributes['class'] .= ' elementor-edit-mode'; + + $content = '
'; + } + + return $content; + } + + /** + * Enqueue preview styles. + * + * Registers all the preview styles and enqueues them. + * + * Fired by `wp_enqueue_scripts` action. + * + * @since 1.0.0 + * @access private + */ + private function enqueueStyles() + { + // Hold-on all jQuery plugins after all HTML markup render. + // wp_add_inline_script('jquery-migrate', 'jQuery.holdReady( true );'); + + Plugin::$instance->frontend->enqueueStyles(); + + $suffix = _PS_MODE_DEV_ ? '' : '.min'; + + $direction_suffix = is_rtl() ? '-rtl' : ''; + + wp_register_style( + 'elementor-select2', + _CE_ASSETS_URL_ . 'lib/e-select2/css/e-select2' . $suffix . '.css', + [], + '4.0.6-rc1' + ); + + wp_register_style( + 'editor-preview', + _CE_ASSETS_URL_ . 'css/editor-preview' . $direction_suffix . $suffix . '.css', + ['elementor-select2'], + _CE_VERSION_ + ); + + wp_enqueue_style('editor-preview'); + + /** + * Preview enqueue styles. + * + * Fires after Elementor preview styles are enqueued. + * + * @since 1.0.0 + */ + do_action('elementor/preview/enqueue_styles'); + } + + /** + * Enqueue preview scripts. + * + * Registers all the preview scripts and enqueues them. + * + * Fired by `wp_enqueue_scripts` action. + * + * @since 1.5.4 + * @access private + */ + private function enqueueScripts() + { + Plugin::$instance->frontend->registerScripts(); + + Plugin::$instance->widgets_manager->enqueueWidgetsScripts(); + + $suffix = _PS_MODE_DEV_ ? '' : '.min'; + + wp_enqueue_script( + 'elementor-inline-editor', + _CE_ASSETS_URL_ . 'lib/inline-editor/js/inline-editor' . $suffix . '.js', + [], + _CE_VERSION_, + true + ); + + /** + * Preview enqueue scripts. + * + * Fires after Elementor preview scripts are enqueued. + * + * @since 1.5.4 + */ + do_action('elementor/preview/enqueue_scripts'); + } + + /** + * Elementor Preview footer scripts and styles. + * + * Handle styles and scripts from frontend. + * + * Fired by `wp_footer` action. + * + * @since 2.0.9 + * @access public + */ + public function wpFooter() + { + $frontend = Plugin::$instance->frontend; + if ($frontend->hasElementorInPage()) { + // Has header/footer/widget-template - enqueue all style/scripts/fonts. + $frontend->wpFooter(); + } else { + // Enqueue only scripts. + $frontend->enqueueScripts(); + } + } + + /** + * Preview constructor. + * + * Initializing Elementor preview. + * + * @since 1.0.0 + * @access public + */ + public function __construct() + { + add_action('template_redirect', [$this, 'init'], 0); + } +} diff --git a/modules/creativeelements/includes/schemes/base.php b/modules/creativeelements/includes/schemes/base.php new file mode 100644 index 00000000..cf3efe2a --- /dev/null +++ b/modules/creativeelements/includes/schemes/base.php @@ -0,0 +1,191 @@ +_system_schemes) { + $this->_system_schemes = $this->_initSystemSchemes(); + } + + return $this->_system_schemes; + } + + /** + * Get scheme value. + * + * Retrieve the scheme value. + * + * @since 1.0.0 + * @access public + * + * @return string Scheme value. + */ + public function getSchemeValue() + { + $scheme_value = get_option('elementor_scheme_' . static::getType()); + + if (!$scheme_value) { + $scheme_value = $this->getDefaultScheme(); + + update_option('elementor_scheme_' . static::getType(), $scheme_value); + } + + return $scheme_value; + } + + /** + * Save scheme. + * + * Update Elementor scheme in the database, and update the last updated + * scheme time. + * + * @since 1.0.0 + * @access public + * + * @param array $posted + */ + public function saveScheme(array $posted) + { + $scheme_value = $this->getSchemeValue(); + + update_option('elementor_scheme_' . static::getType(), array_replace($scheme_value, array_intersect_key($posted, $scheme_value))); + + update_option(self::LAST_UPDATED_META, time()); + } + + /** + * Get scheme. + * + * Retrieve the scheme. + * + * @since 1.0.0 + * @access public + * + * @return array The scheme. + */ + public function getScheme() + { + $scheme = []; + + $titles = $this->getSchemeTitles(); + + foreach ($this->getSchemeValue() as $scheme_key => $scheme_value) { + $scheme[$scheme_key] = [ + 'title' => isset($titles[$scheme_key]) ? $titles[$scheme_key] : '', + 'value' => $scheme_value, + ]; + } + + return $scheme; + } + + /** + * Print scheme template. + * + * Used to generate the scheme template on the editor using Underscore JS + * template. + * + * @since 1.0.0 + * @access public + */ + final public function printTemplate() + { + ?> + + '#4054b2', + self::COLOR_6 => '#23a455', + self::COLOR_7 => '#000', + self::COLOR_8 => '#fff', + ]); + } + + /** + * Get color picker scheme titles. + * + * Retrieve the color picker scheme titles. + * + * @since 1.0.0 + * @access public + * + * @return array Color picker scheme titles. + */ + public function getSchemeTitles() + { + return []; + } + + /** + * Init system color picker schemes. + * + * Initialize the system color picker schemes. + * + * @since 1.0.0 + * @access protected + * + * @return array System color picker schemes. + */ + protected function _initSystemSchemes() + { + $schemes = parent::_initSystemSchemes(); + + $additional_schemes = [ + 'joker' => [ + 'items' => [ + self::COLOR_5 => '#4b4646', + self::COLOR_6 => '#e2e2e2', + ], + ], + 'ocean' => [ + 'items' => [ + self::COLOR_5 => '#154d80', + self::COLOR_6 => '#8c8c8c', + ], + ], + 'royal' => [ + 'items' => [ + self::COLOR_5 => '#ac8e4d', + self::COLOR_6 => '#e2cea1', + ], + ], + 'violet' => [ + 'items' => [ + self::COLOR_5 => '#9c9ea6', + self::COLOR_6 => '#c184d0', + ], + ], + 'sweet' => [ + 'items' => [ + self::COLOR_5 => '#41aab9', + self::COLOR_6 => '#ffc72f', + ], + ], + 'urban' => [ + 'items' => [ + self::COLOR_5 => '#aa4039', + self::COLOR_6 => '#94dbaf', + ], + ], + 'earth' => [ + 'items' => [ + self::COLOR_5 => '#aa6666', + self::COLOR_6 => '#efe5d9', + ], + ], + 'river' => [ + 'items' => [ + self::COLOR_5 => '#7b8c93', + self::COLOR_6 => '#eb6d65', + ], + ], + 'pastel' => [ + 'items' => [ + self::COLOR_5 => '#f5a46c', + self::COLOR_6 => '#6e6f71', + ], + ], + ]; + + $schemes = array_replace_recursive($schemes, $additional_schemes); + + foreach ($schemes as &$scheme) { + $scheme['items'] += [ + self::COLOR_7 => '#000', + self::COLOR_8 => '#fff', + ]; + } + + return $schemes; + } + + /** + * Get system color picker schemes to print. + * + * Retrieve the system color picker schemes + * + * @since 1.0.0 + * @access protected + * + * @return string The system color picker schemes. + */ + protected function _getSystemSchemesToPrint() + { + $schemes = $this->getSystemSchemes(); + + $items_to_print = [ + self::COLOR_1, + self::COLOR_5, + self::COLOR_2, + self::COLOR_3, + self::COLOR_6, + self::COLOR_4, + ]; + + $items_to_print = array_flip($items_to_print); + + foreach ($schemes as $scheme_key => $scheme) { + $schemes[$scheme_key]['items'] = array_replace($items_to_print, array_intersect_key($scheme['items'], $items_to_print)); + } + + return $schemes; + } + + /** + * Get current color picker scheme title. + * + * Retrieve the current color picker scheme title. + * + * @since 1.0.0 + * @access protected + * + * @return string The current color picker scheme title. + */ + protected function _getCurrentSchemeTitle() + { + return __('Color Picker'); + } +} diff --git a/modules/creativeelements/includes/schemes/color.php b/modules/creativeelements/includes/schemes/color.php new file mode 100644 index 00000000..11d1e58a --- /dev/null +++ b/modules/creativeelements/includes/schemes/color.php @@ -0,0 +1,301 @@ + __('Primary'), + self::COLOR_2 => __('Secondary'), + self::COLOR_3 => __('Text'), + self::COLOR_4 => __('Accent'), + ]; + } + + /** + * Get default color scheme. + * + * Retrieve the default color scheme. + * + * @since 1.0.0 + * @access public + * + * @return array Default color scheme. + */ + public function getDefaultScheme() + { + return [ + self::COLOR_1 => '#6ec1e4', + self::COLOR_2 => '#54595f', + self::COLOR_3 => '#7a7a7a', + self::COLOR_4 => '#61ce70', + ]; + } + + /** + * Print color scheme content template. + * + * Used to generate the HTML in the editor using Underscore JS template. The + * variables for the class are available using `data` JS object. + * + * @since 1.0.0 + * @access public + */ + public function printTemplateContent() + { + ?> +
+
+
_getCurrentSchemeTitle() ?>
+
+ + + +
+ +
+
+
+
+
+
+
+ _getSystemSchemesToPrint() as $scheme_name => $scheme) : ?> +
+
+ +
+ +
+
+
+ +
+
+ [ + 'title' => 'Joker', + 'items' => [ + self::COLOR_1 => '#202020', + self::COLOR_2 => '#b7b4b4', + self::COLOR_3 => '#707070', + self::COLOR_4 => '#f6121c', + ], + ], + 'ocean' => [ + 'title' => 'Ocean', + 'items' => [ + self::COLOR_1 => '#1569ae', + self::COLOR_2 => '#b6c9db', + self::COLOR_3 => '#545454', + self::COLOR_4 => '#fdd247', + ], + ], + 'royal' => [ + 'title' => 'Royal', + 'items' => [ + self::COLOR_1 => '#d5ba7f', + self::COLOR_2 => '#902729', + self::COLOR_3 => '#ae4848', + self::COLOR_4 => '#302a8c', + ], + ], + 'violet' => [ + 'title' => 'Violet', + 'items' => [ + self::COLOR_1 => '#747476', + self::COLOR_2 => '#ebca41', + self::COLOR_3 => '#6f1683', + self::COLOR_4 => '#a43cbd', + ], + ], + 'sweet' => [ + 'title' => 'Sweet', + 'items' => [ + self::COLOR_1 => '#6ccdd9', + self::COLOR_2 => '#763572', + self::COLOR_3 => '#919ca7', + self::COLOR_4 => '#f12184', + ], + ], + 'urban' => [ + 'title' => 'Urban', + 'items' => [ + self::COLOR_1 => '#db6159', + self::COLOR_2 => '#3b3b3b', + self::COLOR_3 => '#7a7979', + self::COLOR_4 => '#2abf64', + ], + ], + 'earth' => [ + 'title' => 'Earth', + 'items' => [ + self::COLOR_1 => '#882021', + self::COLOR_2 => '#c48e4c', + self::COLOR_3 => '#825e24', + self::COLOR_4 => '#e8c12f', + ], + ], + 'river' => [ + 'title' => 'River', + 'items' => [ + self::COLOR_1 => '#8dcfc8', + self::COLOR_2 => '#565656', + self::COLOR_3 => '#50656e', + self::COLOR_4 => '#dc5049', + ], + ], + 'pastel' => [ + 'title' => 'Pastel', + 'items' => [ + self::COLOR_1 => '#f27f6f', + self::COLOR_2 => '#f4cd78', + self::COLOR_3 => '#a5b3c1', + self::COLOR_4 => '#aac9c3', + ], + ], + ]; + } + + /** + * Get system color schemes to print. + * + * Retrieve the system color schemes + * + * @since 1.0.0 + * @access protected + * + * @return string The system color schemes. + */ + protected function _getSystemSchemesToPrint() + { + return $this->getSystemSchemes(); + } + + /** + * Get current color scheme title. + * + * Retrieve the current color scheme title. + * + * @since 1.0.0 + * @access protected + * + * @return string The current color scheme title. + */ + protected function _getCurrentSchemeTitle() + { + return __('Color Palette'); + } +} diff --git a/modules/creativeelements/includes/schemes/index.php b/modules/creativeelements/includes/schemes/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/includes/schemes/index.php @@ -0,0 +1,8 @@ + __('Primary Headline'), + self::TYPOGRAPHY_2 => __('Secondary Headline'), + self::TYPOGRAPHY_3 => __('Body Text'), + self::TYPOGRAPHY_4 => __('Accent Text'), + ]; + } + + public function getDefaultScheme() + { + return [ + self::TYPOGRAPHY_1 => [ + 'font_family' => 'Roboto', + 'font_weight' => '600', + ], + self::TYPOGRAPHY_2 => [ + 'font_family' => 'Roboto Slab', + 'font_weight' => '400', + ], + self::TYPOGRAPHY_3 => [ + 'font_family' => 'Roboto', + 'font_weight' => '400', + ], + self::TYPOGRAPHY_4 => [ + 'font_family' => 'Roboto', + 'font_weight' => '500', + ], + ]; + } + + protected function _initSystemSchemes() + { + return []; + } + + public function printTemplateContent() + { + ?> +
+ [ + 'title' => _x('Mountains', 'Shapes'), + 'has_flip' => true, + ], + 'drops' => [ + 'title' => _x('Drops', 'Shapes'), + 'has_negative' => true, + 'has_flip' => true, + 'height_only' => true, + ], + 'clouds' => [ + 'title' => _x('Clouds', 'Shapes'), + 'has_negative' => true, + 'has_flip' => true, + 'height_only' => true, + ], + 'zigzag' => [ + 'title' => _x('Zigzag', 'Shapes'), + ], + 'pyramids' => [ + 'title' => _x('Pyramids', 'Shapes'), + 'has_negative' => true, + 'has_flip' => true, + ], + 'triangle' => [ + 'title' => _x('Triangle', 'Shapes'), + 'has_negative' => true, + ], + 'triangle-asymmetrical' => [ + 'title' => _x('Triangle Asymmetrical', 'Shapes'), + 'has_negative' => true, + 'has_flip' => true, + ], + 'tilt' => [ + 'title' => _x('Tilt', 'Shapes'), + 'has_flip' => true, + 'height_only' => true, + ], + 'opacity-tilt' => [ + 'title' => _x('Tilt Opacity', 'Shapes'), + 'has_flip' => true, + ], + 'opacity-fan' => [ + 'title' => _x('Fan Opacity', 'Shapes'), + ], + 'curve' => [ + 'title' => _x('Curve', 'Shapes'), + 'has_negative' => true, + ], + 'curve-asymmetrical' => [ + 'title' => _x('Curve Asymmetrical', 'Shapes'), + 'has_negative' => true, + 'has_flip' => true, + ], + 'waves' => [ + 'title' => _x('Waves', 'Shapes'), + 'has_negative' => true, + 'has_flip' => true, + ], + 'wave-brush' => [ + 'title' => _x('Waves Brush', 'Shapes'), + 'has_flip' => true, + ], + 'waves-pattern' => [ + 'title' => _x('Waves Pattern', 'Shapes'), + 'has_flip' => true, + ], + 'arrow' => [ + 'title' => _x('Arrow', 'Shapes'), + 'has_negative' => true, + ], + 'split' => [ + 'title' => _x('Split', 'Shapes'), + 'has_negative' => true, + ], + 'book' => [ + 'title' => _x('Book', 'Shapes'), + 'has_negative' => true, + ], + ]; + + self::$shapes = array_merge($native_shapes, self::getAdditionalShapes()); + } + + /** + * Get Additional Shapes + * + * Used to add custom shapes to elementor. + * + * @since 2.5.0 + * + * @return array + */ + private static function getAdditionalShapes() + { + static $additional_shapes = null; + + if (null !== $additional_shapes) { + return $additional_shapes; + } + $additional_shapes = []; + /** + * Additional shapes. + * + * Filters the shapes used by Elementor to add additional shapes. + * + * @since 2.0.1 + * + * @param array $additional_shapes Additional Elementor shapes. + */ + $additional_shapes = apply_filters('elementor/shapes/additional_shapes', $additional_shapes); + return $additional_shapes; + } + + /** + * Get Additional Shapes For Config + * + * Used to set additional shape paths for editor + * + * @since 2.5.0 + * + * @return array|bool + */ + public static function getAdditionalShapesForConfig() + { + $additional_shapes = self::getAdditionalShapes(); + if (empty($additional_shapes)) { + return false; + } + + $additional_shapes_config = []; + foreach ($additional_shapes as $shape_name => $shape_settings) { + if (!isset($shape_settings['url'])) { + continue; + } + $additional_shapes_config[$shape_name] = $shape_settings['url']; + } + + if (empty($additional_shapes_config)) { + return false; + } + + return $additional_shapes_config; + } +} diff --git a/modules/creativeelements/includes/stylesheet.php b/modules/creativeelements/includes/stylesheet.php new file mode 100644 index 00000000..56642f58 --- /dev/null +++ b/modules/creativeelements/includes/stylesheet.php @@ -0,0 +1,457 @@ + $properties) { + $selector_content = self::parseProperties($properties); + + if ($selector_content) { + $parsed_rules .= $selector . '{' . $selector_content . '}'; + } + } + + return $parsed_rules; + } + + /** + * Parse CSS properties. + * + * Goes over the selector properties and generates the CSS of the selector. + * + * @since 1.0.0 + * @access public + * @static + * + * @param array $properties CSS properties. + * + * @return string Parsed properties. + */ + public static function parseProperties(array $properties) + { + $parsed_properties = ''; + + foreach ($properties as $property_key => $property_value) { + if ('' !== $property_value) { + $parsed_properties .= $property_key . ':' . $property_value . ';'; + } + } + + return $parsed_properties; + } + + /** + * Add device. + * + * Add a new device to the devices list. + * + * @since 1.0.0 + * @access public + * + * @param string $device_name Device name. + * @param string $device_max_point Device maximum point. + * + * @return Stylesheet The current stylesheet class instance. + */ + public function addDevice($device_name, $device_max_point) + { + $this->devices[$device_name] = $device_max_point; + + asort($this->devices); + + return $this; + } + + /** + * Add rules. + * + * Add a new CSS rule to the rules list. + * + * @since 1.0.0 + * @access public + * + * @param string $selector CSS selector. + * @param array|string $style_rules Optional. Style rules. Default is `null`. + * @param array $query Optional. Media query. Default is `null`. + * + * @return Stylesheet The current stylesheet class instance. + */ + public function addRules($selector, $style_rules = null, array $query = null) + { + $query_hash = 'all'; + + if ($query) { + $query_hash = $this->queryToHash($query); + } + + if (!isset($this->rules[$query_hash])) { + $this->addQueryHash($query_hash); + } + + if (null === $style_rules) { + preg_match_all('/([^\s].+?(?=\{))\{((?s:.)+?(?=}))}/', $selector, $parsed_rules); + + foreach ($parsed_rules[1] as $index => $selector) { + $this->addRules($selector, $parsed_rules[2][$index], $query); + } + + return $this; + } + + if (!isset($this->rules[$query_hash][$selector])) { + $this->rules[$query_hash][$selector] = []; + } + + if (is_string($style_rules)) { + $style_rules = array_filter(explode(';', trim($style_rules))); + + $ordered_rules = []; + + foreach ($style_rules as $rule) { + $property = explode(':', $rule, 2); + + if (count($property) < 2) { + return $this; + } + + $ordered_rules[trim($property[0])] = trim($property[1], ' ;'); + } + + $style_rules = $ordered_rules; + } + + $this->rules[$query_hash][$selector] = array_merge($this->rules[$query_hash][$selector], $style_rules); + + return $this; + } + + /** + * Add raw CSS. + * + * Add a raw CSS rule. + * + * @since 1.0.8 + * @access public + * + * @param string $css The raw CSS. + * @param string $device Optional. The device. Default is empty. + * + * @return Stylesheet The current stylesheet class instance. + */ + public function addRawCss($css, $device = '') + { + if (!isset($this->raw[$device])) { + $this->raw[$device] = []; + } + + $this->raw[$device][] = trim($css); + + return $this; + } + + /** + * Get CSS rules. + * + * Retrieve the CSS rules. + * + * @since 1.0.5 + * @access public + * + * @param string $device Optional. The device. Default is empty. + * @param string $selector Optional. CSS selector. Default is empty. + * @param string $property Optional. CSS property. Default is empty. + * + * @return null|array CSS rules, or `null` if not rules found. + */ + public function getRules($device = null, $selector = null, $property = null) + { + if (!$device) { + return $this->rules; + } + + if ($property) { + return isset($this->rules[$device][$selector][$property]) ? $this->rules[$device][$selector][$property] : null; + } + + if ($selector) { + return isset($this->rules[$device][$selector]) ? $this->rules[$device][$selector] : null; + } + + return isset($this->rules[$device]) ? $this->rules[$device] : null; + } + + /** + * To string. + * + * This magic method responsible for parsing the rules into one CSS string. + * + * @since 1.0.0 + * @access public + * + * @return string CSS style. + */ + public function __toString() + { + $style_text = ''; + + foreach ($this->rules as $query_hash => $rule) { + $device_text = self::parseRules($rule); + + if ('all' !== $query_hash) { + $device_text = $this->getQueryHashStyleFormat($query_hash) . '{' . $device_text . '}'; + } + + $style_text .= $device_text; + } + + foreach ($this->raw as $device_name => $raw) { + $raw = implode("\n", $raw); + + if ($raw && isset($this->devices[$device_name])) { + $raw = '@media(max-width: ' . $this->devices[$device_name] . 'px){' . $raw . '}'; + } + + $style_text .= $raw; + } + + return $style_text; + } + + /** + * Get device maximum value. + * + * Retrieve the maximum size of any given device. + * + * @since 1.2.0 + * @access private + * + * @throws \RangeException If max value for this device is out of range. + * + * @param string $device_name Device name. + * + * @return int + */ + private function getDeviceMaxValue($device_name) + { + $devices_names = array_keys($this->devices); + + $device_name_index = array_search($device_name, $devices_names); + + $next_index = $device_name_index + 1; + + if ($next_index >= count($devices_names)) { + throw new \RangeException('Max value for this device is out of range.'); + } + + return $this->devices[$devices_names[$next_index]] - 1; + } + + /** + * Query to hash. + * + * Turns the media query into a hashed string that represents the query + * endpoint in the rules list. + * + * @since 1.2.0 + * @access private + * + * @param array $query CSS media query. + * + * @return string Hashed string of the query. + */ + private function queryToHash(array $query) + { + $hash = []; + + foreach ($query as $endpoint => $value) { + $hash[] = $endpoint . '_' . $value; + } + + return implode('-', $hash); + } + + /** + * Hash to query. + * + * Turns the hashed string to an array that contains the data of the query + * endpoint. + * + * @since 1.2.0 + * @access private + * + * @param string $hash Hashed string of the query. + * + * @return array Media query data. + */ + private function hashToQuery($hash) + { + $query = []; + + $hash = array_filter(explode('-', $hash)); + + foreach ($hash as $single_query) { + $query_parts = explode('_', $single_query); + + $end_point = $query_parts[0]; + + $device_name = $query_parts[1]; + + $query[$end_point] = 'max' === $end_point ? $this->getDeviceMaxValue($device_name) : $this->devices[$device_name]; + } + + return $query; + } + + /** + * Add query hash. + * + * Register new endpoint query and sort the rules the way they should be + * displayed in the final stylesheet based on the device and the viewport + * width. + * + * @since 1.2.0 + * @access private + * + * @param string $query_hash Hashed string of the query. + */ + private function addQueryHash($query_hash) + { + $this->rules[$query_hash] = []; + + uksort($this->rules, function ($a, $b) { + if ('all' === $a) { + return -1; + } + + if ('all' === $b) { + return 1; + } + + $a_query = ${'this'}->hashToQuery($a); + $b_query = ${'this'}->hashToQuery($b); + + if (isset($a_query['min']) xor isset($b_query['min'])) { + return 1; + } + + if (isset($a_query['min'])) { + $range = $a_query['min'] - $b_query['min']; + + if ($range) { + return $range; + } + + $a_has_max = isset($a_query['max']); + + if ($a_has_max xor isset($b_query['max'])) { + return $a_has_max ? 1 : -1; + } + + if (!$a_has_max) { + return 0; + } + } + + return $b_query['max'] - $a_query['max']; + }); + } + + /** + * Get query hash style format. + * + * Retrieve formated media query rule with the endpoint width settings. + * + * The method returns the CSS `@media` rule and supported viewport width in + * pixels. It can also handel multiple width endpoints. + * + * @since 1.2.0 + * @access private + * + * @param string $query_hash The hash of the query. + * + * @return string CSS media query. + */ + private function getQueryHashStyleFormat($query_hash) + { + $query = $this->hashToQuery($query_hash); + + $style_format = []; + + foreach ($query as $end_point => $value) { + $style_format[] = '(' . $end_point . '-width:' . $value . 'px)'; + } + + return '@media' . implode(' and ', $style_format); + } +} diff --git a/modules/creativeelements/includes/template-library/classes/class-import-images.php b/modules/creativeelements/includes/template-library/classes/class-import-images.php new file mode 100644 index 00000000..0cf35d83 --- /dev/null +++ b/modules/creativeelements/includes/template-library/classes/class-import-images.php @@ -0,0 +1,97 @@ + 1) { + // Get filename with subdir + $filename = $cms[1]; + } else { + $filename = basename($url); + + if (self::PLACEHOLDER == $filename) { + // Do not import placeholder + return self::$imported[$url] = false; + } + } + + $file_content = wp_remote_get($url); + if (empty($file_content)) { + // Image isn't available + return self::$imported[$url] = false; + } + + $file_info = pathinfo($filename); + if (!in_array(\Tools::strToLower($file_info['extension']), $allowed_ext)) { + // Image extension isn't allowed + return self::$imported[$url] = false; + } + + if ($file_info['dirname'] !== '.' && !is_dir(_PS_IMG_DIR_ . self::DIR . $file_info['dirname'])) { + // Create subdir + if (!@mkdir(_PS_IMG_DIR_ . self::DIR . $file_info['dirname'], 0775, true)) { + // Can not create subdir + $filename = $file_info['basename']; + } + } + + $file_path = _PS_IMG_DIR_ . self::DIR . $filename; + if (file_exists($file_path)) { + // Filename already exists + $existing_content = \Tools::file_get_contents($file_path); + + if ($file_content === $existing_content) { + // Same image already exists + return self::$imported[$url] = [ + 'id' => 0, + 'url' => basename(_PS_IMG_) . '/' . self::DIR . $filename, + ]; + } + + // Add unique filename + $dirname = $file_info['dirname'] !== '.' && $filename !== $file_info['basename'] ? $file_info['dirname'] . '/' : ''; + $filename = $dirname . $file_info['filename'] . '_' . Utils::generateRandomString() . '.' . $file_info['extension']; + $file_path = _PS_IMG_DIR_ . self::DIR . $filename; + } + + if (!file_put_contents($file_path, $file_content)) { + // Image saved successfuly + return self::$imported[$url] = [ + 'id' => 0, + 'url' => basename(_PS_IMG_) . '/' . self::DIR . $filename, + ]; + } + + // Fallback + return $attachment; + } +} diff --git a/modules/creativeelements/includes/template-library/classes/index.php b/modules/creativeelements/includes/template-library/classes/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/includes/template-library/classes/index.php @@ -0,0 +1,8 @@ +registerDefaultSources(); + + $this->addActions(); + } + + /** + * @since 2.3.0 + * @access public + */ + public function addActions() + { + add_action('elementor/ajax/register_actions', [$this, 'register_ajax_actions']); + add_action('wp_ajax_elementor_library_direct_actions', [$this, 'handle_direct_actions']); + + // TODO: bc since 2.3.0 + add_action('wp_ajax_elementor_update_templates', function () { + if (!isset(${'_POST'}['templates'])) { + return; + } + + foreach (${'_POST'}['templates'] as &$template) { + if (!isset($template['content'])) { + return; + } + + $template['content'] = call_user_func('stripslashes', $template['content']); + } + + wp_send_json_success(${'this'}->handleAjaxRequest('update_templates', ${'_POST'})); + }); + } + + /** + * Get `Import_Images` instance. + * + * Retrieve the instance of the `Import_Images` class. + * + * @since 1.0.0 + * @access public + * + * @return ImportImages Imported images instance. + */ + public function getImportImagesInstance() + { + if (null === $this->_import_images) { + $this->_import_images = new ImportImages(); + } + + return $this->_import_images; + } + + /** + * Register template source. + * + * Used to register new template sources displayed in the template library. + * + * @since 1.0.0 + * @access public + * + * @param string $source_class The name of source class. + * @param array $args Optional. Class arguments. Default is an + * empty array. + * + * @return WPError|true True if the source was registered, `WP_Error` + * otherwise. + */ + public function registerSource($source_class, $args = []) + { + if (!class_exists($source_class)) { + return new WPError('source_class_name_not_exists'); + } + + $source_instance = new $source_class($args); + + if (!$source_instance instanceof SourceBase) { + return new WPError('wrong_instance_source'); + } + $this->_registered_sources[$source_instance->getId()] = $source_instance; + + return true; + } + + /** + * Unregister template source. + * + * Remove an existing template sources from the list of registered template + * sources. + * + * @since 1.0.0 + * @access public + * + * @param string $id The source ID. + * + * @return bool Whether the source was unregistered. + */ + public function unregisterSource($id) + { + if (!isset($this->_registered_sources[$id])) { + return false; + } + + unset($this->_registered_sources[$id]); + + return true; + } + + /** + * Get registered template sources. + * + * Retrieve registered template sources. + * + * @since 1.0.0 + * @access public + * + * @return SourceBase[] Registered template sources. + */ + public function getRegisteredSources() + { + return $this->_registered_sources; + } + + /** + * Get template source. + * + * Retrieve single template sources for a given template ID. + * + * @since 1.0.0 + * @access public + * + * @param string $id The source ID. + * + * @return false|Source_Base Template sources if one exist, False otherwise. + */ + public function getSource($id) + { + $sources = $this->getRegisteredSources(); + + if (!isset($sources[$id])) { + return false; + } + + return $sources[$id]; + } + + /** + * Get templates. + * + * Retrieve all the templates from all the registered sources. + * + * @since 1.0.0 + * @access public + * + * @return array Templates array. + */ + public function getTemplates() + { + $templates = []; + + foreach ($this->getRegisteredSources() as $source) { + $templates = array_merge($templates, $source->getItems()); + } + + return $templates; + } + + /** + * Get library data. + * + * Retrieve the library data. + * + * @since 1.9.0 + * @access public + * + * @param array $args Library arguments. + * + * @return array Library data. + */ + public function getLibraryData(array $args) + { + $library_data = Api::getLibraryData(!empty($args['sync'])); + + return [ + 'templates' => $this->getTemplates(), + 'config' => $library_data['types_data'], + ]; + } + + /** + * Save template. + * + * Save new or update existing template on the database. + * + * @since 1.0.0 + * @access public + * + * @param array $args Template arguments. + * + * @return WPError|int The ID of the saved/updated template. + */ + public function saveTemplate(array $args) + { + $validate_args = $this->ensureArgs(['post_id', 'source', 'content', 'type'], $args); + + if (is_wp_error($validate_args)) { + return $validate_args; + } + + $source = $this->getSource($args['source']); + + if (!$source) { + return new WPError('template_error', 'Template source not found.'); + } + + $args['content'] = json_decode($args['content'], true); + + $page = SettingsManager::getSettingsManagers('page')->getModel($args['post_id']); + + $args['page_settings'] = $page->getData('settings'); + + $template_id = $source->saveItem($args); + + if (is_wp_error($template_id)) { + return $template_id; + } + + return $source->getItem($template_id); + } + + /** + * Update template. + * + * Update template on the database. + * + * @since 1.0.0 + * @access public + * + * @param array $template_data New template data. + * + * @return WPError|Source_Base Template sources instance if the templates + * was updated, `WP_Error` otherwise. + */ + public function updateTemplate(array $template_data) + { + $validate_args = $this->ensureArgs(['source', 'content', 'type'], $template_data); + + if (is_wp_error($validate_args)) { + return $validate_args; + } + + $source = $this->getSource($template_data['source']); + + if (!$source) { + return new WPError('template_error', 'Template source not found.'); + } + + $template_data['content'] = json_decode($template_data['content'], true); + + $update = $source->updateItem($template_data); + + if (is_wp_error($update)) { + return $update; + } + + return $source->getItem($template_data['id']); + } + + /** + * Update templates. + * + * Update template on the database. + * + * @since 1.0.0 + * @access public + * + * @param array $args Template arguments. + * + * @return WPError|true True if templates updated, `WP_Error` otherwise. + */ + public function updateTemplates(array $args) + { + foreach ($args['templates'] as $template_data) { + $result = $this->updateTemplate($template_data); + + if (is_wp_error($result)) { + return $result; + } + } + + return true; + } + + /** + * Get template data. + * + * Retrieve the template data. + * + * @since 1.5.0 + * @access public + * + * @param array $args Template arguments. + * + * @return WPError|bool|array ?? + */ + public function getTemplateData(array $args) + { + $validate_args = $this->ensureArgs(['source', 'template_id'], $args); + + if (is_wp_error($validate_args)) { + return $validate_args; + } + + if (isset($args['edit_mode'])) { + Plugin::$instance->editor->setEditMode($args['edit_mode']); + } + + $source = $this->getSource($args['source']); + + if (!$source) { + return new WPError('template_error', 'Template source not found.'); + } + + do_action('elementor/template-library/before_get_source_data', $args, $source); + + $data = $source->getData($args); + + do_action('elementor/template-library/after_get_source_data', $args, $source); + + return $data; + } + + /** + * Delete template. + * + * Delete template from the database. + * + * @since 1.0.0 + * @access public + * + * @param array $args Template arguments. + * + * @return WPPost|WPError|false|null Post data on success, false or null + * or 'WP_Error' on failure. + */ + public function deleteTemplate(array $args) + { + $validate_args = $this->ensureArgs(['source', 'template_id'], $args); + + if (is_wp_error($validate_args)) { + return $validate_args; + } + + $source = $this->getSource($args['source']); + + if (!$source) { + return new WPError('template_error', 'Template source not found.'); + } + + return $source->deleteTemplate($args['template_id']); + } + + /** + * Export template. + * + * Export template to a file. + * + * @since 1.0.0 + * @access public + * + * @param array $args Template arguments. + * + * @return mixed Whether the export succeeded or failed. + */ + public function exportTemplate(array $args) + { + $validate_args = $this->ensureArgs(['source', 'template_id'], $args); + + if (is_wp_error($validate_args)) { + return $validate_args; + } + + $source = $this->getSource($args['source']); + + if (!$source) { + return new WPError('template_error', 'Template source not found'); + } + + return $source->exportTemplate($args['template_id']); + } + + /** + * @since 2.3.0 + * @access public + */ + public function directImportTemplate() + { + /** @var SourceLocal $source */ + $source = $this->getSource('local'); + + return $source->importTemplate($_FILES['file']['name'], $_FILES['file']['tmp_name']); + } + + /** + * Import template. + * + * Import template from a file. + * + * @since 1.0.0 + * @access public + * + * @param array $data + * + * @return mixed Whether the export succeeded or failed. + */ + public function importTemplate(array $data) + { + /** @var SourceLocal $source */ + $file_content = call_user_func('base64_decode', $data['fileData']); + + $tmp_file = tmpfile(); + + fwrite($tmp_file, $file_content); + + $source = $this->getSource('local'); + + $result = $source->importTemplate($data['fileName'], stream_get_meta_data($tmp_file)['uri']); + + fclose($tmp_file); + + return $result; + } + + /** + * Mark template as favorite. + * + * Add the template to the user favorite templates. + * + * @since 1.9.0 + * @access public + * + * @param array $args Template arguments. + * + * @return mixed Whether the template marked as favorite. + */ + public function markTemplateAsFavorite($args) + { + unset($args['editor_post_id']); + + $validate_args = $this->ensureArgs(['source', 'template_id', 'favorite'], $args); + + if (is_wp_error($validate_args)) { + return $validate_args; + } + + $source = $this->getSource($args['source']); + + return $source->markAsFavorite($args['template_id'], filter_var($args['favorite'], FILTER_VALIDATE_BOOLEAN)); + } + + /** + * Register default template sources. + * + * Register the 'local' and 'remote' template sources that Elementor use by + * default. + * + * @since 1.0.0 + * @access private + */ + private function registerDefaultSources() + { + $sources = [ + 'local', + 'remote', + ]; + + foreach ($sources as $source_filename) { + $class_name = ucwords($source_filename); + $class_name = str_replace('-', '_', $class_name); + + $this->registerSource(__NAMESPACE__ . '\TemplateLibraryXSource' . $class_name); + } + } + + /** + * Handle ajax request. + * + * Fire authenticated ajax actions for any given ajax request. + * + * @since 1.0.0 + * @access private + * + * @param string $ajax_request Ajax request. + * + * @param array $data + * + * @return mixed + * @throws \Exception + */ + private function handleAjaxRequest($ajax_request, array $data) + { + if (!User::isCurrentUserCanEditPostType(SourceLocal::CPT)) { + throw new \Exception('Access Denied'); + } + + if (!empty($data['editor_post_id'])) { + $editor_post_id = absint($data['editor_post_id']); + + if (!get_post($editor_post_id)) { + throw new \Exception(__('Post not found.')); + } + + Plugin::$instance->db->switchToPost($editor_post_id); + } + + $result = call_user_func([$this, \Tools::toCamelCase($ajax_request)], $data); + + if (is_wp_error($result)) { + throw new \Exception($result->getErrorMessage()); + } + + return $result; + } + + /** + * Init ajax calls. + * + * Initialize template library ajax calls for allowed ajax requests. + * + * @since 2.3.0 + * @access public + * + * @param Ajax $ajax + */ + public function registerAjaxActions(Ajax $ajax) + { + $library_ajax_requests = [ + 'get_library_data', + 'get_template_data', + 'save_template', + 'update_templates', + 'delete_template', + 'import_template', + 'mark_template_as_favorite', + ]; + + foreach ($library_ajax_requests as $ajax_request) { + $ajax->registerAjaxAction($ajax_request, function ($data) use ($ajax_request) { + return ${'this'}->handleAjaxRequest($ajax_request, $data); + }); + } + } + + /** + * @since 2.3.0 + * @access public + */ + public function handleDirectActions() + { + if (!User::isCurrentUserCanEditPostType(SourceLocal::CPT)) { + return; + } + + /** @var Ajax $ajax */ + // $ajax = Plugin::$instance->common->getComponent('ajax'); + + // if (!$ajax->verifyRequestNonce()) { + // $this->handleDirectActionError('Access Denied'); + // } + + $action = \Tools::toCamelCase(\Tools::getValue('library_action')); + + $result = $this->$action($_REQUEST); + + if (is_wp_error($result)) { + /** @var WPError $result */ + $this->handleDirectActionError($result->getErrorMessage() . '.'); + } + + $callback = "on{$action}Success"; + + if (method_exists($this, $callback)) { + $this->$callback($result); + } + + die; + } + + // private function onDirectImportTemplateSuccess() + + /** + * @since 2.3.0 + * @access private + */ + private function handleDirectActionError($message) + { + // _default_wp_die_handler($message, 'Elementor Library'); + wp_send_json_error('Elementor Library - ' . $message); + } + + /** + * Ensure arguments exist. + * + * Checks whether the required arguments exist in the specified arguments. + * + * @since 1.0.0 + * @access private + * + * @param array $required_args Required arguments to check whether they + * exist. + * @param array $specified_args The list of all the specified arguments to + * check against. + * + * @return WPError|true True on success, 'WP_Error' otherwise. + */ + private function ensureArgs(array $required_args, array $specified_args) + { + $not_specified_args = array_diff($required_args, array_keys(array_filter($specified_args))); + + if ($not_specified_args) { + return new WPError('arguments_not_specified', 'The required argument(s) `' . implode(', ', $not_specified_args) . '` not specified'); + } + + return true; + } +} diff --git a/modules/creativeelements/includes/template-library/sources/base.php b/modules/creativeelements/includes/template-library/sources/base.php new file mode 100644 index 00000000..061d7441 --- /dev/null +++ b/modules/creativeelements/includes/template-library/sources/base.php @@ -0,0 +1,380 @@ +registerData(); + } + + /** + * Mark template as favorite. + * + * Update user meta containing his favorite templates. For a given template + * ID, add the template to the favorite templates or remove it from the + * favorites, based on the `favorite` parameter. + * + * @since 1.9.0 + * @access public + * + * @param int $template_id The template ID. + * @param bool $favorite Optional. Whether the template is marked as + * favorite, or not. Default is true. + * + * @return int|bool User meta ID if the key didn't exist, true on successful + * update, false on failure. + */ + public function markAsFavorite($template_id, $favorite = true) + { + $favorites_templates = $this->getUserMeta('favorites'); + + if (!$favorites_templates) { + $favorites_templates = []; + } + + if ($favorite) { + $favorites_templates[$template_id] = $favorite; + } elseif (isset($favorites_templates[$template_id])) { + unset($favorites_templates[$template_id]); + } + + return $this->updateUserMeta('favorites', $favorites_templates); + } + + /** + * Get current user meta. + * + * Retrieve Elementor meta data for the current user. + * + * @since 1.9.0 + * @access public + * + * @param string $item Optional. User meta key. Default is null. + * + * @return null|array An array of user meta data, or null otherwise. + */ + public function getUserMeta($item = null) + { + if (null === $this->user_meta) { + $this->user_meta = get_user_meta(get_current_user_id(), $this->getUserMetaPrefix(), true); + } + + if (!$this->user_meta) { + $this->user_meta = []; + } + + if ($item) { + if (isset($this->user_meta[$item])) { + return $this->user_meta[$item]; + } + + return null; + } + + return $this->user_meta; + } + + /** + * Update current user meta. + * + * Update user meta data based on meta key an value. + * + * @since 1.9.0 + * @access public + * + * @param string $key Optional. User meta key. + * @param mixed $value Optional. User meta value. + * + * @return int|bool User meta ID if the key didn't exist, true on successful + * update, false on failure. + */ + public function updateUserMeta($key, $value) + { + $meta = $this->getUserMeta(); + + $meta[$key] = $value; + + $this->user_meta = $meta; + + return update_user_meta(get_current_user_id(), $this->getUserMetaPrefix(), $meta); + } + + /** + * Replace elements IDs. + * + * For any given Elementor content/data, replace the IDs with new randomly + * generated IDs. + * + * @since 1.0.0 + * @access protected + * + * @param array $content Any type of Elementor data. + * + * @return mixed Iterated data. + */ + protected function replaceElementsIds($content) + { + return Plugin::$instance->db->iterateData($content, function ($element) { + $element['id'] = Utils::generateRandomString(); + + return $element; + }); + } + + /** + * Get Elementor library user meta prefix. + * + * Retrieve user meta prefix used to save Elementor data. + * + * @since 1.9.0 + * @access protected + * + * @return string User meta prefix. + */ + protected function getUserMetaPrefix() + { + return 'elementor_library_' . $this->getId(); + } + + /** + * Process content for export/import. + * + * Process the content and all the inner elements, and prepare all the + * elements data for export/import. + * + * @since 1.5.0 + * @access protected + * + * @param array $content A set of elements. + * @param string $method Accepts either `onExport` to export data or + * `onImport` to import data. + * + * @return mixed Processed content data. + */ + protected function processExportImportContent($content, $method) + { + return Plugin::$instance->db->iterateData( + $content, + function ($element_data) use ($method) { + $element = Plugin::$instance->elements_manager->createElementInstance($element_data); + + // If the widget/element isn't exist, like a plugin that creates a widget but deactivated + if (!$element) { + return null; + } + + return ${'this'}->processElementExportImportContent($element, $method); + } + ); + } + + /** + * Process single element content for export/import. + * + * Process any given element and prepare the element data for export/import. + * + * @since 1.5.0 + * @access protected + * + * @param ControlsStack $element + * @param string $method + * + * @return array Processed element data. + */ + protected function processElementExportImportContent(ControlsStack $element, $method) + { + $element_data = $element->getData(); + + if (method_exists($element, $method)) { + // TODO: Use the internal element data without parameters. + $element_data = $element->{$method}($element_data); + } + + foreach ($element->getControls() as $control) { + $control_class = Plugin::$instance->controls_manager->getControl($control['type']); + + // If the control isn't exist, like a plugin that creates the control but deactivated. + if (!$control_class) { + return $element_data; + } + + if (method_exists($control_class, $method)) { + $element_data['settings'][$control['name']] = $control_class->{$method}($element->getSettings($control['name']), $control); + } + + // On Export, check if the control has an argument 'export' => false. + if ('onExport' === $method && isset($control['export']) && false === $control['export']) { + unset($element_data['settings'][$control['name']]); + } + } + + return $element_data; + } +} diff --git a/modules/creativeelements/includes/template-library/sources/index.php b/modules/creativeelements/includes/template-library/sources/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/includes/template-library/sources/index.php @@ -0,0 +1,8 @@ +template_type; + } + + // public static function isBaseTemplatesScreen() + + /** + * Add template type. + * + * Register new template type to the list of supported local template types. + * + * @since 1.0.3 + * @access public + * @static + * + * @param string $type Template type. + */ + public static function addTemplateType($type) + { + self::$template_types[$type] = $type; + } + + /** + * Remove template type. + * + * Remove existing template type from the list of supported local template + * types. + * + * @since 1.8.0 + * @access public + * @static + * + * @param string $type Template type. + */ + public static function removeTemplateType($type) + { + if (isset(self::$template_types[$type])) { + unset(self::$template_types[$type]); + } + } + + // public static function getAdminUrl($relative = false) + + /** + * Get local template ID. + * + * Retrieve the local template ID. + * + * @since 1.0.0 + * @access public + * + * @return string The local template ID. + */ + public function getId() + { + return 'local'; + } + + /** + * Get local template title. + * + * Retrieve the local template title. + * + * @since 1.0.0 + * @access public + * + * @return string The local template title. + */ + public function getTitle() + { + return __('Local'); + } + + // public function registerData() + + // public function adminMenuReorder() + + // public function adminMenu(); + + // public function adminTitle($admin_title, $title); + + // public function replaceAdminHeading(); + + /** + * Get local templates. + * + * Retrieve local templates saved by the user on his site. + * + * @since 1.0.0 + * @access public + * + * @param array $args Optional. Filter templates based on a set of + * arguments. Default is an empty array. + * + * @return array Local templates. + */ + public function getItems($args = []) + { + $templates = []; + $table = _DB_PREFIX_ . 'ce_template'; + $rows = \Db::getInstance()->executeS( + "SELECT id_ce_template, id_employee, title, type, date_add FROM $table WHERE active = 1 ORDER BY title ASC" + ); + if ($rows) { + foreach ($rows as &$row) { + $post = new \stdClass(); + $post->ID = new UId($row['id_ce_template'], UId::TEMPLATE); + $post->post_author = $row['id_employee']; + $post->post_date = $row['date_add']; + $post->post_title = $row['title']; + $post->template_type = $row['type']; + + $templates[] = $this->getItem($post); + } + } + + return $templates; + } + + /** + * Save local template. + * + * Save new or update existing template on the database. + * + * @since 1.0.0 + * @access public + * + * @param array $template_data Local template data. + * + * @return WPError|int The ID of the saved/updated template, `WP_Error` otherwise. + */ + public function saveItem($template_data) + { + $type = Plugin::$instance->documents->getDocumentType($template_data['type'], false); + + if (!$type) { + return new WPError('save_error', sprintf('Invalid template type "%s".', $template_data['type'])); + } + + // TODO: Work with the documents system. + if (!current_user_can('add', 'AdminCETemplates')) { + return new WPError('save_error', __('Access denied.')); + } + + $template_id = wp_insert_post([ + 'post_title' => !empty($template_data['title']) ? $template_data['title'] : __('(no title)'), + 'post_status' => 'publish', + 'post_type' => self::CPT, + 'template_type' => $template_data['type'], + ]); + + if (is_wp_error($template_id)) { + return $template_id; + } + + Plugin::$instance->db->setIsElementorPage($template_id); + + Plugin::$instance->db->saveEditor($template_id, $template_data['content']); + + // $this->saveItemType($template_id, $template_data['type']); + + if (!empty($template_data['page_settings'])) { + SettingsManager::getSettingsManagers('page')->saveSettings($template_data['page_settings'], $template_id); + } + + /** + * After template library save. + * + * Fires after Elementor template library was saved. + * + * @since 1.0.1 + * + * @param int $template_id The ID of the template. + * @param array $template_data The template data. + */ + do_action('elementor/template-library/after_save_template', $template_id, $template_data); + + /** + * After template library update. + * + * Fires after Elementor template library was updated. + * + * @since 1.0.1 + * + * @param int $template_id The ID of the template. + * @param array $template_data The template data. + */ + do_action('elementor/template-library/after_update_template', $template_id, $template_data); + + return $template_id; + } + + /** + * Update local template. + * + * Update template on the database. + * + * @since 1.0.0 + * @access public + * + * @param array $new_data New template data. + * + * @return WPError|true True if template updated, `WP_Error` otherwise. + */ + public function updateItem($new_data) + { + if (!current_user_can('edit', $new_data['id'])) { + return new WPError('save_error', __('Access denied.')); + } + + Plugin::$instance->db->saveEditor($new_data['id'], $new_data['content']); + + /** + * After template library update. + * + * Fires after Elementor template library was updated. + * + * @since 1.0.0 + * + * @param int $new_data_id The ID of the new template. + * @param array $new_data The new template data. + */ + do_action('elementor/template-library/after_update_template', $new_data['id'], $new_data); + + return true; + } + + /** + * Get local template. + * + * Retrieve a single local template saved by the user on his site. + * + * @since 1.0.0 + * @access public + * + * @param int|object $template_id The template ID. + * + * @return array Local template. + */ + public function getItem($template_id) + { + $post = is_object($template_id) ? $template_id : get_post($template_id); + + $user = get_user_by('id', $post->post_author); + + $page = SettingsManager::getSettingsManagers('page')->getModel($post->ID); + + $page_settings = $page->getData('settings'); + + $data = [ + 'template_id' => "$post->ID", + 'source' => $this->getId(), + 'type' => $post->template_type, + 'title' => $post->post_title, + // 'thumbnail' => get_the_post_thumbnail_url($post), + 'date' => strtotime($post->post_date), + 'human_date' => \Tools::displayDate($post->post_date), + 'author' => $user ? $user->display_name : __('Unknown'), + 'hasPageSettings' => !empty($page_settings), + 'tags' => [], + 'export_link' => $this->getExportLink($post->ID), + 'url' => get_preview_post_link($post->ID), + ]; + + /** + * Get template library template. + * + * Filters the template data when retrieving a single template from the + * template library. + * + * @since 1.0.0 + * + * @param array $data Template data. + */ + return apply_filters('elementor/template-library/get_template', $data); + } + + /** + * Get template data. + * + * Retrieve the data of a single local template saved by the user on his site. + * + * @since 1.5.0 + * @access public + * + * @param array $args Custom template arguments. + * + * @return array Local template data. + */ + public function getData(array $args) + { + $db = Plugin::$instance->db; + + $template_id = $args['template_id']; + + // TODO: Validate the data (in JS too!). + if (!empty($args['display'])) { + $content = $db->getBuilder($template_id); + } else { + $content = $db->getPlainEditor($template_id); + } + + if (!empty($content)) { + $content = $this->replaceElementsIds($content); + } + + $data = [ + 'content' => $content, + ]; + + if (!empty($args['page_settings'])) { + $page = SettingsManager::getSettingsManagers('page')->getModel($args['template_id']); + + $data['page_settings'] = $page->getData('settings'); + } + + return $data; + } + + /** + * Delete local template. + * + * Delete template from the database. + * + * @since 1.0.0 + * @access public + * + * @param int $template_id The template ID. + * + * @return WPPost|WPError|false|null Post data on success, false or null + * or 'WP_Error' on failure. + */ + public function deleteTemplate($template_id) + { + if (!current_user_can('delete', $template_id)) { + return new WPError('template_error', __('Access denied.')); + } + + return wp_delete_post($template_id, true) ? ['ID' => $template_id] : false; + } + + /** + * Export local template. + * + * Export template to a file. + * + * @since 1.0.0 + * @access public + * + * @param int $template_id The template ID. + * + * @return WPError Wrapper error if template export failed. + */ + public function exportTemplate($template_id) + { + $file_data = $this->prepareTemplateExport($template_id); + + if (is_wp_error($file_data)) { + return $file_data; + } + + $this->sendFileHeaders($file_data['name'], call_user_func('strlen', $file_data['content'])); + + // Clear buffering just in case. + @ob_end_clean(); + + flush(); + + // Output file contents. + echo $file_data['content']; + + die; + } + + /** + * Export multiple local templates. + * + * Export multiple template to a ZIP file. + * + * @since 1.6.0 + * @access public + * + * @param array $template_ids An array of template IDs. + * + * @return WPError Wrapper error if export failed. + */ + public function exportMultipleTemplates(array $template_ids) + { + $files = []; + + $temp_path = _PS_UPLOAD_DIR_; + + // Create temp path if it doesn't exist + @mkdir($temp_path, 0775, true); + + // Create all json files + foreach ($template_ids as $template_id) { + $file_data = $this->prepareTemplateExport($template_id); + + if (is_wp_error($file_data)) { + continue; + } + + $complete_path = $temp_path . $file_data['name']; + + $put_contents = file_put_contents($complete_path, $file_data['content']); + + if (!$put_contents) { + return new WPError('404', sprintf('Cannot create file "%s".', $file_data['name'])); + } + + $files[] = [ + 'path' => $complete_path, + 'name' => $file_data['name'], + ]; + } + + if (!$files) { + return new WPError('empty_files', 'There is no files to export (probably all the requested templates are empty).'); + } + + // Create temporary .zip file + $zip_archive_filename = 'CreativeElements_templates_' . date('Y-m-d') . '.zip'; + + $zip_archive = new \ZipArchive(); + + $zip_complete_path = $temp_path . $zip_archive_filename; + + $zip_archive->open($zip_complete_path, \ZipArchive::CREATE); + + foreach ($files as $file) { + $zip_archive->addFile($file['path'], $file['name']); + } + + $zip_archive->close(); + + foreach ($files as $file) { + unlink($file['path']); + } + + $this->sendFileHeaders($zip_archive_filename, filesize($zip_complete_path)); + + @ob_end_flush(); + + @readfile($zip_complete_path); + + unlink($zip_complete_path); + + die; + } + + /** + * Import local template. + * + * Import template from a file. + * + * @since 1.0.0 + * @access public + * + * @param string $name - The file name + * @param string $path - The file path + * + * @return WPError|array An array of items on success, 'WP_Error' on failure. + */ + public function importTemplate($name, $path) + { + if (empty($path)) { + return new WPError('file_error', 'Please upload a file to import'); + } + + $items = []; + + $file_extension = pathinfo($name, PATHINFO_EXTENSION); + + if ('zip' === $file_extension) { + if (!class_exists('\ZipArchive')) { + return new WPError('zip_error', 'PHP Zip extension not loaded'); + } + + $zip = new \ZipArchive(); + + $temp_path = _PS_UPLOAD_DIR_ . uniqid(); + + $zip->open($path); + $zip->extractTo($temp_path); + $zip->close(); + + $file_names = array_diff(scandir($temp_path), ['.', '..']); + + foreach ($file_names as $file_name) { + $full_file_name = $temp_path . '/' . $file_name; + + $import_result = $this->importSingleTemplate($full_file_name); + + unlink($full_file_name); + + if (is_wp_error($import_result)) { + return $import_result; + } + + $items[] = $import_result; + } + + rmdir($temp_path); + } else { + $import_result = $this->importSingleTemplate($path); + + if (is_wp_error($import_result)) { + return $import_result; + } + + $items[] = $import_result; + } + + return $items; + } + + // public function postRowActions($actions, WPPost $post) + + // public function adminImportTemplateForm(); + + // public function blockTemplateFrontend() + + /** + * Is template library supports export. + * + * whether the template library supports export. + * + * Template saved by the user locally on his site, support export by default + * but this can be changed using a filter. + * + * @since 1.0.0 + * @access public + * + * @param int $template_id The template ID. + * + * @return bool Whether the template library supports export. + */ + public function isTemplateSupportsExport($template_id) + { + $export_support = true; + + /** + * Is template library supports export. + * + * Filters whether the template library supports export. + * + * @since 1.0.0 + * + * @param bool $export_support Whether the template library supports export. + * Default is true. + * @param int $template_id Post ID. + */ + $export_support = apply_filters('elementor/template_library/is_template_supports_export', $export_support, $template_id); + + return $export_support; + } + + // public function removeElementorPostStateFromLibrary($post_states, $post) + + /** + * Get template export link. + * + * Retrieve the link used to export a single template based on the template + * ID. + * + * @since 2.0.0 + * @access private + * + * @param int $template_id The template ID. + * + * @return string Template export URL. + */ + private function getExportLink($template_id) + { + return \Context::getContext()->link->getAdminLink('AdminCEEditor') . '&' . http_build_query([ + 'ajax' => 1, + 'action' => 'elementor_library_direct_actions', + 'library_action' => 'export_template', + 'source' => $this->getId(), + 'template_id' => "$template_id", + ]); + } + + // public function onSavePost($post_id, WPPost $post) + + // private function saveItemType($post_id, $type) + + // public function adminAddBulkExportAction($actions) + + // public function adminExportMultipleTemplates($redirect_to, $action, $post_ids) + + // public function adminPrintTabs($views) + + // public function maybeRenderBlankState($which); + + // public function addFilterByCategory($post_type) + + /** + * Import single template. + * + * Import template from a file to the database. + * + * @since 1.6.0 + * @access private + * + * @param string $file_name File name. + * + * @return WPError|int|array Local template array, or template ID, or `WPError`. + */ + private function importSingleTemplate($file_name) + { + $data = json_decode(call_user_func('file_get_contents', $file_name), true); + + if (empty($data)) { + return new WPError('file_error', 'Invalid File'); + } + + if (isset($data['content'])) { + $content = $data['content']; + } elseif (isset($data['data'])) { + if (is_string($data['data'])) { + // iqit compatibility + $data['type'] = 'page'; + $content = json_decode($data['data'], true); + } else { + // retro compatibility + $content = $data['data']; + } + } + + if (!isset($content) || !is_array($content)) { + return new WPError('file_error', 'Invalid File'); + } + + $content = $this->processExportImportContent($content, 'onImport'); + + $page_settings = []; + + if (!empty($data['page_settings'])) { + // $page = new Model([ + // 'id' => 0, + // 'settings' => $data['page_settings'], + // ]); + + // $page_settings_data = $this->processElementExportImportContent($page, 'onImport'); + + // if (!empty($page_settings_data['settings'])) { + // $page_settings = $page_settings_data['settings']; + // } + $page_settings = $data['page_settings']; + } + + $template_id = $this->saveItem([ + 'content' => $content, + 'title' => $data['title'], + 'type' => $data['type'], + 'page_settings' => $page_settings, + ]); + + if (is_wp_error($template_id)) { + return $template_id; + } + + return $this->getItem($template_id); + } + + /** + * Prepare template to export. + * + * Retrieve the relevant template data and return them as an array. + * + * @since 1.6.0 + * @access private + * + * @param int $template_id The template ID. + * + * @return WPError|array Exported template data. + */ + private function prepareTemplateExport($template_id) + { + $template_data = $this->getData([ + 'template_id' => $template_id, + ]); + + if (empty($template_data['content'])) { + return new WPError('empty_template', 'The template is empty'); + } + + $template_data['content'] = $this->processExportImportContent($template_data['content'], 'onExport'); + + if (get_post_meta($template_id, '_elementor_page_settings', true)) { + $page = SettingsManager::getSettingsManagers('page')->getModel($template_id); + + $page_settings_data = $this->processElementExportImportContent($page, 'onExport'); + + if (!empty($page_settings_data['settings'])) { + $template_data['page_settings'] = $page_settings_data['settings']; + } + } + + $post = get_post($template_id); + $export_data = [ + 'version' => DB::DB_VERSION, + 'title' => $post->post_title, + 'type' => $post->template_type, + ]; + + $export_data += $template_data; + + return [ + 'name' => 'CreativeElements_' . $post->uid->id . '_' . date('Y-m-d') . '.json', + 'content' => json_encode($export_data), + ]; + } + + /** + * Send file headers. + * + * Set the file header when export template data to a file. + * + * @since 1.6.0 + * @access private + * + * @param string $file_name File name. + * @param int $file_size File size. + */ + private function sendFileHeaders($file_name, $file_size) + { + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename=' . $file_name); + header('Expires: 0'); + header('Cache-Control: must-revalidate'); + header('Pragma: public'); + header('Content-Length: ' . $file_size); + } + + /** + * Get template label by type. + * + * Retrieve the template label for any given template type. + * + * @since 2.0.0 + * @access private + * + * @param string $template_type Template type. + * + * @return string Template label. + */ + private function getTemplateLabelByType($template_type) + { + $document_types = Plugin::instance()->documents->getDocumentTypes(); + + if (isset($document_types[$template_type])) { + $template_label = call_user_func([$document_types[$template_type], 'get_title']); + } else { + $template_label = ucwords(str_replace(['_', '-'], ' ', $template_type)); + } + + /** + * Template label by template type. + * + * Filters the template label by template type in the template library . + * + * @since 2.0.0 + * + * @param string $template_label Template label. + * @param string $template_type Template type. + */ + $template_label = apply_filters('elementor/template-library/get_template_label_by_type', $template_label, $template_type); + + return $template_label; + } + + // public function adminQueryFilterTypes(\WPQuery $query) + + // private function addActions() + + // public function adminColumnsContent($column_name, $post_id) + + // public function adminColumnsHeaders($posts_columns) + + // private function getCurrentTabGroup($default = '') + + // private function getLibraryTitle() + + // private function isCurrentScreen() + + /** + * Template library local source constructor. + * + * Initializing the template library local source base by registering custom + * template data and running custom actions. + * + * @since 1.0.0 + * @access public + */ + public function __construct() + { + parent::__construct(); + + // $this->addActions(); + } +} diff --git a/modules/creativeelements/includes/template-library/sources/remote.php b/modules/creativeelements/includes/template-library/sources/remote.php new file mode 100644 index 00000000..70c0e07a --- /dev/null +++ b/modules/creativeelements/includes/template-library/sources/remote.php @@ -0,0 +1,233 @@ +prepareTemplate($template_data); + } + } + + return $templates; + } + + /** + * Get remote template. + * + * Retrieve a single remote template from Elementor.com servers. + * + * @since 1.0.0 + * @access public + * + * @param int $template_id The template ID. + * + * @return array Remote template. + */ + public function getItem($template_id) + { + $templates = $this->getItems(); + + return $templates[$template_id]; + } + + /** + * Save remote template. + * + * Remote template from Elementor.com servers cannot be saved on the + * database as they are retrieved from remote servers. + * + * @since 1.0.0 + * @access public + * + * @param array $template_data Remote template data. + * + * @return WPError + */ + public function saveItem($template_data) + { + return new WPError('invalid_request', 'Cannot save template to a remote source'); + } + + /** + * Update remote template. + * + * Remote template from Elementor.com servers cannot be updated on the + * database as they are retrieved from remote servers. + * + * @since 1.0.0 + * @access public + * + * @param array $new_data New template data. + * + * @return WPError + */ + public function updateItem($new_data) + { + return new WPError('invalid_request', 'Cannot update template to a remote source'); + } + + /** + * Delete remote template. + * + * Remote template from Elementor.com servers cannot be deleted from the + * database as they are retrieved from remote servers. + * + * @since 1.0.0 + * @access public + * + * @param int $template_id The template ID. + * + * @return WPError + */ + public function deleteTemplate($template_id) + { + return new WPError('invalid_request', 'Cannot delete template from a remote source'); + } + + /** + * Export remote template. + * + * Remote template from Elementor.com servers cannot be exported from the + * database as they are retrieved from remote servers. + * + * @since 1.0.0 + * @access public + * + * @param int $template_id The template ID. + * + * @return WPError + */ + public function exportTemplate($template_id) + { + return new WPError('invalid_request', 'Cannot export template from a remote source'); + } + + /** + * Get remote template data. + * + * Retrieve the data of a single remote template from Elementor.com servers. + * + * @since 1.5.0 + * @access public + * + * @param array $args Custom template arguments. + * @param string $context Optional. The context. Default is `display`. + * + * @return array Remote Template data. + */ + public function getData(array $args, $context = 'display') + { + $data = Api::getTemplateContent($args['template_id']); + + if (is_wp_error($data)) { + return $data; + } + + $data['content'] = $this->replaceElementsIds($data['content']); + $data['content'] = $this->processExportImportContent($data['content'], 'onImport'); + + $post_id = $args['editor_post_id']; + $document = Plugin::$instance->documents->get($post_id); + if ($document) { + $data['content'] = $document->getElementsRawData($data['content'], true); + } + + return $data; + } + + /** + * @since 2.2.0 + * @access private + */ + private function prepareTemplate(array $template_data) + { + $favorite_templates = $this->getUserMeta('favorites'); + + return [ + 'template_id' => $template_data['id'], + 'source' => $this->getId(), + 'type' => $template_data['type'], + 'subtype' => $template_data['subtype'], + 'title' => $template_data['title'], + 'thumbnail' => $template_data['thumbnail'], + 'date' => $template_data['tmpl_created'], + 'author' => $template_data['author'], + 'tags' => json_decode($template_data['tags']), + 'isPro' => ('1' === $template_data['is_pro']), + 'popularityIndex' => (int) $template_data['popularity_index'], + 'trendIndex' => (int) $template_data['trend_index'], + 'hasPageSettings' => ('1' === $template_data['has_page_settings']), + 'url' => $template_data['url'], + 'favorite' => !empty($favorite_templates[$template_data['id']]), + ]; + } +} diff --git a/modules/creativeelements/includes/traits/carousel.php b/modules/creativeelements/includes/traits/carousel.php new file mode 100644 index 00000000..4b4184fa --- /dev/null +++ b/modules/creativeelements/includes/traits/carousel.php @@ -0,0 +1,399 @@ + ''] : []; + + $self->startControlsSection( + 'section_additional_options', + [ + 'label' => __('Carousel'), + ] + ); + + $self->addControl( + 'default_slides_count', + [ + 'type' => ControlsManager::HIDDEN, + 'default' => (int) $default_slides_count, + 'frontend_available' => true, + ] + ); + + $slides_to_show = range(1, 10); + $slides_to_show = array_combine($slides_to_show, $slides_to_show); + + $self->addResponsiveControl( + 'slides_to_show', + [ + 'label' => __('Slides to Show'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Default'), + ] + $slides_to_show, + 'frontend_available' => true, + ] + ); + + $self->addResponsiveControl( + 'slides_to_scroll', + [ + 'label' => __('Slides to Scroll'), + 'type' => ControlsManager::SELECT, + 'description' => __('Set how many slides are scrolled per swipe.'), + 'options' => [ + '' => __('Default'), + ] + $slides_to_show, + 'condition' => [ + 'slides_to_show!' => '1', + 'center_mode' => '', + ] + $variable_width, + 'frontend_available' => true, + ] + ); + + $self->addControl( + 'center_mode', + [ + 'label' => __('Center Mode'), + 'type' => ControlsManager::SWITCHER, + 'frontend_available' => true, + ] + ); + + $self->addResponsiveControl( + 'center_padding', + [ + 'label' => __('Center Padding'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'default' => [ + 'size' => 50, + 'unit' => 'px', + ], + 'range' => [ + 'px' => [ + 'max' => 500, + ], + '%' => [ + 'max' => 50, + ], + ], + 'condition' => [ + 'center_mode!' => '', + ] + $variable_width, + 'frontend_available' => true, + ] + ); + + $self->addControl( + 'navigation', + [ + 'label' => __('Navigation'), + 'type' => ControlsManager::SELECT, + 'default' => 'both', + 'options' => [ + 'both' => __('Arrows and Dots'), + 'arrows' => __('Arrows'), + 'dots' => __('Dots'), + 'none' => __('None'), + ], + 'frontend_available' => true, + ] + ); + + $self->addControl( + 'additional_options', + [ + 'label' => __('Additional Options'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $self->addControl( + 'pause_on_hover', + [ + 'label' => __('Pause on Hover'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'frontend_available' => true, + ] + ); + + $self->addResponsiveControl( + 'autoplay', + [ + 'label' => __('Autoplay'), + 'type' => ControlsManager::SELECT, + 'default' => 'yes', + 'options' => [ + 'yes' => __('Yes'), + '' => __('No'), + ], + 'frontend_available' => true, + ] + ); + + $self->addControl( + 'autoplay_speed', + [ + 'label' => __('Autoplay Speed'), + 'type' => ControlsManager::NUMBER, + 'default' => 5000, + 'frontend_available' => true, + ] + ); + + $self->addResponsiveControl( + 'infinite', + [ + 'label' => __('Infinite Loop'), + 'type' => ControlsManager::SELECT, + 'default' => 'yes', + 'tablet_default' => 'yes', + 'mobile_default' => 'yes', + 'options' => [ + 'yes' => __('Yes'), + '' => __('No'), + ], + 'frontend_available' => true, + ] + ); + + $self->addControl( + 'effect', + [ + 'label' => __('Effect'), + 'type' => ControlsManager::SELECT, + 'default' => 'slide', + 'options' => [ + 'slide' => __('Slide'), + 'fade' => __('Fade'), + ], + 'condition' => [ + 'slides_to_show' => '1', + 'center_mode' => '', + ], + 'frontend_available' => true, + ] + ); + + $self->addControl( + 'speed', + [ + 'label' => __('Animation Speed'), + 'type' => ControlsManager::NUMBER, + 'default' => 500, + 'frontend_available' => true, + ] + ); + + $self->addControl( + 'direction', + [ + 'label' => __('Direction'), + 'type' => ControlsManager::SELECT, + 'default' => 'ltr', + 'options' => [ + 'ltr' => __('Left'), + 'rtl' => __('Right'), + ], + 'frontend_available' => true, + ] + ); + + $self->endControlsSection(); + } + + protected function registerNavigationStyleSection() + { + $self = ${'this'}; + + $self->startControlsSection( + 'section_style_navigation', + [ + 'label' => __('Navigation'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'navigation' => ['arrows', 'dots', 'both'], + ], + ] + ); + + $self->addControl( + 'heading_style_arrows', + [ + 'label' => __('Arrows'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + 'condition' => [ + 'navigation' => ['arrows', 'both'], + ], + ] + ); + + $self->addControl( + 'arrows_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'inside', + 'options' => [ + 'inside' => __('Inside'), + 'outside' => __('Outside'), + ], + 'condition' => [ + 'navigation' => ['arrows', 'both'], + ], + ] + ); + + $self->addResponsiveControl( + 'arrows_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 60, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-carousel-wrapper .slick-slider .slick-prev:before, {{WRAPPER}} .elementor-image-carousel-wrapper .slick-slider .slick-next:before' => 'font-size: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'navigation' => ['arrows', 'both'], + ], + ] + ); + + $self->addControl( + 'arrows_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-image-carousel-wrapper .slick-slider .slick-prev:before, {{WRAPPER}} .elementor-image-carousel-wrapper .slick-slider .slick-next:before' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'navigation' => ['arrows', 'both'], + ], + ] + ); + + $self->addControl( + 'heading_style_dots', + [ + 'label' => __('Dots'), + 'type' => ControlsManager::HEADING, + 'condition' => [ + 'navigation' => ['dots', 'both'], + ], + ] + ); + + $self->addControl( + 'dots_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'outside', + 'options' => [ + 'outside' => __('Outside'), + 'inside' => __('Inside'), + ], + 'condition' => [ + 'navigation' => ['dots', 'both'], + ], + ] + ); + + $self->addResponsiveControl( + 'dots_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 5, + 'max' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-carousel-wrapper .elementor-image-carousel .slick-dots li button:before' => 'font-size: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'navigation' => ['dots', 'both'], + ], + ] + ); + + $self->addControl( + 'dots_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-image-carousel-wrapper .elementor-image-carousel .slick-dots li button:before' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'navigation' => ['dots', 'both'], + ], + ] + ); + + $self->endControlsSection(); + } + + protected function renderCarousel(array &$settings, array &$slides) + { + if (empty($slides)) { + return; + } + $self = ${'this'}; + + $self->addRenderAttribute('carousel', 'class', 'elementor-image-carousel'); + + if ('none' !== $settings['navigation']) { + if ('dots' !== $settings['navigation']) { + $self->addRenderAttribute('carousel', 'class', 'slick-arrows-' . $settings['arrows_position']); + } + + if ('arrows' !== $settings['navigation']) { + $self->addRenderAttribute('carousel', 'class', 'slick-dots-' . $settings['dots_position']); + } + } + ?> + + addControl( + 'layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'default' => 'horizontal', + 'options' => &$layout_options, + 'frontend_available' => true, + 'separator' => 'before', + ] + ); + } else { + $self->addControl( + 'layout', + [ + 'type' => ControlsManager::HIDDEN, + 'default' => 'horizontal', + 'frontend_available' => true, + ] + ); + } + + $self->addControl( + 'align_items', + [ + 'label' => __('Align'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-h-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + 'justify' => [ + 'title' => __('Stretch'), + 'icon' => 'eicon-h-align-stretch', + ], + ], + 'prefix_class' => 'elementor-nav--align-', + 'condition' => [ + 'layout!' => 'dropdown', + ], + 'separator' => $layout_options ? '' : 'before', + ] + ); + + $self->addControl( + 'pointer', + [ + 'label' => __('Pointer'), + 'type' => ControlsManager::SELECT, + 'default' => 'underline', + 'options' => [ + 'none' => __('None'), + 'underline' => __('Underline'), + 'overline' => __('Overline'), + 'double-line' => __('Double Line'), + 'framed' => __('Framed'), + 'background' => __('Background'), + 'text' => __('Text'), + ], + 'condition' => [ + 'layout!' => 'dropdown', + ], + ] + ); + + $self->addControl( + 'animation_line', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'fade', + 'options' => [ + 'fade' => 'Fade', + 'slide' => 'Slide', + 'grow' => 'Grow', + 'drop-in' => 'Drop In', + 'drop-out' => 'Drop Out', + 'none' => 'None', + ], + 'condition' => [ + 'layout!' => 'dropdown', + 'pointer' => ['underline', 'overline', 'double-line'], + ], + ] + ); + + $self->addControl( + 'animation_framed', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'fade', + 'options' => [ + 'fade' => 'Fade', + 'grow' => 'Grow', + 'shrink' => 'Shrink', + 'draw' => 'Draw', + 'corners' => 'Corners', + 'none' => 'None', + ], + 'condition' => [ + 'layout!' => 'dropdown', + 'pointer' => 'framed', + ], + ] + ); + + $self->addControl( + 'animation_background', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'fade', + 'options' => [ + 'fade' => 'Fade', + 'grow' => 'Grow', + 'shrink' => 'Shrink', + 'sweep-left' => 'Sweep Left', + 'sweep-right' => 'Sweep Right', + 'sweep-up' => 'Sweep Up', + 'sweep-down' => 'Sweep Down', + 'shutter-in-vertical' => 'Shutter In Vertical', + 'shutter-out-vertical' => 'Shutter Out Vertical', + 'shutter-in-horizontal' => 'Shutter In Horizontal', + 'shutter-out-horizontal' => 'Shutter Out Horizontal', + 'none' => 'None', + ], + 'condition' => [ + 'layout!' => 'dropdown', + 'pointer' => 'background', + ], + ] + ); + + $self->addControl( + 'animation_text', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'grow', + 'options' => [ + 'grow' => 'Grow', + 'shrink' => 'Shrink', + 'sink' => 'Sink', + 'float' => 'Float', + 'skew' => 'Skew', + 'rotate' => 'Rotate', + 'none' => 'None', + ], + 'condition' => [ + 'layout!' => 'dropdown', + 'pointer' => 'text', + ], + ] + ); + + $indicator_options = [ + 'fa fa-caret-down' => 'classic', + 'fa fa-angle-down' => 'angle', + 'fa fa-chevron-down' => 'chevron', + 'fa fa-plus' => 'plus', + ]; + + $submenu_condition = isset($args['submenu_condition']) ? $args['submenu_condition'] : []; + + $self->addControl( + 'indicator', + [ + 'label' => __('Submenu Indicator'), + 'label_block' => false, + 'type' => ControlsManager::ICON, + 'default' => $self->indicator, + 'options' => &$indicator_options, + 'include' => array_keys($indicator_options), + 'condition' => $submenu_condition, + ] + ); + + if (isset($layout_options['dropdown'])) { + $submenu_condition['layout!'] = 'dropdown'; + } + + $self->addControl( + 'align_submenu', + [ + 'label' => __('Submenu Align'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'frontend_available' => true, + 'condition' => $submenu_condition, + ] + ); + + $self->addControl( + 'show_submenu_on', + [ + 'label' => __('Show Submenu'), + 'type' => ControlsManager::SELECT, + 'label_block' => false, + 'default' => 'hover', + 'options' => [ + 'hover' => __('On Hover'), + 'click' => __('On Click'), + ], + 'frontend_available' => true, + 'condition' => $submenu_condition, + ] + ); + } + + protected function registerNavStyleSection(array $args = []) + { + $self = ${'this'}; + $devices = isset($args['devices']) ? $args['devices'] : [ + 'desktop', + 'tablet', + 'mobile', + ]; + + $self->startControlsSection( + 'section_style_nav', + [ + 'label' => $self->getTitle(), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => isset($args['condition']) ? $args['condition'] : [], + ] + ); + + $self->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'menu_typography', + 'scheme' => empty($args['scheme']) ? null : SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-nav--main', + ] + ); + + $self->startControlsTabs('tabs_menu_item_style'); + + $self->startControlsTab( + 'tab_menu_item_normal', + [ + 'label' => __('Normal'), + ] + ); + + $self->addControl( + 'color_menu_item', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => empty($args['scheme']) ? null : [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--main a.elementor-item:not(#e)' => 'color: {{VALUE}}', + ], + ] + ); + + empty($args['show_icon']) or $self->addControl( + 'color_icon', + [ + 'label' => __('Icon Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-item > i' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $self->endControlsTab(); + + $self->startControlsTab( + 'tab_menu_item_hover', + [ + 'label' => __('Hover'), + ] + ); + + $self->addControl( + 'color_menu_item_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => empty($args['scheme']) ? null : [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--main a.elementor-item.elementor-item-active:not(#e), ' . + '{{WRAPPER}} .elementor-nav--main a.elementor-item.highlighted:not(#e), ' . + '{{WRAPPER}} .elementor-nav--main a.elementor-item:not(#e):hover, ' . + '{{WRAPPER}} .elementor-nav--main a.elementor-item:not(#e):focus' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'pointer!' => 'background', + ], + ] + ); + + empty($args['show_icon']) or $self->addControl( + 'color_icon_hover', + [ + 'label' => __('Icon Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-item:hover > i' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $self->addControl( + 'color_menu_item_hover_pointer_bg', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#fff', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--main a.elementor-item.elementor-item-active:not(#e), ' . + '{{WRAPPER}} .elementor-nav--main a.elementor-item.highlighted:not(#e), ' . + '{{WRAPPER}} .elementor-nav--main a.elementor-item:not(#e):hover, ' . + '{{WRAPPER}} .elementor-nav--main a.elementor-item:not(#e):focus' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'pointer' => 'background', + ], + ] + ); + + $self->addControl( + 'pointer_color_menu_item_hover', + [ + 'label' => __('Pointer Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => empty($args['scheme']) ? null : [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--main:not(.e--pointer-framed) .elementor-item:before, ' . + '{{WRAPPER}} .elementor-nav--main:not(.e--pointer-framed) .elementor-item:after' => 'background-color: {{VALUE}}', + '{{WRAPPER}} .e--pointer-framed .elementor-item:before, ' . + '{{WRAPPER}} .e--pointer-framed .elementor-item:after' => 'border-color: {{VALUE}}', + ], + 'condition' => [ + 'pointer!' => ['none', 'text'], + ], + ] + ); + + $self->endControlsTab(); + + $self->startControlsTab( + 'tab_menu_item_active', + [ + 'label' => __('Active'), + 'condition' => isset($args['active_condition']) ? $args['active_condition'] : [], + ] + ); + + $self->addControl( + 'color_menu_item_active', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--main a.elementor-item.elementor-item-active:not(#e)' => 'color: {{VALUE}}', + ], + ] + ); + + $self->addControl( + 'pointer_color_menu_item_active', + [ + 'label' => __('Pointer Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--main:not(.e--pointer-framed) .elementor-item.elementor-item-active:before, ' . + '{{WRAPPER}} .elementor-nav--main:not(.e--pointer-framed) .elementor-item.elementor-item-active:after' => 'background-color: {{VALUE}}', + '{{WRAPPER}} .e--pointer-framed .elementor-item.elementor-item-active:before, ' . + '{{WRAPPER}} .e--pointer-framed .elementor-item.elementor-item-active:after' => 'border-color: {{VALUE}}', + ], + 'condition' => [ + 'pointer!' => ['none', 'text'], + ], + ] + ); + + $self->endControlsTab(); + + $self->endControlsTabs(); + + $self->addResponsiveControl( + 'padding_horizontal_menu_item', + [ + 'label' => __('Horizontal Padding'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'devices' => $devices, + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--main .elementor-item' => 'padding-left: {{SIZE}}{{UNIT}}; padding-right: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $self->addResponsiveControl( + 'padding_vertical_menu_item', + [ + 'label' => __('Vertical Padding'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'devices' => $devices, + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--main .elementor-item' => 'padding-top: {{SIZE}}{{UNIT}}; padding-bottom: {{SIZE}}{{UNIT}}', + ], + ] + ); + + empty($args['show_icon']) or $self->addControl( + 'icon_size', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'size_units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}} .elementor-item > i' => 'font-size: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $self->addResponsiveControl( + 'menu_space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'devices' => $devices, + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .elementor-nav--layout-horizontal .elementor-nav > li:not(:last-child)' => 'margin-right: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .elementor-nav--layout-horizontal .elementor-nav > li:not(:last-child)' => 'margin-left: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-nav--main:not(.elementor-nav--layout-horizontal) .elementor-nav > li:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}', + ], + 'condition' => isset($args['space_between_condition']) ? $args['space_between_condition'] : [], + ] + ); + + $self->addResponsiveControl( + 'border_radius_menu_item', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em', '%'], + 'devices' => $devices, + 'selectors' => [ + '{{WRAPPER}} .elementor-item:before' => 'border-radius: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--animation-shutter-in-horizontal .elementor-item:before' => 'border-radius: {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0 0', + '{{WRAPPER}} .e--animation-shutter-in-horizontal .elementor-item:after' => 'border-radius: 0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--animation-shutter-in-vertical .elementor-item:before' => 'border-radius: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + '{{WRAPPER}} .e--animation-shutter-in-vertical .elementor-item:after' => 'border-radius: {{SIZE}}{{UNIT}} 0 0 {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'pointer' => 'background', + ], + ] + ); + + $self->addControl( + 'pointer_width', + [ + 'label' => __('Pointer Width'), + 'type' => ControlsManager::SLIDER, + 'devices' => $devices, + 'range' => [ + 'px' => [ + 'max' => 30, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .e--pointer-framed .elementor-item:before' => 'border-width: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--pointer-framed.e--animation-draw .elementor-item:before' => 'border-width: 0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--pointer-framed.e--animation-draw .elementor-item:after' => 'border-width: {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0 0', + '{{WRAPPER}} .e--pointer-framed.e--animation-corners .elementor-item:before' => 'border-width: {{SIZE}}{{UNIT}} 0 0 {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .e--pointer-framed.e--animation-corners .elementor-item:after' => 'border-width: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + '{{WRAPPER}} .e--pointer-underline .elementor-item:after, ' . + '{{WRAPPER}} .e--pointer-overline .elementor-item:before, ' . + '{{WRAPPER}} .e--pointer-double-line .elementor-item:before, ' . + '{{WRAPPER}} .e--pointer-double-line .elementor-item:after' => 'height: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'pointer' => ['underline', 'overline', 'double-line', 'framed'], + ], + ] + ); + + $self->endControlsSection(); + } + + protected function registerDropdownStyleSection(array $args = []) + { + $self = ${'this'}; + + $self->startControlsSection( + 'section_style_dropdown', + [ + 'label' => __('Dropdown'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => isset($args['dropdown_condition']) ? $args['dropdown_condition'] : [], + ] + ); + + empty($args['show_description']) or $self->addControl( + 'dropdown_description', + [ + 'raw' => __('On desktop, this will affect the submenu. On mobile, this will affect the entire menu.'), + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-descriptor', + 'separator' => 'after', + ] + ); + + $self->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'dropdown_typography', + 'scheme' => empty($args['scheme']) ? null : SchemeTypography::TYPOGRAPHY_4, + 'exclude' => ['line_height'], + 'selector' => '{{WRAPPER}} .elementor-nav--dropdown', + ] + ); + + $self->startControlsTabs('tabs_dropdown_item_style'); + + $self->startControlsTab( + 'tab_dropdown_item_normal', + [ + 'label' => __('Normal'), + ] + ); + + $self->addControl( + 'color_dropdown_item', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown a:not(#e), {{WRAPPER}} .elementor-menu-toggle' => 'color: {{VALUE}}', + ], + ] + ); + + $self->addControl( + 'background_color_dropdown_item', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown' => 'background-color: {{VALUE}}', + ], + 'separator' => 'none', + ] + ); + + $self->endControlsTab(); + + $self->startControlsTab( + 'tab_dropdown_item_hover', + [ + 'label' => __('Hover'), + ] + ); + + $self->addControl( + 'color_dropdown_item_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown a.elementor-item-active:not(#e), ' . + '{{WRAPPER}} .elementor-nav--dropdown a.highlighted:not(#e), ' . + '{{WRAPPER}} .elementor-nav--dropdown a:not(#e):hover, ' . + '{{WRAPPER}} .elementor-menu-toggle:hover' => 'color: {{VALUE}}', + ], + ] + ); + + $self->addControl( + 'background_color_dropdown_item_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown a:hover, ' . + '{{WRAPPER}} .elementor-nav--dropdown a.elementor-item-active, ' . + '{{WRAPPER}} .elementor-nav--dropdown a.highlighted' => 'background-color: {{VALUE}}', + ], + 'separator' => 'none', + ] + ); + + $self->endControlsTab(); + + $self->startControlsTab( + 'tab_dropdown_item_active', + [ + 'label' => __('Active'), + 'condition' => isset($args['active_condition']) ? $args['active_condition'] : [], + ] + ); + + $self->addControl( + 'color_dropdown_item_active', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown a.elementor-item-active:not(#e)' => 'color: {{VALUE}}', + ], + ] + ); + + $self->addControl( + 'background_color_dropdown_item_active', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown a.elementor-item-active' => 'background-color: {{VALUE}}', + ], + 'separator' => 'none', + ] + ); + + $self->endControlsTab(); + + $self->endControlsTabs(); + + $self->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'dropdown_border', + 'selector' => '{{WRAPPER}} .elementor-nav--dropdown', + 'separator' => 'before', + ] + ); + + $self->addResponsiveControl( + 'dropdown_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + '{{WRAPPER}} .elementor-nav--dropdown li:first-child a' => 'border-top-left-radius: {{TOP}}{{UNIT}}; border-top-right-radius: {{RIGHT}}{{UNIT}};', + '{{WRAPPER}} .elementor-nav--dropdown li:last-child a' => 'border-bottom-right-radius: {{BOTTOM}}{{UNIT}}; border-bottom-left-radius: {{LEFT}}{{UNIT}};', + ], + ] + ); + + $self->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'dropdown_box_shadow', + 'exclude' => [ + 'box_shadow_position', + ], + 'selector' => '{{WRAPPER}} .elementor-nav--main .elementor-nav--dropdown, {{WRAPPER}} .elementor-nav__container.elementor-nav--dropdown', + ] + ); + + $self->addResponsiveControl( + 'padding_horizontal_dropdown_item', + [ + 'label' => __('Horizontal Padding'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown a' => 'padding-left: {{SIZE}}{{UNIT}}; padding-right: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + + ] + ); + + $self->addResponsiveControl( + 'padding_vertical_dropdown_item', + [ + 'label' => __('Vertical Padding'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown a' => 'padding-top: {{SIZE}}{{UNIT}}; padding-bottom: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $self->addControl( + 'heading_dropdown_divider', + [ + 'label' => __('Divider'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $self->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'dropdown_divider', + 'selector' => '{{WRAPPER}} .elementor-nav--dropdown li:not(:last-child)', + 'exclude' => ['width'], + ] + ); + + $self->addControl( + 'dropdown_divider_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--dropdown li:not(:last-child)' => 'border-bottom-width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'dropdown_divider_border!' => '', + ], + ] + ); + + $self->addResponsiveControl( + 'dropdown_top_distance', + [ + 'label' => __('Distance'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -100, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-nav--main > .elementor-nav > li > .elementor-nav--dropdown, ' . + '{{WRAPPER}} .elementor-nav__container.elementor-nav--dropdown' => 'margin-top: {{SIZE}}{{UNIT}} !important', + ], + 'separator' => 'before', + ] + ); + + $self->endControlsSection(); + } +} diff --git a/modules/creativeelements/includes/user.php b/modules/creativeelements/includes/user.php new file mode 100644 index 00000000..6fd64502 --- /dev/null +++ b/modules/creativeelements/includes/user.php @@ -0,0 +1,244 @@ +registerAjaxAction('introduction_viewed', [__CLASS__, 'set_introduction_viewed']); + } + + /** + * Is current user can edit. + * + * Whether the current user can edit the post. + * + * @since 1.0.0 + * @access public + * @static + * + * @param int $post_id Optional. The post ID. Default is `0`. + * + * @return bool Whether the current user can edit the post. + */ + public static function isCurrentUserCanEdit($post_id = 0) + { + $post = get_post($post_id); + + if (!$post) { + return false; + } + + // if ('trash' === get_post_status($post_id)) { + // return false; + // } + + if (!self::isCurrentUserCanEditPostType($post->post_type)) { + return false; + } + + $post_type_object = get_post_type_object($post->post_type); + + if (!isset($post_type_object->cap->edit_post)) { + return false; + } + + $edit_cap = $post_type_object->cap->edit_post; + + if (!current_user_can($edit_cap, $post_id)) { + return false; + } + + // if (get_option('page_for_posts') === $post_id) { + // return false; + // } + + return true; + } + + // public static function isCurrentUserInEditingBlackList() + + /** + * Is current user can edit post type. + * + * Whether the current user can edit the given post type. + * + * @since 1.9.0 + * @access public + * @static + * + * @param string $post_type the post type slug to check. + * + * @return bool True if can edit, False otherwise. + */ + public static function isCurrentUserCanEditPostType($post_type) + { + // if (!self::isCurrentUserInEditingBlackList()) { + // return false; + // } + + if (!Utils::isPostTypeSupport($post_type)) { + return false; + } + + $post_type_object = get_post_type_object($post_type); + + if (!current_user_can($post_type_object->cap->edit_posts)) { + return false; + } + + return true; + } + + /** + * Get user notices. + * + * Retrieve the list of notices for the current user. + * + * @since 2.0.0 + * @access private + * @static + * + * @return array A list of user notices. + */ + private static function getUserNotices() + { + return get_user_meta(get_current_user_id(), self::ADMIN_NOTICES_KEY, true); + } + + /** + * Is user notice viewed. + * + * Whether the notice was viewed by the user. + * + * @since 1.0.0 + * @access public + * @static + * + * @param int $notice_id The notice ID. + * + * @return bool Whether the notice was viewed by the user. + */ + public static function isUserNoticeViewed($notice_id) + { + $notices = self::getUserNotices(); + + if (empty($notices) || empty($notices[$notice_id])) { + return false; + } + + return true; + } + + /** + * Set admin notice as viewed. + * + * Flag the user admin notice as viewed using an authenticated ajax request. + * + * Fired by `wp_ajax_elementor_set_admin_notice_viewed` action. + * + * @since 1.0.0 + * @access public + * @static + */ + public static function ajaxSetAdminNoticeViewed() + { + if (empty($_REQUEST['notice_id'])) { + die(); + } + + $notices = self::getUserNotices(); + if (empty($notices)) { + $notices = []; + } + + $notices[$_REQUEST['notice_id']] = 'true'; + update_user_meta(get_current_user_id(), self::ADMIN_NOTICES_KEY, $notices); + + // if (!Utils::isAjax()) { + // wp_safe_redirect(admin_url()); + // die; + // } + + die(); + } + + /** + * @since 2.1.0 + * @access public + * @static + */ + public static function setIntroductionViewed(array $data) + { + $user_introduction_meta = self::getIntroductionMeta(); + + $user_introduction_meta[$data['introductionKey']] = true; + + update_user_meta(get_current_user_id(), self::INTRODUCTION_KEY, $user_introduction_meta); + } + + /** + * @since 2.1.0 + * @access private + * @static + */ + public static function getIntroductionMeta() + { + $user_introduction_meta = get_user_meta(get_current_user_id(), self::INTRODUCTION_KEY, true); + + if (!$user_introduction_meta) { + $user_introduction_meta = []; + } + + return $user_introduction_meta; + } +} diff --git a/modules/creativeelements/includes/utils.php b/modules/creativeelements/includes/utils.php new file mode 100644 index 00000000..4b8c9ddb --- /dev/null +++ b/modules/creativeelements/includes/utils.php @@ -0,0 +1,304 @@ + 'elementor_new_post', + 'post_type' => $post_type, + ], admin_url('edit.php')); + + $new_post_url = add_query_arg('_wpnonce', wp_create_nonce('elementor_action_new_post'), $new_post_url); + + return $new_post_url; + } + + /** + * Get post autosave. + * + * Retrieve an autosave for any given post. + * + * @since 1.9.2 + * @access public + * @static + * + * @param int $post_id Post ID. + * @param int $user_id Optional. User ID. Default is `0`. + * + * @return WPPost|false Post autosave or false. + */ + public static function getPostAutosave($post_id, $user_id = 0) + { + $autosave = wp_get_post_autosave($post_id, $user_id); + + return $autosave && strtotime($autosave->post_modified) > strtotime(get_post($post_id)->post_modified) ? $autosave : false; + } + + /** + * Is CPT supports custom templates. + * + * Whether the Custom Post Type supports templates. + * + * @since 2.0.0 + * @access public + * @static + * + * @return bool True is templates are supported, False otherwise. + */ + public static function isCptCustomTemplatesSupported(WPPost $post) + { + // return method_exists(wp_get_theme(), 'get_post_templates'); + + return UId::CONTENT !== $post->uid->id_type && $post->template_type !== 'product-quick-view' && $post->template_type !== 'product-miniature'; + } + + /** + * @since 2.1.2 + * @access public + * @static + */ + public static function arrayInject($array, $key, $insert) + { + $length = array_search($key, array_keys($array), true) + 1; + + return array_slice($array, 0, $length, true) + $insert + array_slice($array, $length, null, true); + } + + /** + * Render html attributes + * + * @access public + * @static + * @param array $attributes + * + * @return string + */ + public static function renderHtmlAttributes(array $attributes) + { + $rendered_attributes = []; + + foreach ($attributes as $attribute_key => $attribute_values) { + if ([] === $attribute_values) { + $rendered_attributes[] = $attribute_key; + + continue; + } + if (is_array($attribute_values)) { + $attribute_values = implode(' ', $attribute_values); + } + + $rendered_attributes[] = sprintf('%1$s="%2$s"', $attribute_key, esc_attr($attribute_values)); + } + + return implode(' ', $rendered_attributes); + } + + public static function getMetaViewport($context = '') + { + $meta_tag = ''; + /** + * Viewport meta tag. + * + * Filters the Elementor preview URL. + * + * @since 2.5.0 + * + * @param string $meta_tag Viewport meta tag. + */ + return apply_filters('elementor/template/viewport_tag', $meta_tag, $context); + } + + // public static function printJsConfig($handle, $js_var, $config) - Use wp_localize_script instead +} diff --git a/modules/creativeelements/includes/widgets/accordion.php b/modules/creativeelements/includes/widgets/accordion.php new file mode 100644 index 00000000..c5d77548 --- /dev/null +++ b/modules/creativeelements/includes/widgets/accordion.php @@ -0,0 +1,594 @@ +startControlsSection( + 'section_title', + [ + 'label' => __('Accordion'), + ] + ); + + $repeater = new Repeater(); + + $repeater->addControl( + 'tab_title', + [ + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'default' => __('Accordion Title'), + 'dynamic' => [ + 'active' => true, + ], + 'label_block' => true, + ] + ); + + $repeater->addControl( + 'tab_content', + [ + 'label' => __('Content'), + 'type' => ControlsManager::WYSIWYG, + 'default' => __('Accordion Content'), + 'show_label' => false, + ] + ); + + $this->addControl( + 'tabs', + [ + 'label' => __('Accordion Items'), + 'type' => ControlsManager::REPEATER, + 'fields' => $repeater->getControls(), + 'default' => [ + [ + 'tab_title' => __('Accordion #1'), + 'tab_content' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + ], + [ + 'tab_title' => __('Accordion #2'), + 'tab_content' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + ], + ], + 'title_field' => '{{{ tab_title }}}', + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-plus', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'icon_active', + [ + 'label' => __('Active Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-minus', + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'title_html_tag', + [ + 'label' => __('Title HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => 'H1', + 'h2' => 'H2', + 'h3' => 'H3', + 'h4' => 'H4', + 'h5' => 'H5', + 'h6' => 'H6', + 'div' => 'div', + ], + 'default' => 'div', + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_title_style', + [ + 'label' => __('Accordion'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-accordion-item' => 'border-width: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} .elementor-accordion-item .elementor-tab-content' => 'border-width: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} .elementor-accordion-item .elementor-tab-title.elementor-active' => 'border-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-accordion-item' => 'border-color: {{VALUE}};', + '{{WRAPPER}} .elementor-accordion-item .elementor-tab-content' => 'border-top-color: {{VALUE}};', + '{{WRAPPER}} .elementor-accordion-item .elementor-tab-title.elementor-active' => 'border-bottom-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_toggle_style_title', + [ + 'label' => __('Title'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'title_background', + [ + 'label' => __('Background'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + ] + ); + + $this->addControl( + 'tab_active_color', + [ + 'label' => __('Active Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title.elementor-active' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'selector' => '{{WRAPPER}} .elementor-tab-title', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-tab-title', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'title_shadow', + 'selector' => '{{WRAPPER}} .elementor-tab-title', + ] + ); + + $this->addResponsiveControl( + 'title_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_toggle_style_icon', + [ + 'label' => __('Icon'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'icon_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Start'), + 'icon' => 'eicon-h-align-left', + ], + 'right' => [ + 'title' => __('End'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'default' => is_rtl() ? 'right' : 'left', + 'toggle' => false, + 'label_block' => false, + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'icon_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title .elementor-accordion-icon .fa:before' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'icon_active_color', + [ + 'label' => __('Active Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title.elementor-active .elementor-accordion-icon .fa:before' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'icon_space', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-accordion-icon.elementor-accordion-icon-left' => 'margin-right: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} .elementor-accordion-icon.elementor-accordion-icon-right' => 'margin-left: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_toggle_style_content', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'content_background_color', + [ + 'label' => __('Background'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-content' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'content_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-content' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'content_typography', + 'selector' => '{{WRAPPER}} .elementor-tab-content', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'content_shadow', + 'selector' => '{{WRAPPER}} .elementor-tab-content', + ] + ); + + $this->addResponsiveControl( + 'content_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * Render accordion widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $id_int = \Tools::substr($this->getIdInt(), 0, 3); + ?> +
+ $item) : + $tab_count = $index + 1; + + $tab_title_key = $this->getRepeaterSettingKey('tab_title', 'tabs', $index); + $tab_content_key = $this->getRepeaterSettingKey('tab_content', 'tabs', $index); + + $this->addRenderAttribute($tab_title_key, [ + 'id' => 'elementor-tab-title-' . $id_int . $tab_count, + 'class' => ['elementor-tab-title'], + 'data-tab' => $tab_count, + 'role' => 'tab', + 'aria-controls' => 'elementor-tab-content-' . $id_int . $tab_count, + ]); + + $this->addRenderAttribute($tab_content_key, [ + 'id' => 'elementor-tab-content-' . $id_int . $tab_count, + 'class' => ['elementor-tab-content', 'elementor-clearfix'], + 'data-tab' => $tab_count, + 'role' => 'tabpanel', + 'aria-labelledby' => 'elementor-tab-title-' . $id_int . $tab_count, + ]); + + $this->addInlineEditingAttributes($tab_content_key, 'advanced'); + ?> +
+ < getRenderAttributeString($tab_title_key) ?>> + + + + + > +
getRenderAttributeString($tab_content_key) ?>>parseTextEditor($item['tab_content']) ?>
+
+ +
+ +
+ <# + if ( settings.tabs ) { + var tabindex = view.getIDInt().toString().substr( 0, 3 ); + + _.each( settings.tabs, function( item, index ) { + var tabCount = index + 1, + tabTitleKey = view.getRepeaterSettingKey( 'tab_title', 'tabs', index ), + tabContentKey = view.getRepeaterSettingKey( 'tab_content', 'tabs', index ); + + view.addRenderAttribute( tabTitleKey, { + 'id': 'elementor-tab-title-' + tabindex + tabCount, + 'class': [ 'elementor-tab-title' ], + 'tabindex': tabindex + tabCount, + 'data-tab': tabCount, + 'role': 'tab', + 'aria-controls': 'elementor-tab-content-' + tabindex + tabCount + } ); + + view.addRenderAttribute( tabContentKey, { + 'id': 'elementor-tab-content-' + tabindex + tabCount, + 'class': [ 'elementor-tab-content', 'elementor-clearfix' ], + 'data-tab': tabCount, + 'role': 'tabpanel', + 'aria-labelledby': 'elementor-tab-title-' + tabindex + tabCount + } ); + + view.addInlineEditingAttributes( tabContentKey, 'advanced' ); + #> +
+ <{{{ settings.title_html_tag }}} {{{ view.getRenderAttributeString( tabTitleKey ) }}}> + <# if ( settings.icon ) { #> + + <# } #> + {{{ item.tab_title }}} + +
{{{ item.tab_content }}}
+
+ <# + } ); + } #> +
+ startControlsSection( + 'search_content', + [ + 'label' => __('Search'), + ] + ); + + $this->addControl( + 'skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'default' => 'classic', + 'options' => [ + 'classic' => __('Classic'), + 'minimal' => __('Minimal'), + 'topbar' => __('Topbar'), + ], + 'prefix_class' => 'elementor-search--skin-', + 'render_type' => 'template', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'skin_divider', + [ + 'type' => ControlsManager::DIVIDER, + ] + ); + + $this->addControl( + 'heading_button_content', + [ + 'label' => __('Button'), + 'type' => ControlsManager::HEADING, + 'condition' => [ + 'skin' => 'classic', + ], + ] + ); + + $this->addControl( + 'heading_toggle_content', + [ + 'label' => __('Toggle'), + 'type' => ControlsManager::HEADING, + 'condition' => [ + 'skin' => 'topbar', + ], + ] + ); + + $this->addControl( + 'button_type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'default' => 'icon', + 'options' => [ + 'icon' => __('Icon'), + 'text' => __('Text'), + ], + 'prefix_class' => 'elementor-search--button-type-', + 'render_type' => 'template', + 'condition' => [ + 'skin' => 'classic', + ], + ] + ); + + $this->addControl( + 'button_text', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'default' => __('Search'), + 'condition' => [ + 'button_type' => 'text', + 'skin' => 'classic', + ], + ] + ); + + $icon_options = [ + 'fa fa-search' => 'search-fa', + 'ceicon-search-light' => 'search-light', + 'ceicon-search-medium' => 'search-medium', + 'ceicon-search-glint' => 'search-glint', + 'ceicon-search-minimal' => 'search-minimal', + 'ceicon-magnifier' => 'magnifier', + 'ceicon-loupe' => 'loupe', + 'fa fa-arrow-right' => 'arrow-fa', + ]; + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => false, + 'default' => 'fa fa-search', + 'options' => &$icon_options, + 'include' => array_keys($icon_options), + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'skin', + 'operator' => '!==', + 'value' => 'classic', + ], + [ + 'name' => 'button_type', + 'value' => 'icon', + ], + ], + ], + ] + ); + + $this->addControl( + 'toggle_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'default' => 'center', + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-h-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search' => 'text-align: {{VALUE}}', + ], + 'condition' => [ + 'skin' => 'topbar', + ], + ] + ); + + $this->addControl( + 'toggle_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 33, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__toggle i' => 'font-size: {{SIZE}}{{UNIT}}; width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'skin' => 'topbar', + ], + ] + ); + + $this->addControl( + 'heading_topbar_content', + [ + 'label' => __('Topbar'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + 'condition' => [ + 'skin' => 'topbar', + ], + ] + ); + + $this->addControl( + 'heading_input_content', + [ + 'label' => __('Input'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + 'condition' => [ + 'skin' => 'classic', + ], + ] + ); + + $this->addControl( + 'label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::TEXT, + 'default' => __('What are you looking for?'), + 'condition' => [ + 'skin' => 'topbar', + ], + ] + ); + + $this->addControl( + 'size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 50, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__container' => 'min-height: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-search__submit' => 'min-width: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-search__icon, ' . + '{{WRAPPER}} .elementor-search__input, ' . + '{{WRAPPER}}.elementor-search--button-type-text .elementor-search__submit' => 'padding: 0 calc({{SIZE}}{{UNIT}} / 3)', + ], + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->addControl( + 'placeholder', + [ + 'label' => __('Placeholder'), + 'type' => ControlsManager::TEXT, + 'default' => __('Search') . '...', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_results', + [ + 'label' => __('Result List'), + ] + ); + + $this->addControl( + 'list_limit', + [ + 'label' => __('Product Limit'), + 'type' => ControlsManager::NUMBER, + 'min' => 1, + 'default' => 10, + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'list_product_content', + [ + 'label' => __('Content'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'show_image', + [ + 'label' => __('Image'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'show_category', + [ + 'label' => __('Category'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'show_description', + [ + 'label' => __('Description'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'description_line_clamp', + [ + 'label' => __('Max Lines'), + 'type' => ControlsManager::NUMBER, + 'min' => 1, + 'selectors' => [ + '{{WRAPPER}} .elementor-search__product-description' => '-webkit-line-clamp: {{VALUE}}', + ], + 'condition' => [ + 'show_description!' => '', + ], + ] + ); + + $show_prices = !\Configuration::isCatalogMode(); + + $this->addControl( + 'show_price', + [ + 'label' => __('Price'), + 'type' => $show_prices ? ControlsManager::SWITCHER : ControlsManager::HIDDEN, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => $show_prices ? 'yes' : '', + 'frontend_available' => true, + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_toggle_style', + [ + 'label' => __('Toggle'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'topbar', + ], + ] + ); + + $this->startControlsTabs('tabs_toggle_color'); + + $this->startControlsTab( + 'tab_toggle_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'toggle_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-search__toggle' => 'color: {{VALUE}}; border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'toggle_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-search__toggle i' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_toggle_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'toggle_color_hover', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-search__toggle:hover' => 'color: {{VALUE}}; border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'toggle_background_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-search__toggle i:hover' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'toggle_icon_size', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-search__toggle i:before' => 'font-size: calc({{SIZE}}em / 100)', + ], + 'condition' => [ + 'skin' => 'topbar', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'toggle_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__toggle i' => 'border-width: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'toggle_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__toggle i' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_topbar_style', + [ + 'label' => __('Topbar'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'topbar', + ], + ] + ); + + $this->addControl( + 'overlay_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}.elementor-search--skin-topbar .elementor-search__container' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + 'overlay_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-search--skin-topbar .elementor-search__container' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'heading_label_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Label'), + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'label_typography', + 'selector' => '{{WRAPPER}} .elementor-search__label', + ] + ); + + $this->addControl( + 'label_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-search__label' => 'color: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_input_style', + [ + 'label' => __('Input'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'icon_size_minimal', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__icon' => 'font-size: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'skin' => 'minimal', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'input_typography', + 'selector' => '{{WRAPPER}} input[type="search"].elementor-search__input', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->startControlsTabs('tabs_input_colors'); + + $this->startControlsTab( + 'tab_input_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'input_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__input, ' . + '{{WRAPPER}} .elementor-search__icon, ' . + '{{WRAPPER}} .elementor-lightbox .dialog-lightbox-close-button, ' . + '{{WRAPPER}} .elementor-lightbox .dialog-lightbox-close-button:hover, ' . + '{{WRAPPER}}.elementor-search--skin-topbar input[type="search"].elementor-search__input' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'input_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}:not(.elementor-search--skin-topbar) .elementor-search__container' => 'background-color: {{VALUE}}', + '{{WRAPPER}}.elementor-search--skin-topbar input[type="search"].elementor-search__input' => 'background-color: {{VALUE}}', + ], + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->addControl( + 'input_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}:not(.elementor-search--skin-topbar) .elementor-search__container' => 'border-color: {{VALUE}}', + '{{WRAPPER}}.elementor-search--skin-topbar input[type="search"].elementor-search__input' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'input_box_shadow', + 'selector' => '{{WRAPPER}} .elementor-search__container', + 'fields_options' => [ + 'box_shadow_type' => [ + 'separator' => 'default', + ], + ], + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_input_focus', + [ + 'label' => __('Focus'), + ] + ); + + $this->addControl( + 'input_text_color_focus', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}:not(.elementor-search--skin-topbar) .elementor-search--focus .elementor-search__input, ' . + '{{WRAPPER}} .elementor-search--focus .elementor-search__icon, ' . + '{{WRAPPER}} .elementor-lightbox .dialog-lightbox-close-button:hover, ' . + '{{WRAPPER}}.elementor-search--skin-topbar input[type="search"].elementor-search__input:focus' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'input_background_color_focus', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}:not(.elementor-search--skin-topbar) .elementor-search--focus .elementor-search__container' => 'background-color: {{VALUE}}', + '{{WRAPPER}}.elementor-search--skin-topbar input[type="search"].elementor-search__input:focus' => 'background-color: {{VALUE}}', + ], + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->addControl( + 'input_border_color_focus', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}:not(.elementor-search--skin-topbar) .elementor-search--focus .elementor-search__container' => 'border-color: {{VALUE}}', + '{{WRAPPER}}.elementor-search--skin-topbar input[type="search"].elementor-search__input:focus' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'input_box_shadow_focus', + 'selector' => '{{WRAPPER}} .elementor-search--focus .elementor-search__container', + 'fields_options' => [ + 'box_shadow_type' => [ + 'separator' => 'default', + ], + ], + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'button_border_width', + [ + 'label' => __('Border Size'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}}:not(.elementor-search--skin-topbar) .elementor-search__container' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + '{{WRAPPER}}.elementor-search--skin-topbar input[type="search"].elementor-search__input' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 200, + ], + ], + 'default' => [ + 'size' => 3, + 'unit' => 'px', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__container' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->addControl( + 'heading_cancel_icon_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Cancel'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'clear_icon_size', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__clear' => 'font-size: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_button_style', + [ + 'label' => __('Button'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'classic', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'button_typography', + 'selector' => '{{WRAPPER}} .elementor-search__submit', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'condition' => [ + 'button_type' => 'text', + ], + ] + ); + + $this->startControlsTabs('tabs_button_colors'); + + $this->startControlsTab( + 'tab_button_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'button_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-search__submit' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'button_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__submit' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_button_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'button_text_color_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-search_Submit:hover' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'button_background_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-search_Submit:hover' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'icon_size', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__submit' => 'font-size: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'button_type' => 'icon', + 'skin!' => 'topbar', + ], + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'button_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 10, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__submit' => 'min-width: calc( {{SIZE}} * {{size.SIZE}}{{size.UNIT}} )', + ], + 'condition' => [ + 'skin' => 'classic', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_results_style', + [ + 'label' => __('Result List'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'list_align', + [ + 'label' => __('Align'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-h-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'prefix_class' => 'elementor-search--align-', + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->addResponsiveControl( + 'list_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 400, + 'unit' => 'px', + ], + 'range' => [ + 'px' => [ + 'min' => 100, + 'max' => 1400, + ], + '%' => [ + 'min' => 10, + 'max' => 400, + ], + ], + 'size_units' => ['px', '%', 'vw'], + 'selectors' => [ + '{{WRAPPER}}:not(.elementor-search--skin-topbar) .elementor-search__products' => 'width: {{SIZE}}{{UNIT}} !important', + '{{WRAPPER}}.elementor-search--skin-topbar .elementor-search__container' => 'border-left-width: calc(50vw - {{SIZE}}{{UNIT}} / 2); border-right-width: calc(50vw - {{SIZE}}{{UNIT}} / 2)', + ], + ] + ); + + $this->addResponsiveControl( + 'list_distance', + [ + 'label' => __('Distance'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__products' => 'margin-top: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'list_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__products' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'list_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-search__products' => 'border-color: {{VALUE}};', + ], + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->addResponsiveControl( + 'list_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__products' => 'border-width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->addResponsiveControl( + 'list_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 200, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__products' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'list_box_shadow', + 'selector' => '{{WRAPPER}} .elementor-search__products', + 'condition' => [ + 'skin!' => 'topbar', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_products_style', + [ + 'label' => __('Products'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'product_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} a.elementor-search__product-link' => 'padding: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'heading_product_image_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Image'), + 'condition' => [ + 'show_image!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'product_image_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .elementor-search__product-image' => 'margin-right: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .elementor-search__product-image' => 'margin-left: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'show_image!' => '', + ], + ] + ); + + $this->addControl( + 'heading_product_color_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Color'), + ] + ); + + $this->startControlsTabs('tabs_product_colors'); + + $this->startControlsTab( + 'tab_product_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'product_background_color', + [ + 'label' => __('Background'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-search__product-link' => 'background: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'product_name_color', + [ + 'label' => __('Name'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__product-name' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'product_category_color', + [ + 'label' => __('Category'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__product-category' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_category!' => '', + ], + ] + ); + + $this->addControl( + 'product_description_color', + [ + 'label' => __('Description'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__product-description' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_description!' => '', + ], + ] + ); + + $this->addControl( + 'product_price_color', + [ + 'label' => __('Price'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-search__product-price' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_price!' => '', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_product_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'product_background_color_hover', + [ + 'label' => __('Background'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-search__product-link.ui-state-focus' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'product_name_color_hover', + [ + 'label' => __('Name'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + 'selectors' => [ + '{{WRAPPER}} .ui-state-focus .elementor-search__product-name' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'product_category_color_hover', + [ + 'label' => __('Category'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ui-state-focus .elementor-search__product-category' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_category!' => '', + ], + ] + ); + + $this->addControl( + 'product_description_color_hover', + [ + 'label' => __('Description'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ui-state-focus .elementor-search__product-description' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_description!' => '', + ], + ] + ); + + $this->addControl( + 'product_price_color_hover', + [ + 'label' => __('Price'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ui-state-focus .elementor-search__product-price' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_price!' => '', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'heading_product_typography_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Typography'), + 'separator' => 'before', + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'product_name_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'label' => __('Name'), + 'selector' => '{{WRAPPER}} .elementor-search__product-name', + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'product_category_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_2, + 'label' => __('Category'), + 'selector' => '{{WRAPPER}} .elementor-search__product-category', + 'condition' => [ + 'show_category!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'product_description_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'label' => __('Description'), + 'selector' => '{{WRAPPER}} .elementor-search__product-description', + 'condition' => [ + 'show_description!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'product_price_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'label' => __('Price'), + 'selector' => '{{WRAPPER}} .elementor-search__product-price', + 'condition' => [ + 'show_price!' => '', + ], + ] + ); + + $this->endControlsSection(); + } + + protected function render() + { + $settings = $this->getSettings(); + + $this->addRenderAttribute('input', [ + 'placeholder' => $settings['placeholder'], + 'class' => 'elementor-search__input', + 'type' => 'search', + 'name' => 's', + 'value' => \Tools::getValue('controller') === 'search' ? \Tools::getValue('s') : '', + ]); + ?> + + + <# var actionLink = link->getPageLink('search')) ?> #> + + startControlsSection( + 'section_alert', + [ + 'label' => __('Alert'), + ] + ); + + $this->addControl( + 'alert_type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'default' => 'info', + 'options' => [ + 'info' => __('Info'), + 'success' => __('Success'), + 'warning' => __('Warning'), + 'danger' => __('Danger'), + ], + 'style_transfer' => true, + ] + ); + + $this->addControl( + 'alert_title', + [ + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Enter your title'), + 'default' => __('This is an Alert'), + 'label_block' => true, + ] + ); + + $this->addControl( + 'alert_description', + [ + 'label' => __('Content'), + 'type' => ControlsManager::TEXTAREA, + 'placeholder' => __('Enter your description'), + 'default' => __('I am a description. Click the edit button to change this text.'), + 'separator' => 'none', + 'show_label' => false, + ] + ); + + $this->addControl( + 'show_dismiss', + [ + 'label' => __('Dismiss Button'), + 'type' => ControlsManager::SELECT, + 'default' => 'show', + 'options' => [ + 'show' => __('Show'), + 'hide' => __('Hide'), + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_type', + [ + 'label' => __('Alert'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'background', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-alert' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-alert' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'border_left-width', + [ + 'label' => __('Left Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-alert' => 'border-left-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_title', + [ + 'label' => __('Title'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-alert-title' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'alert_title', + 'selector' => '{{WRAPPER}} .elementor-alert-title', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'title_shadow', + 'selector' => '{{WRAPPER}} .elementor-alert-title', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_description', + [ + 'label' => __('Description'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'description_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-alert-description' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'alert_description', + 'selector' => '{{WRAPPER}} .elementor-alert-description', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'description_shadow', + 'selector' => '{{WRAPPER}} .elementor-alert-description', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render alert widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if (empty($settings['alert_title'])) { + return; + } + + if (!empty($settings['alert_type'])) { + $this->addRenderAttribute('wrapper', 'class', 'elementor-alert elementor-alert-' . $settings['alert_type']); + } + + $this->addRenderAttribute('wrapper', 'role', 'alert'); + $this->addRenderAttribute('alert_title', 'class', 'elementor-alert-title'); + + $this->addInlineEditingAttributes('alert_title', 'none'); + ?> +
getRenderAttributeString('wrapper') ?>> + getRenderAttributeString('alert_title') ?>> + addRenderAttribute('alert_description', 'class', 'elementor-alert-description'); + + $this->addInlineEditingAttributes('alert_description'); + ?> + getRenderAttributeString('alert_description') ?>> + + + + + + +
+ + <# if ( settings.alert_title ) { + view.addRenderAttribute( { + alert_title: { class: 'elementor-alert-title' }, + alert_description: { class: 'elementor-alert-description' } + } ); + + view.addInlineEditingAttributes( 'alert_title', 'none' ); + view.addInlineEditingAttributes( 'alert_description' ); + #> + + <# } #> + startControlsSection( + 'text_elements', + [ + 'label' => __('Headline'), + ] + ); + + $this->addControl( + 'headline_style', + [ + 'label' => __('Style'), + 'type' => ControlsManager::SELECT, + 'default' => 'highlight', + 'options' => [ + 'highlight' => __('Highlighted'), + 'rotate' => __('Rotating'), + ], + 'prefix_class' => 'elementor-headline--style-', + 'render_type' => 'template', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'animation_type', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'typing' => 'Typing', + 'clip' => 'Clip', + 'flip' => 'Flip', + 'swirl' => 'Swirl', + 'blinds' => 'Blinds', + 'drop-in' => 'Drop-in', + 'wave' => 'Wave', + 'slide' => 'Slide', + 'slide-down' => 'Slide Down', + ], + 'default' => 'typing', + 'condition' => [ + 'headline_style' => 'rotate', + ], + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'marker', + [ + 'label' => __('Shape'), + 'type' => ControlsManager::SELECT, + 'default' => 'circle', + 'options' => [ + 'circle' => _x('Circle', 'Shapes'), + 'curly' => _x('Curly', 'Shapes'), + 'underline' => _x('Underline', 'Shapes'), + 'double' => _x('Double', 'Shapes'), + 'double_underline' => _x('Double Underline', 'Shapes'), + 'underline_zigzag' => _x('Underline Zigzag', 'Shapes'), + 'diagonal' => _x('Diagonal', 'Shapes'), + 'strikethrough' => _x('Strikethrough', 'Shapes'), + 'x' => 'X', + ], + 'render_type' => 'template', + 'condition' => [ + 'headline_style' => 'highlight', + ], + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'before_text', + [ + 'label' => __('Before Text'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('This page is'), + 'placeholder' => __('Enter your headline'), + 'label_block' => true, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'highlighted_text', + [ + 'label' => __('Highlighted Text'), + 'type' => ControlsManager::TEXT, + 'default' => __('Amazing'), + 'label_block' => true, + 'condition' => [ + 'headline_style' => 'highlight', + ], + 'separator' => 'none', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'rotating_text', + [ + 'label' => __('Rotating Text'), + 'type' => ControlsManager::TEXTAREA, + 'placeholder' => __('Enter each word in a separate line'), + 'separator' => 'none', + 'default' => "Better\nBigger\nFaster", + 'rows' => 5, + 'condition' => [ + 'headline_style' => 'rotate', + ], + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'after_text', + [ + 'label' => __('After Text'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('Enter your headline'), + 'label_block' => true, + 'separator' => 'none', + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'alignment', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'default' => 'center', + 'selectors' => [ + '{{WRAPPER}} .elementor-headline' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'tag', + [ + 'label' => __('HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => 'H1', + 'h2' => 'H2', + 'h3' => 'H3', + 'h4' => 'H4', + 'h5' => 'H5', + 'h6' => 'H6', + 'div' => 'div', + 'span' => 'span', + 'p' => 'p', + ], + 'default' => 'h3', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_marker', + [ + 'label' => __('Shape'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'headline_style' => 'highlight', + ], + ] + ); + + $this->addControl( + 'marker_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-headline-dynamic-wrapper path' => 'stroke: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'stroke_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-headline-dynamic-wrapper path' => 'stroke-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'above_content', + [ + 'label' => __('Bring to Front'), + 'type' => ControlsManager::SWITCHER, + 'selectors' => [ + '{{WRAPPER}} .elementor-headline-dynamic-wrapper svg' => 'z-index: 2', + '{{WRAPPER}} .elementor-headline-dynamic-text' => 'z-index: auto', + ], + ] + ); + + $this->addControl( + 'rounded_edges', + [ + 'label' => __('Rounded Edges'), + 'type' => ControlsManager::SWITCHER, + 'selectors' => [ + '{{WRAPPER}} .elementor-headline-dynamic-wrapper path' => 'stroke-linecap: round; stroke-linejoin: round', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_text', + [ + 'label' => __('Headline'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-headline-plain-text' => 'color: {{VALUE}}', + + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-headline', + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-headline', + ] + ); + + $this->addControl( + 'heading_words_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Animated Text'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'words_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-headline-dynamic-text' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'words_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-headline-dynamic-text', + 'exclude' => ['font_size'], + ] + ); + + $this->endControlsSection(); + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $this->addRenderAttribute('headline', 'class', 'elementor-headline'); + + if ('rotate' === $settings['headline_style']) { + $this->addRenderAttribute('headline', [ + 'class' => 'elementor-headline-animation-type-' . $settings['animation_type'], + ]); + + $is_letter_animation = in_array($settings['animation_type'], ['typing', 'swirl', 'blinds', 'wave']); + + if ($is_letter_animation) { + $this->addRenderAttribute('headline', 'class', 'elementor-headline-letters'); + } + } + + if (!empty($settings['link']['url'])) { + $this->addRenderAttribute('url', 'href', $settings['link']['url']); + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('url', 'target', '_blank'); + } + + if (!empty($settings['link']['nofollow'])) { + $this->addRenderAttribute('url', 'rel', 'nofollow'); + } + + echo 'getRenderAttributeString('url'); + } + ?> + < getRenderAttributeString('headline') ?>> + + + + + + + + + + + + > + '; + } + } + + protected function _contentTemplate() + { + ?> + <# + var headlineClasses = 'elementor-headline'; + + if ( 'rotate' === settings.headline_style ) { + headlineClasses += ' elementor-headline-animation-type-' + settings.animation_type; + + var isLetterAnimation = -1 !== [ 'typing', 'swirl', 'blinds', 'wave' ].indexOf( settings.animation_type ); + + if ( isLetterAnimation ) { + headlineClasses += ' elementor-headline-letters'; + } + } + + if ( settings.link.url ) { + print(''); + } + #> + <{{{ settings.tag }}} class="{{{ headlineClasses }}}"> + <# if ( settings.before_text ) { #> + + {{{ settings.before_text }}} + + <# } #> + <# if ( settings.rotating_text ) { #> + + <# } #> + <# if ( settings.after_text ) { #> + + {{{ settings.after_text }}} + + <# } #> + + <# + if ( settings.link.url ) { + print(''); + } + #> + __('Extra Small'), + 'sm' => __('Small'), + 'md' => __('Medium'), + 'lg' => __('Large'), + 'xl' => __('Extra Large'), + ]; + } + + /** + * Register button widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @since 1.0.0 + * @access protected + */ + protected function _registerControls() + { + $this->startControlsSection( + 'section_button', + [ + 'label' => __('Button'), + ] + ); + + $this->addControl( + 'button_type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'info' => __('Info'), + 'success' => __('Success'), + 'warning' => __('Warning'), + 'danger' => __('Danger'), + ], + 'prefix_class' => 'elementor-button-', + ] + ); + + $this->addControl( + 'text', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('Click here'), + 'placeholder' => __('Click here'), + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('https://your-link.com'), + 'default' => [ + 'url' => '#', + ], + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'prefix_class' => 'elementor%s-align-', + 'default' => '', + ] + ); + + $this->addControl( + 'size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'default' => 'sm', + 'options' => self::getButtonSizes(), + 'style_transfer' => true, + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => true, + 'default' => '', + ] + ); + + $this->addControl( + 'icon_align', + [ + 'label' => __('Icon Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'left', + 'options' => [ + 'left' => __('Before'), + 'right' => __('After'), + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'icon_indent', + [ + 'label' => __('Icon Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button-content-wrapper' => 'gap: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-button-text' => 'flex-grow: min(0, {{SIZE}})', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->addControl( + 'button_css_id', + [ + 'label' => __('Button ID'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => '', + 'title' => __('Add your custom id WITHOUT the Pound key. e.g: my-id'), + 'label_block' => false, + 'description' => __( + 'Please make sure the ID is unique and not used elsewhere on the page this form is displayed. ' . + 'This field allows A-z 0-9 & underscore chars without spaces.' + ), + 'separator' => 'before', + + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style', + [ + 'label' => __('Button'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + 'selector' => '{{WRAPPER}} a.elementor-button', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'text_shadow', + 'selector' => '{{WRAPPER}} .elementor-button', + ] + ); + + $this->startControlsTabs('tabs_button_style'); + + $this->startControlsTab( + 'tab_button_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'button_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_button_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'hover_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:not(#e):hover, {{WRAPPER}} a.elementor-button:not(#e):focus' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_background_hover_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:hover, {{WRAPPER}} a.elementor-button:focus' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_hover_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'condition' => [ + 'border_border!' => '', + ], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:hover, {{WRAPPER}} a.elementor-button:focus' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border', + 'selector' => '{{WRAPPER}} .elementor-button', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'button_box_shadow', + 'selector' => '{{WRAPPER}} .elementor-button', + ] + ); + + $this->addResponsiveControl( + 'text_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render button widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if (!empty($settings['link']['url'])) { + $this->addRenderAttribute('button', 'href', $settings['link']['url']); + $this->addRenderAttribute('button', 'class', 'elementor-button-link'); + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('button', 'target', '_blank'); + } + + if ($settings['link']['nofollow']) { + $this->addRenderAttribute('button', 'rel', 'nofollow'); + } + } + + $this->addRenderAttribute([ + 'button' => [ + 'class' => 'elementor-button', + 'role' => 'button', + ], + 'text' => [ + 'class' => 'elementor-button-text', + ], + ]); + + if (!empty($settings['button_css_id'])) { + $this->addRenderAttribute('button', 'id', $settings['button_css_id']); + } + + if (!empty($settings['size'])) { + $this->addRenderAttribute('button', 'class', 'elementor-size-' . $settings['size']); + } + + if ($settings['hover_animation']) { + $this->addRenderAttribute('button', 'class', 'elementor-animation-' . $settings['hover_animation']); + } + + $this->addInlineEditingAttributes('text', 'none'); + ?> + + + <# + view.addRenderAttribute( 'button', { + 'class': [ + 'elementor-button', + 'elementor-size-' + settings.size, + 'elementor-animation-' + settings.hover_animation + ], + 'href': settings.link.url + } ); + view.addRenderAttribute( 'text', 'class', 'elementor-button-text' ); + + view.addInlineEditingAttributes( 'text', 'none' ); + #> + + startControlsSection( + 'section_cta', + [ + 'label' => __('Call to Action'), + ] + ); + + $this->addControl( + 'skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'classic' => __('Classic'), + 'cover' => __('Cover'), + ], + 'render_type' => 'template', + 'prefix_class' => 'elementor-cta--skin-', + 'default' => 'classic', + ] + ); + + $this->addControl( + 'bg_image', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'dynamic' => [ + 'active' => true, + ], + 'seo' => true, + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'layout', + [ + 'label' => __('Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'above' => [ + 'title' => __('Above'), + 'icon' => 'eicon-v-align-top', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'prefix_class' => 'elementor-cta-%s-layout-image-', + 'condition' => [ + 'skin' => 'classic', + 'bg_image[url]!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'image_min_width', + [ + 'label' => __('Min Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 500, + ], + '%' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-bg-wrapper' => 'min-width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'skin' => 'classic', + 'bg_image[url]!' => '', + 'layout' => ['left', 'right'], + ], + ] + ); + + $this->addResponsiveControl( + 'image_min_height', + [ + 'label' => __('Min Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 500, + ], + 'vh' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'size_units' => ['px', 'vh'], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-bg-wrapper' => 'min-height: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'skin' => 'classic', + 'bg_image[url]!' => '', + 'layout' => ['', 'above'], + ], + ] + ); + + $this->addControl( + 'ribbon_title', + [ + 'label' => __('Ribbon'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Enter your title'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'ribbon_horizontal_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'condition' => [ + 'ribbon_title!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_content', + [ + 'label' => __('Content'), + ] + ); + + $this->addControl( + 'graphic_element', + [ + 'label' => __('Graphic Element'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'none' => [ + 'title' => __('None'), + 'icon' => 'fa fa-ban', + ], + 'image' => [ + 'title' => __('Image'), + 'icon' => 'fa fa-picture-o', + ], + 'icon' => [ + 'title' => __('Icon'), + 'icon' => 'fa fa-star', + ], + ], + 'default' => 'none', + ] + ); + + $this->addControl( + 'graphic_image', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'dynamic' => [ + 'active' => true, + ], + 'seo' => true, + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + 'condition' => [ + 'graphic_element' => 'image', + ], + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-star', + 'condition' => [ + 'graphic_element' => 'icon', + ], + ] + ); + + $this->addControl( + 'icon_view', + [ + 'label' => __('View'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + 'stacked' => __('Stacked'), + 'framed' => __('Framed'), + ], + 'default' => 'default', + 'condition' => [ + 'graphic_element' => 'icon', + ], + ] + ); + + $this->addControl( + 'icon_shape', + [ + 'label' => __('Shape'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'circle' => __('Circle'), + 'square' => __('Square'), + ], + 'default' => 'circle', + 'condition' => [ + 'icon_view!' => 'default', + 'graphic_element' => 'icon', + ], + ] + ); + + $this->addControl( + 'title', + [ + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('This is the heading'), + 'placeholder' => __('Enter your title'), + 'label_block' => true, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'description_text', + [ + 'label' => __('Description'), + 'type' => ControlsManager::TEXTAREA, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit.'), + 'placeholder' => __('Enter your description'), + 'rows' => 5, + 'show_label' => false, + ] + ); + + $this->addControl( + 'title_tag', + [ + 'label' => __('Title HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => 'H1', + 'h2' => 'H2', + 'h3' => 'H3', + 'h4' => 'H4', + 'h5' => 'H5', + 'h6' => 'H6', + 'div' => 'div', + 'span' => 'span', + ], + 'default' => 'h2', + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addControl( + 'button', + [ + 'label' => __('Button Text'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('Click Here'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('https://your-link.com'), + ] + ); + + $this->addControl( + 'link_click', + [ + 'label' => __('Apply Link On'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'box' => __('Whole Box'), + 'button' => __('Button Only'), + ], + 'default' => 'button', + 'condition' => [ + 'button!' => '', + 'link[url]!' => '', + ], + ] + ); + + $this->addControl( + 'button_icon', + [ + 'label' => __('Button Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => false, + 'default' => '', + 'condition' => [ + 'button!' => '', + ], + ] + ); + + $this->addControl( + 'button_icon_align', + [ + 'label' => __('Icon Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'left', + 'options' => [ + 'left' => __('Before'), + 'right' => __('After'), + ], + 'condition' => [ + 'button!' => '', + 'button_icon!' => '', + ], + ] + ); + + $this->addControl( + 'button_icon_indent', + [ + 'label' => __('Icon Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button-content-wrapper' => 'gap: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-button-text' => 'flex-grow: min(0, {{SIZE}})', + ], + 'condition' => [ + 'button!' => '', + 'button_icon!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_box', + [ + 'label' => __('Box'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'min-height', + [ + 'label' => __('Min Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 100, + 'max' => 1000, + ], + 'vh' => [ + 'min' => 10, + 'max' => 100, + ], + ], + 'size_units' => ['px', 'vh'], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-content' => 'min-height: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'alignment', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'default' => 'center', + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-content' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'vertical_position', + [ + 'label' => __('Vertical Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'top' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'middle' => [ + 'title' => __('Middle'), + 'icon' => 'eicon-v-align-middle', + ], + 'bottom' => [ + 'title' => __('Bottom'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'prefix_class' => 'elementor-cta--valign-', + ] + ); + + $this->addResponsiveControl( + 'padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_ribbon', + [ + 'label' => __('Ribbon'), + 'tab' => ControlsManager::TAB_STYLE, + 'show_label' => false, + 'condition' => [ + 'ribbon_title!' => '', + ], + ] + ); + + $ribbon_distance_transform = is_rtl() + ? 'translateY(-50%) translateX({{SIZE}}{{UNIT}}) rotate(-45deg)' + : 'translateY(-50%) translateX(-50%) translateX({{SIZE}}{{UNIT}}) rotate(-45deg)' + ; + $this->addResponsiveControl( + 'ribbon_distance', + [ + 'label' => __('Distance'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-ribbon-inner' => 'margin-top: {{SIZE}}{{UNIT}}; transform: ' . $ribbon_distance_transform, + ], + ] + ); + + $this->addControl( + 'ribbon_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-ribbon-inner' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'ribbon_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-ribbon-inner' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'ribbon_typography', + 'selector' => '{{WRAPPER}} .elementor-ribbon-inner', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow', + 'selector' => '{{WRAPPER}} .elementor-ribbon-inner', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_image', + [ + 'label' => __('Image'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'graphic_element' => 'image', + ], + ] + ); + + $this->addControl( + 'graphic_image_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-image' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'graphic_image_width', + [ + 'label' => __('Size (%)'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%'], + 'default' => [ + 'unit' => '%', + ], + 'range' => [ + '%' => [ + 'min' => 5, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-image img' => 'width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'graphic_image_opacity', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1, + 'min' => 0.10, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-image' => 'opacity: {{SIZE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'graphic_image_border', + 'selector' => '{{WRAPPER}} .elementor-cta-image img', + ] + ); + + $this->addControl( + 'graphic_image_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 200, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-image img' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_icon', + [ + 'label' => __('Icon'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'graphic_element' => 'icon', + ], + ] + ); + + $this->addControl( + 'icon_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-wrapper' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'icon_primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-view-stacked .elementor-icon' => 'background-color: {{VALUE}}', + '{{WRAPPER}} .elementor-view-framed .elementor-icon, {{WRAPPER}} .elementor-view-default .elementor-icon' => 'color: {{VALUE}}; border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'icon_secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-view-framed .elementor-icon' => 'background-color: {{VALUE}};', + '{{WRAPPER}} .elementor-view-stacked .elementor-icon' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'icon_view!' => 'default', + ], + ] + ); + + $this->addControl( + 'icon_size', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 6, + 'max' => 300, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'font-size: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'icon_padding', + [ + 'label' => __('Icon Padding'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};', + ], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + ], + ], + 'condition' => [ + 'icon_view!' => 'default', + ], + ] + ); + + $this->addControl( + 'icon_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'border-width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'icon_view' => 'framed', + ], + ] + ); + + $this->addControl( + 'icon_rotate', + [ + 'label' => __('Icon Rotate'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => 'deg', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon i' => 'transform: rotate({{SIZE}}{{UNIT}});', + ], + ] + ); + + $this->addControl( + 'icon_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'icon_view!' => 'default', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_content', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'title', + 'operator' => '!==', + 'value' => '', + ], + [ + 'name' => 'description_text', + 'operator' => '!==', + 'value' => '', + ], + [ + 'name' => 'button', + 'operator' => '!==', + 'value' => '', + ], + ], + ], + ] + ); + + $this->addControl( + 'heading_style_title', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Title'), + 'separator' => 'before', + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'title_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-title:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-cta-title', + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-cta-title', + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addControl( + 'heading_style_description', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Description'), + 'separator' => 'before', + 'condition' => [ + 'description_text!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'description_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-description:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'description_text!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'description_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} .elementor-cta-description', + 'condition' => [ + 'description_text!' => '', + ], + ] + ); + + $this->addControl( + 'heading_content_colors', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Colors'), + 'separator' => 'before', + ] + ); + + $this->startControlsTabs('color_tabs'); + + $this->startControlsTab( + 'colors_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Title Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-title' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addControl( + 'description_color', + [ + 'label' => __('Description Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-description' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'description_text!' => '', + ], + ] + ); + + $this->addControl( + 'content_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-content' => 'background-color: {{VALUE}}', + ], + 'condition' => [ + 'skin' => 'classic', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'colors_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'title_color_hover', + [ + 'label' => __('Title Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta:hover .elementor-cta-title' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addControl( + 'description_color_hover', + [ + 'label' => __('Description Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta:hover .elementor-cta-description' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'description_text!' => '', + ], + ] + ); + + $this->addControl( + 'content_bg_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta:hover .elementor-cta-content' => 'background-color: {{VALUE}}', + ], + 'condition' => [ + 'skin' => 'classic', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_button', + [ + 'label' => __('Button'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'button!' => '', + ], + ] + ); + + $this->addControl( + 'button_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'default' => 'sm', + 'options' => [ + 'xs' => __('Extra Small'), + 'sm' => __('Small'), + 'md' => __('Medium'), + 'lg' => __('Large'), + 'xl' => __('Extra Large'), + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'button_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .elementor-button', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + ] + ); + + $this->startControlsTabs('button_tabs'); + + $this->startControlsTab( + 'button_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'button_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button.elementor-button:not(#e), {{WRAPPER}} a.elementor-button:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'button-hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'button_hover_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button.elementor-button:not(#e):hover, {{WRAPPER}} a.elementor-button:not(#e):hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_hover_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button:hover' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_hover_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button:hover' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'button_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'border-width: {{SIZE}}{{UNIT}};', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'button_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'border-radius: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_hover_effects', + [ + 'label' => __('Hover Effects'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'content_hover_heading', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Content'), + 'separator' => 'before', + 'condition' => [ + 'skin' => 'cover', + ], + ] + ); + + $this->addControl( + 'content_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => 'None', + 'enter-from-right' => 'Slide In Right', + 'enter-from-left' => 'Slide In Left', + 'enter-from-top' => 'Slide In Up', + 'enter-from-bottom' => 'Slide In Down', + 'enter-zoom-in' => 'Zoom In', + 'enter-zoom-out' => 'Zoom Out', + 'fade-in' => 'Fade In', + 'grow' => 'Grow', + 'shrink' => 'Shrink', + 'move-right' => 'Move Right', + 'move-left' => 'Move Left', + 'move-up' => 'Move Up', + 'move-down' => 'Move Down', + 'exit-to-right' => 'Slide Out Right', + 'exit-to-left' => 'Slide Out Left', + 'exit-to-top' => 'Slide Out Up', + 'exit-to-bottom' => 'Slide Out Down', + 'exit-zoom-in' => 'Zoom In', + 'exit-zoom-out' => 'Zoom Out', + 'fade-out' => 'Fade Out', + ], + 'default' => 'grow', + 'condition' => [ + 'skin' => 'cover', + ], + ] + ); + + /* + * Add class 'elementor-animated-content' to widget when assigned content animation + */ + $this->addControl( + 'animation_class', + [ + 'label' => 'Animation', + 'type' => ControlsManager::HIDDEN, + 'default' => 'animated-content', + 'prefix_class' => 'elementor-', + 'condition' => [ + 'content_animation!' => '', + ], + ] + ); + + $this->addControl( + 'content_animation_duration', + [ + 'label' => __('Animation Duration'), + 'type' => ControlsManager::SLIDER, + 'render_type' => 'template', + 'default' => [ + 'size' => 1000, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 3000, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-content-item' => 'transition-duration: {{SIZE}}ms', + '{{WRAPPER}}.elementor-cta--sequenced-animation .elementor-content-item:nth-child(2)' => 'transition-delay: calc( {{SIZE}}ms / 3 )', + '{{WRAPPER}}.elementor-cta--sequenced-animation .elementor-content-item:nth-child(3)' => 'transition-delay: calc( ( {{SIZE}}ms / 3 ) * 2 )', + '{{WRAPPER}}.elementor-cta--sequenced-animation .elementor-content-item:nth-child(4)' => 'transition-delay: calc( ( {{SIZE}}ms / 3 ) * 3 )', + ], + 'condition' => [ + 'content_animation!' => '', + 'skin' => 'cover', + ], + ] + ); + + $this->addControl( + 'sequenced_animation', + [ + 'label' => __('Sequenced Animation'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('On'), + 'label_off' => __('Off'), + 'return_value' => 'elementor-cta--sequenced-animation', + 'prefix_class' => '', + 'condition' => [ + 'content_animation!' => '', + 'skin' => 'cover', + ], + ] + ); + + $this->addControl( + 'background_hover_heading', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Background'), + 'separator' => 'before', + 'condition' => [ + 'skin' => 'cover', + ], + ] + ); + + $this->addControl( + 'transformation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => 'None', + 'zoom-in' => 'Zoom In', + 'zoom-out' => 'Zoom Out', + 'move-left' => 'Move Left', + 'move-right' => 'Move Right', + 'move-up' => 'Move Up', + 'move-down' => 'Move Down', + ], + 'default' => 'zoom-in', + 'prefix_class' => 'elementor-bg-transform elementor-bg-transform-', + ] + ); + + $this->startControlsTabs('bg_effects_tabs'); + + $this->startControlsTab( + 'normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'overlay_color', + [ + 'label' => __('Overlay Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta:not(:hover) .elementor-cta-bg-overlay' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'bg_filters', + 'selector' => '{{WRAPPER}} .elementor-cta-bg', + ] + ); + + $this->addControl( + 'overlay_blend_mode', + [ + 'label' => __('Blend Mode'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Normal'), + 'multiply' => 'Multiply', + 'screen' => 'Screen', + 'overlay' => 'Overlay', + 'darken' => 'Darken', + 'lighten' => 'Lighten', + 'color-dodge' => 'Color Dodge', + 'color-burn' => 'Color Burn', + 'hue' => 'Hue', + 'saturation' => 'Saturation', + 'color' => 'Color', + 'exclusion' => 'Exclusion', + 'luminosity' => 'Luminosity', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta-bg-overlay' => 'mix-blend-mode: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'overlay_color_hover', + [ + 'label' => __('Overlay Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cta:hover .elementor-cta-bg-overlay' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'bg_filters_hover', + 'selector' => '{{WRAPPER}}:hover .elementor-cta-bg', + ] + ); + + $this->addControl( + 'effect_duration', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'render_type' => 'template', + 'default' => [ + 'size' => 1500, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 3000, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cta .elementor-cta-bg, {{WRAPPER}} .elementor-cta .elementor-cta-bg-overlay' => 'transition-duration: {{SIZE}}ms', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $title_tag = $settings['title_tag']; + $wrapper_tag = 'div'; + $button_tag = 'a'; + $link_url = empty($settings['link']['url']) ? false : $settings['link']['url']; + $content_animation = $settings['content_animation']; + $animation = ['class' => '']; + $print_bg = 'cover' === $settings['skin'] || !empty($settings['bg_image']['url']); + $print_content = true; + + if (empty($settings['title']) && empty($settings['description_text']) && empty($settings['button']) && 'none' === $settings['graphic_element']) { + $print_content = false; + } + + $this->addRenderAttribute([ + 'wrapper' => [ + 'class' => 'elementor-cta', + ], + 'graphic_element' => [ + 'class' => 'elementor-content-item', + ], + 'title' => [ + 'class' => 'elementor-cta-title elementor-content-item', + ], + 'description_text' => [ + 'class' => 'elementor-cta-description elementor-content-item', + ], + 'btn' => [ + 'class' => 'elementor-button elementor-size-' . $settings['button_size'], + ], + 'button_icon' => [ + 'class' => 'elementor-button-icon elementor-align-icon-' . $settings['button_icon_align'], + ], + 'button' => [ + 'class' => 'elementor-button-text', + ], + ]); + + if ('icon' === $settings['graphic_element']) { + $this->addRenderAttribute('graphic_element', 'class', [ + 'elementor-icon-wrapper', + 'elementor-cta-icon', + 'elementor-view-' . $settings['icon_view'] + ]); + + if ('default' !== $settings['icon_view']) { + $this->addRenderAttribute('graphic_element', 'class', 'elementor-shape-' . $settings['icon_shape']); + } + if (!empty($settings['icon'])) { + $this->addRenderAttribute('icon', 'class', $settings['icon']); + } + } elseif ('image' === $settings['graphic_element'] && !empty($settings['graphic_image']['url'])) { + $this->addRenderAttribute('graphic_element', 'class', 'elementor-cta-image'); + } + + if (!empty($content_animation) && 'cover' == $settings['skin']) { + $animation['class'] = 'elementor-animated-item--' . $content_animation; + + $this->addRenderAttribute([ + 'graphic_element' => $animation, + 'title' => $animation, + 'description_text' => $animation, + ]); + } + + if (!empty($link_url)) { + if ('box' === $settings['link_click'] || empty($settings['button'])) { + $wrapper_tag = 'a'; + $button_tag = 'button'; + $this->addRenderAttribute('wrapper', 'href', $link_url); + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('wrapper', 'target', '_blank'); + } + if ($settings['link']['nofollow']) { + $this->addRenderAttribute('wrapper', 'rel', 'nofollow'); + } + } else { + $this->addRenderAttribute('btn', 'href', $link_url); + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('btn', 'target', '_blank'); + } + if ($settings['link']['nofollow']) { + $this->addRenderAttribute('btn', 'rel', 'nofollow'); + } + } + } + + $this->addInlineEditingAttributes('title', 'none'); + $this->addInlineEditingAttributes('description_text'); + $this->addInlineEditingAttributes('button', 'none'); + ?> + < getRenderAttributeString('wrapper') ?>> + +
+ +
+
+ + +
+ +
getRenderAttributeString('graphic_element') ?>> + +
+ +
getRenderAttributeString('graphic_element') ?>> +
+ getRenderAttributeString('icon') ?>> +
+
+ + + + < getRenderAttributeString('title') ?>> + + > + + + +
getRenderAttributeString('description_text') ?>> + +
+ + + +
+ < getRenderAttributeString('btn') ?>> + + + getRenderAttributeString('button_icon') ?>> + + + + getRenderAttributeString('button') ?>> + + > +
+ +
+ + + addRenderAttribute('ribbon-wrapper', 'class', 'elementor-ribbon'); + + if (!empty($settings['ribbon_horizontal_position'])) { + $this->addRenderAttribute( + 'ribbon-wrapper', + 'class', + 'elementor-ribbon-' . $settings['ribbon_horizontal_position'] + ); + } + ?> +
getRenderAttributeString('ribbon-wrapper') ?>> +
+
+ + > + + <# + var wrapperTag = 'div', + buttonTag = 'a', + animation = {'class': ''}, + btnSizeClass = 'elementor-size-' + settings.button_size, + printBg = true, + printContent = true; + + if ( 'box' === settings.link_click || !settings.button ) { + wrapperTag = 'a'; + buttonTag = 'button'; + view.addRenderAttribute( 'wrapper', 'href', '#' ); + } + + if ( settings.bg_image.url ) { + view.addRenderAttribute( 'bg_image', 'src', elementor.imagesManager.getImageUrl( settings.bg_image ) ); + } else if ( 'classic' === settings.skin ) { + printBg = false; + } + + if ( !settings.title && !settings.description_text && !settings.button && 'none' == settings.graphic_element ) { + printContent = false; + } + + if ( 'icon' === settings.graphic_element ) { + var iconWrapperClasses = 'elementor-icon-wrapper'; + iconWrapperClasses += ' elementor-cta-image'; + iconWrapperClasses += ' elementor-view-' + settings.icon_view; + if ( 'default' !== settings.icon_view ) { + iconWrapperClasses += ' elementor-shape-' + settings.icon_shape; + } + view.addRenderAttribute( 'graphic_element', 'class', iconWrapperClasses ); + + } else if ( 'image' === settings.graphic_element && settings.graphic_image.url ) { + var imageUrl = elementor.imagesManager.getImageUrl( settings.graphic_image ); + + view.addRenderAttribute( 'graphic_element', 'class', 'elementor-cta-image' ); + } + + if ( settings.content_animation && 'cover' === settings.skin ) { + animation['class'] = 'elementor-animated-item--' + settings.content_animation; + + view.addRenderAttribute( { + graphic_element: animation, + title: animation, + description_text: animation, + } ); + } + + view.addRenderAttribute( 'title', 'class', 'elementor-cta-title elementor-content-item' ); + view.addRenderAttribute( 'description_text', 'class', 'elementor-cta-description elementor-content-item' ); + view.addRenderAttribute( 'button', 'class', 'elementor-button-text' ); + view.addRenderAttribute( 'graphic_element', 'class', 'elementor-content-item' ); + + view.addInlineEditingAttributes( 'title', 'none' ); + view.addInlineEditingAttributes( 'description_text' ); + view.addInlineEditingAttributes( 'button', 'none' ); + #> + <{{ wrapperTag }} class="elementor-cta" {{{ view.getRenderAttributeString( 'wrapper' ) }}}> + <# if ( printBg ) { #> +
+ <# if ( settings.bg_image.url ) { #> + + <# } #> +
+
+ <# } #> + <# if ( printContent ) { #> +
+ <# if ( imageUrl ) { #> +
+ +
+ <# } else if ( 'icon' === settings.graphic_element && settings.icon ) { #> +
+
+ +
+
+ <# } #> + <# if ( settings.title ) { #> + <{{ settings.title_tag }} {{{ view.getRenderAttributeString( 'title' ) }}}> + {{{ settings.title }}} + + <# } #> + <# if ( settings.description_text ) { #> +
{{{ settings.description_text }}}
+ <# } #> + <# if ( settings.button ) { #> +
+ <{{ buttonTag }} href="#" class="elementor-button {{ btnSizeClass }}"> + + <# if ( settings.button_icon ) { #> + + + + <# } #> + {{{ settings.button }}} + + +
+ <# } #> +
+ <# } #> + <# if ( settings.ribbon_title ) { + var ribbonClasses = 'elementor-ribbon'; + + if ( settings.ribbon_horizontal_position ) { + ribbonClasses += ' elementor-ribbon-' + settings.ribbon_horizontal_position; + } #> +
+
{{{ settings.ribbon_title }}}
+
+ <# } #> + + registerCategoryTreeSection(); + } + + protected function render() + { + $settings = $this->getSettings(); + $category = $this->getRootCategory($settings['root_category']); + $tpl = 'ps_categorytree/views/templates/hook/ps_categorytree.tpl'; + $theme_tpl = _PS_THEME_DIR_ . 'modules/' . $tpl; + + $this->context->smarty->assign([ + 'currentCategory' => $category->id, + 'categories' => $this->getCategoryTree($category, $settings), + ]); + + echo $this->context->smarty->fetch(file_exists($theme_tpl) ? $theme_tpl : _PS_MODULE_DIR_ . $tpl); + } +} diff --git a/modules/creativeelements/includes/widgets/common.php b/modules/creativeelements/includes/widgets/common.php new file mode 100644 index 00000000..873caa8e --- /dev/null +++ b/modules/creativeelements/includes/widgets/common.php @@ -0,0 +1,1435 @@ +startControlsSection( + '_section_style', + [ + 'label' => __('Layout'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addControl( + '_title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::HIDDEN, + 'render_type' => 'none', + ] + ); + + $this->addResponsiveControl( + '_margin', + [ + 'label' => __('Margin'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} > .elementor-widget-container' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + '_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} > .elementor-widget-container' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + '_element_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'inherit' => __('Full Width') . ' (100%)', + 'auto' => __('Inline') . ' (auto)', + 'initial' => __('Custom'), + 'calc' => __('Calculate'), + ], + 'selectors_dictionary' => [ + 'inherit' => '100%', + 'calc' => 'initial', + ], + 'prefix_class' => 'elementor-widget%s__width-', + 'selectors' => [ + '{{WRAPPER}}' => 'width: {{VALUE}}; max-width: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + '_element_custom_width', + [ + 'label' => __('Custom Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1000, + 'step' => 1, + ], + ], + 'condition' => [ + '_element_width' => 'initial', + ], + 'device_args' => [ + ControlsStack::RESPONSIVE_TABLET => [ + 'condition' => [ + '_element_width_tablet' => 'initial', + ], + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'condition' => [ + '_element_width_mobile' => 'initial', + ], + ], + ], + 'size_units' => ['px', '%', 'vw'], + 'selectors' => [ + '{{WRAPPER}}' => 'width: {{SIZE}}{{UNIT}}; max-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + '_element_calc_width', + [ + 'label' => 'Calc', + 'type' => ControlsManager::TEXT, + 'placeholder' => __('e.g:') . ' 100% - 20px', + 'condition' => [ + '_element_width' => 'calc', + ], + 'device_args' => [ + ControlsStack::RESPONSIVE_TABLET => [ + 'condition' => [ + '_element_width_tablet' => 'calc', + ], + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'condition' => [ + '_element_width_mobile' => 'calc', + ], + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => 'width: calc({{VALUE}}); max-width: calc({{VALUE}})', + ], + ] + ); + + $this->addResponsiveControl( + '_element_min_width', + [ + 'label' => __('Min Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1000, + 'step' => 1, + ], + ], + 'condition' => [ + '_element_width' => 'calc', + ], + 'device_args' => [ + ControlsStack::RESPONSIVE_TABLET => [ + 'condition' => [ + '_element_width_tablet' => 'calc', + ], + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'condition' => [ + '_element_width_mobile' => 'calc', + ], + ], + ], + 'size_units' => ['px', '%', 'vw'], + 'selectors' => [ + '{{WRAPPER}}' => 'min-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + '_element_vertical_align', + [ + 'label' => __('Vertical Align'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'flex-start' => [ + 'title' => __('Start'), + 'icon' => 'eicon-v-align-top', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-v-align-middle', + ], + 'flex-end' => [ + 'title' => __('End'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'condition' => [ + '_element_width!' => '', + '_position' => '', + ], + 'selectors' => [ + '{{WRAPPER}}' => 'align-self: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + '_flex_order', + [ + 'label' => __('Order'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'start' => [ + 'title' => __('Start'), + 'icon' => 'eicon-v-align-top', + ], + 'end' => [ + 'title' => __('End'), + 'icon' => 'eicon-v-align-bottom', + ], + 'custom' => [ + 'title' => __('Custom'), + 'icon' => 'eicon-ellipsis-v', + ], + ], + 'selectors_dictionary' => [ + 'start' => '-99999', + 'end' => '99999', + 'custom' => '', + ], + 'selectors' => [ + '{{WRAPPER}}' => 'order: {{VALUE}};', + ], + 'condition' => [ + '_position' => '', + ], + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + '_flex_order_custom', + [ + 'label' => __('Custom Order'), + 'type' => ControlsManager::NUMBER, + 'condition' => [ + '_position' => '', + '_flex_order' => 'custom', + ], + 'device_args' => [ + ControlsStack::RESPONSIVE_TABLET => [ + 'condition' => [ + '_position' => '', + '_flex_order_tablet' => 'custom', + ], + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'condition' => [ + '_position' => '', + '_flex_order_mobile' => 'custom', + ], + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => 'order: {{VALUE}};', + ], + ] + ); + + $warning = __('Custom positioning is not considered best practice for responsive web design and should not be used too frequently.'); + + $this->addControl( + '_position_description', + [ + 'raw' => '' . __('Please note!') . ' ' . $warning, + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning', + 'render_type' => 'ui', + 'condition' => [ + '_position!' => '', + ], + ] + ); + + $this->addControl( + '_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'absolute' => __('Absolute'), + 'fixed' => __('Fixed'), + ], + 'prefix_class' => 'elementor-', + 'frontend_available' => true, + ] + ); + + $start = is_rtl() ? __('Right') : __('Left'); + $end = !is_rtl() ? __('Right') : __('Left'); + + $this->addControl( + '_offset_orientation_h', + [ + 'label' => __('Horizontal Orientation'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'toggle' => false, + 'default' => 'start', + 'options' => [ + 'start' => [ + 'title' => $start, + 'icon' => 'eicon-h-align-left', + ], + 'end' => [ + 'title' => $end, + 'icon' => 'eicon-h-align-right', + ], + ], + 'classes' => 'elementor-control-start-end', + 'render_type' => 'ui', + 'condition' => [ + '_position!' => '', + ], + ] + ); + + $this->addResponsiveControl( + '_offset_x', + [ + 'label' => __('Offset'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -1000, + 'max' => 1000, + 'step' => 1, + ], + '%' => [ + 'min' => -200, + 'max' => 200, + ], + 'vw' => [ + 'min' => -200, + 'max' => 200, + ], + 'vh' => [ + 'min' => -200, + 'max' => 200, + ], + ], + 'default' => [ + 'size' => '0', + ], + 'size_units' => ['px', '%', 'vw', 'vh'], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}}' => 'left: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}}' => 'right: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + '_offset_orientation_h!' => 'end', + '_position!' => '', + ], + ] + ); + + $this->addResponsiveControl( + '_offset_x_end', + [ + 'label' => __('Offset'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -1000, + 'max' => 1000, + 'step' => 1, + ], + '%' => [ + 'min' => -200, + 'max' => 200, + ], + 'vw' => [ + 'min' => -200, + 'max' => 200, + ], + 'vh' => [ + 'min' => -200, + 'max' => 200, + ], + ], + 'default' => [ + 'size' => '0', + ], + 'size_units' => ['px', '%', 'vw', 'vh'], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}}' => 'right: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}}' => 'left: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + '_offset_orientation_h' => 'end', + '_position!' => '', + ], + ] + ); + + $this->addControl( + '_offset_orientation_v', + [ + 'label' => __('Vertical Orientation'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'toggle' => false, + 'default' => 'start', + 'options' => [ + 'start' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'end' => [ + 'title' => __('Bottom'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'render_type' => 'ui', + 'condition' => [ + '_position!' => '', + ], + ] + ); + + $this->addResponsiveControl( + '_offset_y', + [ + 'label' => __('Offset'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -1000, + 'max' => 1000, + 'step' => 1, + ], + '%' => [ + 'min' => -200, + 'max' => 200, + ], + 'vh' => [ + 'min' => -200, + 'max' => 200, + ], + 'vw' => [ + 'min' => -200, + 'max' => 200, + ], + ], + 'size_units' => ['px', '%', 'vh', 'vw'], + 'default' => [ + 'size' => '0', + ], + 'selectors' => [ + '{{WRAPPER}}' => 'top: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + '_offset_orientation_v!' => 'end', + '_position!' => '', + ], + ] + ); + + $this->addResponsiveControl( + '_offset_y_end', + [ + 'label' => __('Offset'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -1000, + 'max' => 1000, + 'step' => 1, + ], + '%' => [ + 'min' => -200, + 'max' => 200, + ], + 'vh' => [ + 'min' => -200, + 'max' => 200, + ], + 'vw' => [ + 'min' => -200, + 'max' => 200, + ], + ], + 'size_units' => ['px', '%', 'vh', 'vw'], + 'default' => [ + 'size' => '0', + ], + 'selectors' => [ + '{{WRAPPER}}' => 'bottom: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + '_offset_orientation_v' => 'end', + '_position!' => '', + ], + ] + ); + + $this->addControl( + '_z_index', + [ + 'label' => __('Z-Index'), + 'type' => ControlsManager::NUMBER, + 'min' => 0, + 'selectors' => [ + '{{WRAPPER}}' => 'z-index: {{VALUE}};', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + '_element_id', + [ + 'label' => __('CSS ID'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + // 'active' => true, + ], + 'default' => '', + 'title' => __('Add your custom id WITHOUT the Pound key. e.g: my-id'), + 'label_block' => false, + 'style_transfer' => false, + ] + ); + + $this->addControl( + '_css_classes', + [ + 'label' => __('CSS Classes'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + // 'active' => true, + ], + 'prefix_class' => '', + 'title' => __('Add your custom class WITHOUT the dot. e.g: my-class'), + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_effects', + [ + 'label' => __('Motion Effects'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addResponsiveControl( + '_animation', + [ + 'label' => __('Entrance Animation'), + 'type' => ControlsManager::ANIMATION, + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'animation_duration', + [ + 'label' => __('Animation Duration'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + 'slow' => __('Slow'), + '' => __('Normal'), + 'fast' => __('Fast'), + ], + 'prefix_class' => 'animated-', + 'condition' => [ + '_animation!' => ['', 'none'], + ], + ] + ); + + $this->addControl( + '_animation_delay', + [ + 'label' => __('Animation Delay') . ' (ms)', + 'type' => ControlsManager::NUMBER, + 'default' => '', + 'min' => 0, + 'step' => 100, + 'condition' => [ + '_animation!' => ['', 'none'], + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $this->endControlsSection(); + + $this->registerTransformSection(); + + $this->startControlsSection( + '_section_background', + [ + 'label' => __('Background'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->startControlsTabs('_tabs_background'); + + $this->startControlsTab( + '_tab_background_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => '_background', + 'selector' => '{{WRAPPER}} > .elementor-widget-container', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + '_tab_background_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => '_background_hover', + 'selector' => '{{WRAPPER}}:hover .elementor-widget-container', + ] + ); + + $this->addControl( + '_background_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-widget-container' => '--e-background-transition-duration: {{SIZE}}s', + ], + 'separator' => 'before', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + '_section_border', + [ + 'label' => __('Border'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->startControlsTabs('_tabs_border'); + + $this->startControlsTab( + '_tab_border_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => '_border', + 'selector' => '{{WRAPPER}} > .elementor-widget-container', + ] + ); + + $this->addResponsiveControl( + '_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} > .elementor-widget-container' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => '_box_shadow', + 'selector' => '{{WRAPPER}} > .elementor-widget-container', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + '_tab_border_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => '_border_hover', + 'selector' => '{{WRAPPER}}:hover .elementor-widget-container', + ] + ); + + $this->addResponsiveControl( + '_border_radius_hover', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}}:hover > .elementor-widget-container' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => '_box_shadow_hover', + 'selector' => '{{WRAPPER}}:hover .elementor-widget-container', + ] + ); + + $this->addControl( + '_border_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'separator' => 'before', + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-widget-container' => '--e-border-transition-duration: {{SIZE}}s', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + '_section_responsive', + [ + 'label' => __('Responsive'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->addControl( + 'responsive_description', + [ + 'raw' => __('Attention: The display settings (show/hide for mobile, tablet or desktop) will only take effect once you are on the preview or live page, and not while you\'re in editing mode in Elementor.'), + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-descriptor', + ] + ); + + $this->addControl( + 'hide_desktop', + [ + 'label' => __('Hide On Desktop'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'label_on' => 'Hide', + 'label_off' => 'Show', + 'return_value' => 'hidden-desktop', + ] + ); + + $this->addControl( + 'hide_tablet', + [ + 'label' => __('Hide On Tablet'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'label_on' => 'Hide', + 'label_off' => 'Show', + 'return_value' => 'hidden-tablet', + ] + ); + + $this->addControl( + 'hide_mobile', + [ + 'label' => __('Hide On Mobile'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'prefix_class' => 'elementor-', + 'label_on' => 'Hide', + 'label_off' => 'Show', + 'return_value' => 'hidden-phone', + ] + ); + + $this->endControlsSection(); + + Plugin::$instance->controls_manager->addCustomCssControls($this); + } + + private function registerTransformSection() + { + $this->startControlsSection( + '_section_transform', + [ + 'label' => __('Transform'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $this->startControlsTabs('_tabs_positioning'); + + $transform_prefix_class = 'e-'; + $transform_return_value = 'transform'; + $transform_selectors = [ + '' => '.elementor-element-{{ID}} > .elementor-widget-container', + '_hover' => '{{HOVER}}', + ]; + + foreach ($transform_selectors as $tab => $selector) { + $this->startControlsTab( + "_tab_positioning$tab", + [ + 'label' => __(!$tab ? 'Normal' : 'Hover'), + ] + ); + + if ('_hover' === $tab) { + $this->addControl( + '_transform_trigger_hover', + [ + 'label' => __('Trigger by'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Widget'), + 'column' => __('Column'), + 'section' => __('Section'), + ], + ] + ); + } + + $this->addResponsiveControl( + "_transform_opacity$tab", + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1, + 'step' => 0.01, + ], + ], + 'selectors' => [ + $selector => 'opacity: {{SIZE}};', + ], + ] + ); + + $this->addControl( + "_transform_rotate_popover$tab", + [ + 'label' => __('Rotate'), + 'type' => ControlsManager::POPOVER_TOGGLE, + 'prefix_class' => $transform_prefix_class, + 'return_value' => $transform_return_value, + ] + ); + + $this->startPopover(); + + $this->addResponsiveControl( + "_transform_rotateZ_effect$tab", + [ + 'label' => __('Rotate'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -360, + 'max' => 360, + ], + ], + 'selectors' => [ + $selector => '--e-transform-rotateZ: {{SIZE}}deg', + ], + 'condition' => [ + "_transform_rotate_popover$tab!" => '', + ], + 'frontend_available' => true, + ] + ); + + $this->addControl( + "_transform_rotate_3d$tab", + [ + 'label' => __('3D Rotate'), + 'type' => ControlsManager::SWITCHER, + 'selectors' => [ + $selector => '--e-transform-rotateX: 1deg; --e-transform-perspective: 20px;', + ], + 'condition' => [ + "_transform_rotate_popover$tab!" => '', + ], + ] + ); + + $this->addResponsiveControl( + "_transform_rotateX_effect$tab", + [ + 'label' => __('Rotate X'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -360, + 'max' => 360, + ], + ], + 'condition' => [ + "_transform_rotate_3d$tab!" => '', + "_transform_rotate_popover$tab!" => '', + ], + 'selectors' => [ + $selector => '--e-transform-rotateX: {{SIZE}}deg;', + ], + 'frontend_available' => true, + ] + ); + + $this->addResponsiveControl( + "_transform_rotateY_effect$tab", + [ + 'label' => __('Rotate Y'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -360, + 'max' => 360, + ], + ], + 'condition' => [ + "_transform_rotate_3d$tab!" => '', + "_transform_rotate_popover$tab!" => '', + ], + 'selectors' => [ + $selector => '--e-transform-rotateY: {{SIZE}}deg;', + ], + 'frontend_available' => true, + ] + ); + + $this->addResponsiveControl( + "_transform_perspective_effect$tab", + [ + 'label' => __('Perspective'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 1000, + ], + ], + 'condition' => [ + "_transform_rotate_popover$tab!" => '', + "_transform_rotate_3d$tab!" => '', + ], + 'selectors' => [ + $selector => '--e-transform-perspective: {{SIZE}}px', + ], + 'frontend_available' => true, + ] + ); + + $this->endPopover(); + + $this->addControl( + "_transform_translate_popover$tab", + [ + 'label' => __('Offset'), + 'type' => ControlsManager::POPOVER_TOGGLE, + 'prefix_class' => $transform_prefix_class, + 'return_value' => $transform_return_value, + ] + ); + + $this->startPopover(); + + $this->addResponsiveControl( + "_transform_translateX_effect$tab", + [ + 'label' => __('Offset X'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%', 'px'], + 'range' => [ + '%' => [ + 'min' => -100, + 'max' => 100, + ], + 'px' => [ + 'min' => -1000, + 'max' => 1000, + ], + ], + 'condition' => [ + "_transform_translate_popover$tab!" => '', + ], + 'selectors' => [ + $selector => '--e-transform-translateX: {{SIZE}}{{UNIT}};', + ], + 'frontend_available' => true, + ] + ); + + $this->addResponsiveControl( + "_transform_translateY_effect$tab", + [ + 'label' => __('Offset Y'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%', 'px'], + 'range' => [ + '%' => [ + 'min' => -100, + 'max' => 100, + ], + 'px' => [ + 'min' => -1000, + 'max' => 1000, + ], + ], + 'condition' => [ + "_transform_translate_popover$tab!" => '', + ], + 'selectors' => [ + $selector => '--e-transform-translateY: {{SIZE}}{{UNIT}};', + ], + 'frontend_available' => true, + ] + ); + + $this->endPopover(); + + $this->addControl( + "_transform_scale_popover$tab", + [ + 'label' => __('Scale'), + 'type' => ControlsManager::POPOVER_TOGGLE, + 'prefix_class' => $transform_prefix_class, + 'return_value' => $transform_return_value, + ] + ); + + $this->startPopover(); + + $this->addControl( + "_transform_keep_proportions$tab", + [ + 'label' => __('Keep Proportions'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'render_type' => 'ui', + ] + ); + + $this->addResponsiveControl( + "_transform_scale_effect$tab", + [ + 'label' => __('Scale'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 2, + 'step' => 0.1, + ], + ], + 'condition' => [ + "_transform_scale_popover$tab!" => '', + "_transform_keep_proportions$tab!" => '', + ], + 'selectors' => [ + $selector => '--e-transform-scale: {{SIZE}};', + ], + 'frontend_available' => true, + ] + ); + + $this->addResponsiveControl( + "_transform_scaleX_effect$tab", + [ + 'label' => __('Scale X'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 2, + 'step' => 0.1, + ], + ], + 'condition' => [ + "_transform_scale_popover$tab!" => '', + "_transform_keep_proportions$tab" => '', + ], + 'selectors' => [ + $selector => '--e-transform-scaleX: {{SIZE}};', + ], + 'frontend_available' => true, + ] + ); + + $this->addResponsiveControl( + "_transform_scaleY_effect$tab", + [ + 'label' => __('Scale Y'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 2, + 'step' => 0.1, + ], + ], + 'condition' => [ + "_transform_scale_popover$tab!" => '', + "_transform_keep_proportions$tab" => '', + ], + 'selectors' => [ + $selector => '--e-transform-scaleY: {{SIZE}};', + ], + 'frontend_available' => true, + ] + ); + + $this->endPopover(); + + $this->addControl( + "_transform_skew_popover$tab", + [ + 'label' => __('Skew'), + 'type' => ControlsManager::POPOVER_TOGGLE, + 'prefix_class' => $transform_prefix_class, + 'return_value' => $transform_return_value, + ] + ); + + $this->startPopover(); + + $this->addResponsiveControl( + "_transform_skewX_effect$tab", + [ + 'label' => __('Skew X'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -360, + 'max' => 360, + ], + ], + 'condition' => [ + "_transform_skew_popover$tab!" => '', + ], + 'selectors' => [ + $selector => '--e-transform-skewX: {{SIZE}}deg;', + ], + 'frontend_available' => true, + ] + ); + + $this->addResponsiveControl( + "_transform_skewY_effect$tab", + [ + 'label' => __('Skew Y'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -360, + 'max' => 360, + ], + ], + 'condition' => [ + "_transform_skew_popover$tab!" => '', + ], + 'selectors' => [ + $selector => '--e-transform-skewY: {{SIZE}}deg;', + ], + 'frontend_available' => true, + ] + ); + + $this->endPopover(); + + $this->addControl( + "_transform_flipX_effect$tab", + [ + 'label' => __('Flip Horizontal'), + 'type' => ControlsManager::SWITCHER, + 'return_value' => $transform_return_value, + 'prefix_class' => $transform_prefix_class, + 'selectors' => [ + $selector => '--e-transform-flipX: -1', + ], + 'frontend_available' => true, + ] + ); + + $this->addControl( + "_transform_flipY_effect$tab", + [ + 'label' => __('Flip Vertical'), + 'type' => ControlsManager::SWITCHER, + 'return_value' => $transform_return_value, + 'prefix_class' => $transform_prefix_class, + 'selectors' => [ + $selector => '--e-transform-flipY: -1', + ], + 'frontend_available' => true, + ] + ); + + if ('_hover' === $tab) { + $this->addControl( + '_transform_transition_hover', + [ + 'label' => __('Transition Duration') . ' (ms)', + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 100, + 'max' => 10000, + 'step' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-widget-container' => '--e-transform-transition-duration: {{SIZE}}ms', + ], + ] + ); + + $this->addControl( + '_transform_transition_delay_hover', + [ + 'label' => __('Transition Delay') . ' (ms)', + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 5000, + 'step' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} > .elementor-widget-container' => '--e-transform-transition-delay: {{SIZE}}ms', + ], + ] + ); + } + + ${"transform_origin_conditions$tab"} = [ + [ + 'name' => "_transform_scale_popover$tab", + 'operator' => '!=', + 'value' => '', + ], + [ + 'name' => "_transform_rotate_popover$tab", + 'operator' => '!=', + 'value' => '', + ], + [ + 'name' => "_transform_flipX_effect$tab", + 'operator' => '!=', + 'value' => '', + ], + [ + 'name' => "_transform_flipY_effect$tab", + 'operator' => '!=', + 'value' => '', + ], + ]; + + $this->endControlsTab(); + + $transform_return_value .= '-hover'; + } + + $this->endControlsTabs(); + + $transform_origin_conditions = [ + 'relation' => 'or', + 'terms' => array_merge($transform_origin_conditions, $transform_origin_conditions_hover), + ]; + + // Will override motion effect transform-origin + $this->addResponsiveControl( + 'motion_fx_transform_x_anchor_point', + [ + 'label' => __('X Anchor Point'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-h-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'conditions' => $transform_origin_conditions, + 'separator' => 'before', + 'selectors' => [ + '{{WRAPPER}}' => '--e-transform-origin-x: {{VALUE}}', + ], + ] + ); + + // Will override motion effect transform-origin + $this->addResponsiveControl( + 'motion_fx_transform_y_anchor_point', + [ + 'label' => __('Y Anchor Point'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'top' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-v-align-middle', + ], + 'bottom' => [ + 'title' => __('Bottom'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'conditions' => $transform_origin_conditions, + 'selectors' => [ + '{{WRAPPER}}' => '--e-transform-origin-y: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + } +} diff --git a/modules/creativeelements/includes/widgets/contact-form.php b/modules/creativeelements/includes/widgets/contact-form.php new file mode 100644 index 00000000..779ec2b8 --- /dev/null +++ b/modules/creativeelements/includes/widgets/contact-form.php @@ -0,0 +1,1319 @@ + '100%', + '80' => '80%', + '75' => '75%', + '66' => '66%', + '60' => '60%', + '50' => '50%', + '40' => '40%', + '33' => '33%', + '25' => '25%', + '20' => '20%', + ]; + + protected $context; + + protected $translator; + + protected $locale; + + protected $locale_fo; + + protected $upload; + + protected $gdpr; + + protected $gdpr_msg; + + protected $gdpr_cfg; + + /** + * Get widget name. + * + * @since 1.0.0 + * @access public + * + * @return string Widget name. + */ + public function getName() + { + return 'contact-form'; + } + + /** + * Get widget title. + * + * @since 1.0.0 + * @access public + * + * @return string Widget title. + */ + public function getTitle() + { + return __('Contact Form'); + } + + /** + * Get widget icon. + * + * @since 1.0.0 + * @access public + * + * @return string Widget icon. + */ + public function getIcon() + { + return 'eicon-form-horizontal'; + } + + /** + * Get widget categories. + * + * Used to determine where to display the widget in the editor. + * + * @since 1.0.0 + * @access public + * + * @return array Widget categories. + */ + public function getCategories() + { + return ['premium']; + } + + /** + * Get widget keywords. + * + * Retrieve the list of keywords the widget belongs to. + * + * @since 2.1.0 + * @access public + * + * @return array Widget keywords. + */ + public function getKeywords() + { + return ['submit', 'send', 'message']; + } + + protected function getContactOptions() + { + $contacts = \Contact::getContacts($this->context->language->id); + $opts = [ + '0' => __('Select'), + ]; + foreach ($contacts as $contact) { + $opts[$contact['id_contact']] = $contact['name']; + } + return $opts; + } + + protected function getModuleLink($module) + { + if (empty($this->context->employee->id)) { + return '#'; + } + return $this->context->link->getAdminLink('AdminModules') . '&configure=' . $module; + } + + protected function getToken() + { + if (empty($this->context->cookie->contactFormTokenTTL) || + $this->context->cookie->contactFormTokenTTL < time() + ) { + $this->context->cookie->contactFormToken = md5(uniqid()); + $this->context->cookie->contactFormTokenTTL = time() + 600; + } + return $this->context->cookie->contactFormToken; + } + + protected function trans($id, array $params = [], $domain = 'Modules.Contactform.Shop', $locale = null) + { + try { + return $this->translator->trans($id, $params, $domain, $locale ?: $this->locale); + } catch (\Exception $ex) { + return $id; + } + } + + /** + * Register contact form widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @since 1.0.0 + * @access protected + */ + protected function _registerControls() + { + $this->startControlsSection( + 'section_form_content', + [ + 'label' => __('Form Fields'), + ] + ); + + $this->addControl( + 'subject_id', + [ + 'label' => $this->trans('Subject Heading'), + 'type' => ControlsManager::SELECT, + 'options' => $this->getContactOptions(), + 'default' => '0', + ] + ); + + $this->addControl( + 'show_upload', + [ + 'label' => $this->trans('Attach File'), + 'type' => $this->upload ? ControlsManager::SWITCHER : ControlsManager::HIDDEN, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'show_reference', + [ + 'label' => $this->trans('Order Reference'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'input_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'xs' => __('Extra Small'), + 'sm' => __('Small'), + 'md' => __('Medium'), + 'lg' => __('Large'), + 'xl' => __('Extra Large'), + ], + 'default' => 'sm', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'show_labels', + [ + 'label' => __('Label'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_subject_content', + [ + 'label' => $this->trans('Subject Heading'), + 'condition' => [ + 'subject_id' => '0', + ], + ] + ); + + $this->addControl( + 'subject_label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('Subject Heading', [], 'Modules.Contactform.Shop', $this->locale_fo), + 'condition' => [ + 'show_labels' => 'yes', + ], + ] + ); + + $this->addResponsiveControl( + 'subject_width', + [ + 'label' => __('Column Width'), + 'type' => ControlsManager::SELECT, + 'options' => self::$col_width, + 'default' => '100', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_email_content', + [ + 'label' => $this->trans('Email address'), + ] + ); + + $this->addControl( + 'email_label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('Email address', [], 'Modules.Contactform.Shop', $this->locale_fo), + 'condition' => [ + 'show_labels!' => '', + ], + ] + ); + + $this->addControl( + 'email_placeholder', + [ + 'label' => __('Placeholder'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('your@email.com', [], 'Shop.Forms.Help', $this->locale_fo), + ] + ); + + $this->addResponsiveControl( + 'email_width', + [ + 'label' => __('Column Width'), + 'type' => ControlsManager::SELECT, + 'options' => self::$col_width, + 'default' => '100', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_reference_content', + [ + 'label' => $this->trans('Order Reference'), + 'condition' => [ + 'show_reference!' => '', + ], + ] + ); + + $this->addControl( + 'reference_label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('Order Reference', [], 'Modules.Contactform.Shop', $this->locale_fo), + 'condition' => [ + 'show_labels' => 'yes', + ], + ] + ); + + $this->addResponsiveControl( + 'reference_width', + [ + 'label' => __('Column Width'), + 'type' => ControlsManager::SELECT, + 'options' => self::$col_width, + 'default' => '100', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_upload_content', + [ + 'label' => $this->trans('Attach File'), + 'condition' => [ + 'show_upload' => $this->upload ? 'yes' : 'hide', + ], + ] + ); + + $this->addControl( + 'upload_label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('Attach File', [], 'Modules.Contactform.Shop', $this->locale_fo), + 'condition' => [ + 'show_labels' => 'yes', + ], + ] + ); + + $this->addResponsiveControl( + 'upload_width', + [ + 'label' => __('Column Width'), + 'type' => ControlsManager::SELECT, + 'options' => self::$col_width, + 'default' => '100', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_message_content', + [ + 'label' => $this->trans('Message'), + ] + ); + + $this->addControl( + 'message_label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('Message', [], 'Modules.Contactform.Shop', $this->locale_fo), + 'condition' => [ + 'show_labels!' => '', + ], + ] + ); + + $this->addControl( + 'message_placeholder', + [ + 'label' => __('Placeholder'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('How can we help?', [], 'Shop.Forms.Help', $this->locale_fo), + ] + ); + + $this->addResponsiveControl( + 'message_width', + [ + 'label' => __('Column Width'), + 'type' => ControlsManager::SELECT, + 'options' => self::$col_width, + 'default' => '100', + ] + ); + + $this->addControl( + 'message_rows', + [ + 'label' => __('Rows'), + 'type' => ControlsManager::NUMBER, + 'default' => '4', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_button_content', + [ + 'label' => __('Button'), + ] + ); + + $this->addControl( + 'button_text', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('Send', [], 'Modules.Contactform.Shop', $this->locale_fo), + ] + ); + + $this->addControl( + 'button_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'xs' => __('Extra Small'), + 'sm' => __('Small'), + 'md' => __('Medium'), + 'lg' => __('Large'), + 'xl' => __('Extra Large'), + ], + 'default' => 'sm', + ] + ); + + $this->addResponsiveControl( + 'button_width', + [ + 'label' => __('Column Width'), + 'type' => ControlsManager::SELECT, + 'options' => self::$col_width, + 'default' => '100', + ] + ); + + $this->addResponsiveControl( + 'button_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'start' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'end' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'stretch' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'default' => 'stretch', + 'prefix_class' => 'elementor%s-button-align-', + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => '', + ] + ); + + $this->addControl( + 'icon_align', + [ + 'label' => __('Icon Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'left', + 'options' => [ + 'left' => __('Before'), + 'right' => __('After'), + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'icon_indent', + [ + 'label' => __('Icon Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button-content-wrapper' => 'gap: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-button-text' => 'flex-grow: min(0, {{SIZE}})', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_additional_options', + [ + 'label' => __('Additional Options'), + 'type' => ControlsManager::SECTION, + ] + ); + + $this->addControl( + 'configure_module', + [ + 'raw' => __('Contact Form') . '

' . + '' . + ' ' . __('Configure Module') . + '', + 'type' => ControlsManager::RAW_HTML, + 'classes' => 'elementor-control-descriptor', + ] + ); + + empty($this->gdpr) or $this->addControl( + 'configure_gdpr', + [ + 'raw' => __('GDPR') . '

' . + '' . + ' ' . __('Configure Module') . + '', + 'type' => ControlsManager::RAW_HTML, + 'classes' => 'elementor-control-descriptor', + ] + ); + + $this->addControl( + 'custom_messages', + [ + 'label' => __('Messages'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Default'), + 'yes' => __('Custom'), + ], + ] + ); + + $this->addControl( + 'success_message', + [ + 'label' => __('Success'), + 'label_block' => true, + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('Your message has been successfully sent to our team.', [], 'Modules.Contactform.Shop', $this->locale_fo), + 'condition' => [ + 'custom_messages!' => '', + ], + ] + ); + + $this->addControl( + 'error_message', + [ + 'label' => __('Error'), + 'label_block' => true, + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->trans('An error occurred while sending the message.', [], 'Modules.Contactform.Shop', $this->locale_fo), + 'condition' => [ + 'custom_messages!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_form', + [ + 'label' => __('Form'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'column_gap', + [ + 'label' => __('Columns Gap'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 60, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-field-group' => 'padding-right: calc({{SIZE}}{{UNIT}} / 2); padding-left: calc({{SIZE}}{{UNIT}} / 2);', + '{{WRAPPER}} .elementor-form-fields-wrapper' => 'margin-left: calc(-{{SIZE}}{{UNIT}} / 2); margin-right: calc(-{{SIZE}}{{UNIT}} / 2);', + ], + ] + ); + + $this->addControl( + 'row_gap', + [ + 'label' => __('Rows Gap'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 60, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-field-group' => 'margin-bottom: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} .elementor-form-fields-wrapper' => 'margin-bottom: -{{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'heading_style_label', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Label'), + 'separator' => 'before', + 'condition' => [ + 'show_labels!' => '', + ], + ] + ); + + $this->addControl( + 'label_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 60, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-field-group > label' => 'padding-bottom: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'show_labels!' => '', + ], + ] + ); + + $this->addControl( + 'label_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-field-group label' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'condition' => [ + 'show_labels!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'label_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} .elementor-field-group label', + 'condition' => [ + 'show_labels!' => '', + ], + ] + ); + + empty($this->gdpr) or $this->addControl( + 'heading_style_checkbox', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Checkbox'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'checkbox_spacing', + [ + 'label' => __('Spacing'), + 'type' => $this->gdpr ? ControlsManager::SLIDER : ControlsManager::HIDDEN, + 'default' => [ + 'size' => 5, + 'unit' => 'px', + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 60, + ], + ], + 'selectors' => !$this->gdpr ? [] : [ + '{{WRAPPER}} input[type=checkbox]' => 'margin: 0 {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_field_style', + [ + 'label' => __('Field'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'field_typography', + 'selector' => '{{WRAPPER}} .elementor-field-group .elementor-field', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addControl( + 'field_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-field-group .elementor-field' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addControl( + 'field_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#ffffff', + 'selectors' => [ + '{{WRAPPER}} .elementor-field-group .elementor-field:not([type=file])' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'field_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-field-group .elementor-field:not([type=file])' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'field_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px'], + 'selectors' => [ + '{{WRAPPER}} .elementor-field-group .elementor-field:not([type=file])' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'field_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-field-group .elementor-field:not([type=file])' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_button_style', + [ + 'label' => __('Button'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'button_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + 'selector' => '{{WRAPPER}} .elementor-button', + ] + ); + + $this->startControlsTabs('tabs_button_style'); + + $this->startControlsTab( + 'tab_button_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'button_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_button_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'button_hover_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button:hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_background_hover_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button:hover' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_hover_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button:hover' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'button_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'border-width: {{SIZE}}{{UNIT}};', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'button_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'border-radius: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'button_hover_animation', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_messages_style', + [ + 'label' => __('Messages'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'messages_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_2, + 'selector' => '{{WRAPPER}} .elementor-message', + ] + ); + + $this->addControl( + 'heading_style_success', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Success'), + ] + ); + + $this->addControl( + 'success_message_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-message.elementor-message-success' => 'color: {{COLOR}};', + ], + ] + ); + + $this->addControl( + 'heading_style_error', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Error'), + ] + ); + + $this->addControl( + 'error_message_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-message.elementor-message-danger' => 'color: {{COLOR}};', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * Render contact form widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $id = $this->getId(); + $token = $this->getToken(); + $show_labels = (bool) $settings['show_labels']; + $input_classes = 'elementor-field elementor-size-' . esc_attr($settings['input_size']); + $orders = $settings['show_reference'] && !empty($this->context->customer->id) ? \Order::getCustomerOrders($this->context->customer->id) : []; + + $this->addRenderAttribute('form', [ + 'action' => $this->context->link->getModuleLink('creativeelements', 'ajax', [], null, null, null, true), + 'method' => 'post', + 'enctype' => 'multipart/form-data', + 'data-success' => $settings['custom_messages'] ? $settings['success_message'] : '', + 'data-error' => $settings['custom_messages'] ? $settings['error_message'] : '', + ]); + $this->addRenderAttribute('email', [ + 'id' => 'from-' . $id, + 'value' => isset($this->context->customer->email) ? $this->context->customer->email : '', + 'placeholder' => $settings['email_placeholder'] ?: $this->trans('your@email.com', [], 'Shop.Forms.Help'), + 'inputmode' => 'email', + ]); + $this->addRenderAttribute('message', [ + 'id' => 'message-' . $id, + 'placeholder' => $settings['message_placeholder'] ?: $this->trans('How can we help?', [], 'Shop.Forms.Help'), + 'rows' => (int) $settings['message_rows'], + ]); + $this->addRenderAttribute('button', 'class', 'elementor-button elementor-size-' . $settings['button_size']); + + if ($settings['button_hover_animation']) { + $this->addRenderAttribute('button', 'class', 'elementor-animation-' . $settings['button_hover_animation']); + } + ?> +
getRenderAttributeString('form') ?>> +
+ + + + + + + +
+ + + +
+ +
+
+ +
+ + + + getRenderAttributeString('email') ?> class=" elementor-field-textual" required> +
+ editor->isEditMode() || $orders)) : ?> +
+ + + +
+ +
+
+ + upload && $settings['show_upload']) : ?> +
+ + + + +
+ +
+ + + + +
+ gdpr) : ?> +
+ +
+ +
+ +
+
+
+ locale = $this->locale_fo; + ?> + <# + var contacts = context->language->id)) ?>, + email_placeholder = settings.email_placeholder || trans('your@email.com', [], 'Shop.Forms.Help')) ?>, + message_placeholder = settings.message_placeholder || trans('How can we help?', [], 'Shop.Forms.Help')) ?>, + upload = upload ?>; + #> +
+
+ <# if (settings.subject_id <= 0) { #> +
+ <# if (settings.show_labels) { #> + + <# } #> +
+ +
+
+ <# } #> +
+ <# if (settings.show_labels) { #> + + <# } #> + +
+ <# if (settings.show_reference) { #> +
+ <# if (settings.show_labels) { #> + + <# } #> +
+ +
+
+ <# } #> + <# if (upload && settings.show_upload) { #> +
+ <# if (settings.show_labels) { #> + + <# } #> + +
+ <# } #> +
+ <# if (settings.show_labels) { #> + + <# } #> + +
+ gdpr) : ?> +
+ +
+ +
+ +
+
+
+ locale = null; + } + + public function __construct($data = [], $args = []) + { + $this->context = \Context::getContext(); + $this->translator = $this->context->getTranslator(); + + $id_lang = (int) \Tools::getValue('id_lang'); + $lang = $id_lang ? new \Language($id_lang) : null; + $this->locale_fo = isset($lang->locale) ? $lang->locale : null; + + $this->upload = \Configuration::get('PS_CUSTOMER_SERVICE_FILE_UPLOAD'); + $this->initGDPR($id_lang); + + parent::__construct($data, $args); + } + + protected function initGDPR($id_lang) + { + empty($id_lang) && $id_lang = $this->context->language->id; + + if (\Module::isEnabled('psgdpr') && \Module::getInstanceByName('psgdpr') && + call_user_func('GDPRConsent::getConsentActive', $id_module = \Module::getModuleIdByName('contactform')) + ) { + $this->gdpr = 'psgdpr_consent_checkbox'; + $this->gdpr_msg = call_user_func('GDPRConsent::getConsentMessage', $id_module, $id_lang); + $this->gdpr_cfg = $this->getModuleLink('psgdpr&page=dataConsent'); + } elseif (\Module::isEnabled('gdprpro') && \Configuration::get('gdpr-pro_consent_contact_enable')) { + $this->gdpr = 'gdpr_consent_chkbox'; + $this->gdpr_msg = \Configuration::get('gdpr-pro_consent_contact_text', $id_lang); + $this->gdpr_cfg = empty($this->context->employee) ? '#' : $this->context->link->getAdminLink('AdminGdprConfig'); + } + + // Strip

tags from GDPR message + empty($this->gdpr_msg) or $this->gdpr_msg = preg_replace('~~i', '', $this->gdpr_msg); + } +} diff --git a/modules/creativeelements/includes/widgets/countdown.php b/modules/creativeelements/includes/widgets/countdown.php new file mode 100644 index 00000000..c31f6701 --- /dev/null +++ b/modules/creativeelements/includes/widgets/countdown.php @@ -0,0 +1,666 @@ +startControlsSection( + 'section_countdown', + [ + 'label' => __('Countdown'), + ] + ); + + $this->addControl( + 'due_date', + [ + 'label' => __('Due Date'), + 'type' => ControlsManager::DATE_TIME, + 'dynamic' => [ + 'active' => true, + ], + 'default' => date('Y-m-d H:i', strtotime('+1 month')), + 'description' => sprintf(__('Date set according to your timezone: %s.'), Utils::getTimezoneString()), + ] + ); + + $this->addControl( + 'label_display', + [ + 'label' => __('View'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'block' => __('Block'), + 'inline' => __('Inline'), + ], + 'default' => 'block', + 'prefix_class' => 'elementor-countdown--label-', + ] + ); + + $this->addResponsiveControl( + 'inline_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-wrapper' => 'text-align: {{VALUE}};', + ], + 'condition' => [ + 'label_display' => 'inline', + ], + ] + ); + + $this->addControl( + 'show_days', + [ + 'label' => __('Days'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'show_hours', + [ + 'label' => __('Hours'), + 'type' => ControlsManager::SWITCHER, + 'separator' => '', + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'show_minutes', + [ + 'label' => __('Minutes'), + 'type' => ControlsManager::SWITCHER, + 'separator' => '', + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'show_seconds', + [ + 'label' => __('Seconds'), + 'type' => ControlsManager::SWITCHER, + 'separator' => '', + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'show_labels', + [ + 'label' => __('Label'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + ] + ); + + $this->addControl( + 'custom_labels', + [ + 'label' => __('Custom Label'), + 'type' => ControlsManager::SWITCHER, + 'condition' => [ + 'show_labels!' => '', + ], + ] + ); + + $this->addControl( + 'label_days', + [ + 'label' => __('Days'), + 'type' => ControlsManager::TEXT, + 'separator' => '', + 'default' => __('Days'), + 'placeholder' => __('Days'), + 'condition' => [ + 'show_labels!' => '', + 'custom_labels!' => '', + 'show_days' => 'yes', + ], + ] + ); + + $this->addControl( + 'label_hours', + [ + 'label' => __('Hours'), + 'type' => ControlsManager::TEXT, + 'separator' => '', + 'default' => __('Hours'), + 'placeholder' => __('Hours'), + 'condition' => [ + 'show_labels!' => '', + 'custom_labels!' => '', + 'show_hours' => 'yes', + ], + ] + ); + + $this->addControl( + 'label_minutes', + [ + 'label' => __('Minutes'), + 'type' => ControlsManager::TEXT, + 'separator' => '', + 'default' => __('Minutes'), + 'placeholder' => __('Minutes'), + 'condition' => [ + 'show_labels!' => '', + 'custom_labels!' => '', + 'show_minutes' => 'yes', + ], + ] + ); + + $this->addControl( + 'label_seconds', + [ + 'label' => __('Seconds'), + 'type' => ControlsManager::TEXT, + 'separator' => '', + 'default' => __('Seconds'), + 'placeholder' => __('Seconds'), + 'condition' => [ + 'show_labels!' => '', + 'custom_labels!' => '', + 'show_seconds' => 'yes', + ], + ] + ); + + $this->addControl( + 'expire_actions', + [ + 'label' => __('Actions After Expire'), + 'type' => ControlsManager::SELECT2, + 'options' => [ + 'redirect' => __('Redirect'), + 'hide' => __('Hide'), + 'message' => __('Show Message'), + ], + 'label_block' => true, + 'separator' => 'before', + 'render_type' => 'none', + 'multiple' => true, + ] + ); + + $this->addControl( + 'message_after_expire', + [ + 'label' => __('Message'), + 'type' => ControlsManager::TEXTAREA, + 'dynamic' => [ + 'active' => true, + ], + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'expire_actions', + 'operator' => 'contains', + 'value' => 'message', + ], + ], + ], + ] + ); + + $this->addControl( + 'expire_redirect_url', + [ + 'label' => __('Redirect URL'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'expire_actions', + 'operator' => 'contains', + 'value' => 'redirect', + ], + ], + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_box_style', + [ + 'label' => __('Boxes'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'container_width', + [ + 'label' => __('Container Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => '%', + 'size' => 100, + ], + 'tablet_default' => [ + 'unit' => '%', + ], + 'mobile_default' => [ + 'unit' => '%', + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 2000, + ], + '%' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'size_units' => ['%', 'px'], + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-wrapper' => 'max-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'box_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-item' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'box_border', + 'label' => __('Border'), + 'selector' => '{{WRAPPER}} .elementor-countdown-item', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'box_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'box_spacing', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .elementor-countdown-item:not(:first-of-type)' => 'margin-left: calc( {{SIZE}}{{UNIT}}/2 );', + 'body:not(.lang-rtl) {{WRAPPER}} .elementor-countdown-item:not(:last-of-type)' => 'margin-right: calc( {{SIZE}}{{UNIT}}/2 );', + 'body.lang-rtl {{WRAPPER}} .elementor-countdown-item:not(:first-of-type)' => 'margin-right: calc( {{SIZE}}{{UNIT}}/2 );', + 'body.lang-rtl {{WRAPPER}} .elementor-countdown-item:not(:last-of-type)' => 'margin-left: calc( {{SIZE}}{{UNIT}}/2 );', + ], + ] + ); + + $this->addResponsiveControl( + 'box_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%', 'em'], + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_content_style', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'heading_digits', + [ + 'label' => __('Digits'), + 'type' => ControlsManager::HEADING, + ] + ); + + $this->addControl( + 'digits_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-digits' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'digits_typography', + 'selector' => '{{WRAPPER}} .elementor-countdown-digits', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-countdown-digits', + ] + ); + + $this->addControl( + 'heading_label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'label_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-label' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'label_typography', + 'selector' => '{{WRAPPER}} .elementor-countdown-label', + 'scheme' => SchemeTypography::TYPOGRAPHY_2, + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_expire_message_style', + [ + 'label' => __('Message'), + 'tab' => ControlsManager::TAB_STYLE, + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'expire_actions', + 'operator' => 'contains', + 'value' => 'message', + ], + ], + ], + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-expire--message' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-expire--message' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} .elementor-countdown-expire--message', + ] + ); + + $this->addResponsiveControl( + 'message_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%', 'em'], + 'selectors' => [ + '{{WRAPPER}} .elementor-countdown-expire--message' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + } + + protected function getStrftime(&$settings) + { + $string = ''; + if ($settings['show_days']) { + $string .= $this->renderCountdownItem($settings, 'label_days', 'elementor-countdown-days'); + } + if ($settings['show_hours']) { + $string .= $this->renderCountdownItem($settings, 'label_hours', 'elementor-countdown-hours'); + } + if ($settings['show_minutes']) { + $string .= $this->renderCountdownItem($settings, 'label_minutes', 'elementor-countdown-minutes'); + } + if ($settings['show_seconds']) { + $string .= $this->renderCountdownItem($settings, 'label_seconds', 'elementor-countdown-seconds'); + } + + return $string; + } + + protected $_default_countdown_labels; + + protected function _initDefaultCountdownLabels() + { + $this->_default_countdown_labels = [ + 'label_months' => __('Months'), + 'label_weeks' => __('Weeks'), + 'label_days' => __('Days'), + 'label_hours' => __('Hours'), + 'label_minutes' => __('Minutes'), + 'label_seconds' => __('Seconds'), + ]; + } + + public function getDefaultCountdownLabels() + { + if (!$this->_default_countdown_labels) { + $this->_initDefaultCountdownLabels(); + } + + return $this->_default_countdown_labels; + } + + protected function renderCountdownItem(&$settings, $label, $part_class) + { + $string = '

' . + ''; + + if ($settings['show_labels']) { + $default_labels = $this->getDefaultCountdownLabels(); + $label = ($settings['custom_labels']) ? $settings[$label] : $default_labels[$label]; + $string .= ' ' . $label . ''; + } + + $string .= '
'; + + return $string; + } + + protected function getActions(&$settings) + { + if (empty($settings['expire_actions'])) { + return false; + } + $actions = []; + + foreach ($settings['expire_actions'] as &$action) { + $action_to_run = ['type' => $action]; + + if ('redirect' === $action) { + if (empty($settings['expire_redirect_url']['url'])) { + continue; + } + $action_to_run['redirect_url'] = $settings['expire_redirect_url']['url']; + $action_to_run['redirect_is_external'] = $settings['expire_redirect_url']['is_external']; + } + $actions[] = $action_to_run; + } + + return $actions; + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + ?> +
+ getStrftime($settings) ?> +
+ +
+ startControlsSection( + 'section_counter', + [ + 'label' => __('Counter'), + ] + ); + + $this->addControl( + 'starting_number', + [ + 'label' => __('Starting Number'), + 'type' => ControlsManager::NUMBER, + 'default' => 0, + ] + ); + + $this->addControl( + 'ending_number', + [ + 'label' => __('Ending Number'), + 'type' => ControlsManager::NUMBER, + 'default' => 100, + ] + ); + + $this->addControl( + 'prefix', + [ + 'label' => __('Number Prefix'), + 'type' => ControlsManager::TEXT, + 'default' => '', + 'placeholder' => 1, + ] + ); + + $this->addControl( + 'suffix', + [ + 'label' => __('Number Suffix'), + 'type' => ControlsManager::TEXT, + 'default' => '', + 'placeholder' => __('Plus'), + ] + ); + + $this->addControl( + 'duration', + [ + 'label' => __('Animation Duration'), + 'type' => ControlsManager::NUMBER, + 'default' => 2000, + 'min' => 100, + 'step' => 100, + ] + ); + + $this->addControl( + 'thousand_separator', + [ + 'label' => __('Thousand Separator'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + ] + ); + + $this->addControl( + 'thousand_separator_char', + [ + 'label' => __('Separator'), + 'type' => ControlsManager::SELECT, + 'condition' => [ + 'thousand_separator' => 'yes', + ], + 'options' => [ + '' => 'Default', + '.' => 'Dot', + ' ' => 'Space', + ], + ] + ); + + $this->addControl( + 'title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXT, + 'label_block' => true, + 'default' => __('Cool Number'), + 'placeholder' => __('Cool Number'), + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_number', + [ + 'label' => __('Number'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'number_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-counter-number-wrapper' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography_number', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-counter-number-wrapper', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'number_shadow', + 'selector' => '{{WRAPPER}} .elementor-counter-number-wrapper', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_title', + [ + 'label' => __('Title'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-counter-title' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography_title', + 'scheme' => SchemeTypography::TYPOGRAPHY_2, + 'selector' => '{{WRAPPER}} .elementor-counter-title', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'title_shadow', + 'selector' => '{{WRAPPER}} .elementor-counter-title', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render counter widget output in the editor. + * + * Written as a Backbone JavaScript template and used to generate the live preview. + * + * @since 1.0.0 + * @access protected + */ + protected function _contentTemplate() + { + ?> +
+
+ {{{ settings.prefix }}} + + {{{ settings.starting_number }}} + + {{{ settings.suffix }}} +
+ <# if ( settings.title ) { #> +
{{{ settings.title }}}
+ <# } #> +
+ getSettingsForDisplay(); + + $this->addRenderAttribute('counter', [ + 'class' => 'elementor-counter-number', + 'data-duration' => $settings['duration'], + 'data-to-value' => $settings['ending_number'], + ]); + + if (!empty($settings['thousand_separator'])) { + $delimiter = empty($settings['thousand_separator_char']) ? ',' : $settings['thousand_separator_char']; + $this->addRenderAttribute('counter', 'data-delimiter', $delimiter); + } + ?> +
+
+ + getRenderAttributeString('counter') ?>> + +
+ +
+ +
+ startControlsSection( + 'section_layout', + [ + 'label' => __('Currency Selector'), + ] + ); + + $this->addControl( + 'skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'default' => 'dropdown', + 'options' => [ + 'classic' => __('Classic'), + 'dropdown' => __('Dropdown'), + ], + 'separator' => 'after', + ] + ); + + $this->addControl( + 'content', + [ + 'label' => __('Content'), + 'label_block' => true, + 'type' => ControlsManager::SELECT2, + 'default' => ['symbol', 'code'], + 'options' => [ + 'symbol' => __('Symbol'), + 'code' => __('ISO Code'), + 'name' => __('Currency'), + ], + 'multiple' => true, + ] + ); + + $this->addControl( + 'show_current', + [ + 'label' => __('Current Currency'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'prefix_class' => 'elementor-nav--', + 'return_value' => 'active', + ] + ); + + $this->registerNavContentControls([ + 'layout_options' => [ + 'horizontal' => __('Horizontal'), + 'vertical' => __('Vertical'), + ], + 'submenu_condition' => [ + 'skin' => 'dropdown', + ], + ]); + + $this->endControlsSection(); + + $this->registerNavStyleSection([ + 'active_condition' => [ + 'show_current!' => '', + ], + 'space_between_condition' => [ + 'skin' => 'classic', + ], + ]); + + $this->registerDropdownStyleSection([ + 'dropdown_condition' => [ + 'skin' => 'dropdown', + ], + 'active_condition' => [ + 'show_current!' => '', + ], + ]); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-nav-menu'; + } + + /** + * Render currency selector widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.0 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getActiveSettings(); + $currencies = \Currency::getCurrencies(false, true, true); + + if (\Configuration::isCatalogMode() || count($currencies) <= 1 || !$settings['content']) { + return; + } + $this->indicator = $settings['indicator']; + $this->currency_symbol = in_array('symbol', $settings['content']); + $this->currency_code = in_array('code', $settings['content']); + $this->currency_name = in_array('name', $settings['content']); + + $url = preg_replace('/[&\?](SubmitCurrency|id_currency)=[^&]*/', '', $_SERVER['REQUEST_URI']); + $separator = strrpos($url, '?') === false ? '?' : '&'; + $id_currency = $this->context->currency->id; + $menu = [ + '0' => [ + 'id' => $id_currency, + 'symbol' => $this->context->currency->symbol, + 'iso_code' => $this->context->currency->iso_code, + 'name' => $this->context->currency->name, + 'url' => 'javascript:;', + 'current' => false, + 'children' => [], + ] + ]; + foreach ($currencies as &$currency) { + $currency['current'] = $id_currency == $currency['id']; + $currency['url'] = $url . $separator . 'SubmitCurrency=1&id_currency=' . (int) $currency['id']; + + $menu[0]['children'][] = $currency; + } + if ('classic' === $settings['skin']) { + $menu = &$menu[0]['children']; + } + $ul_class = 'elementor-nav'; + + if ('vertical' === $settings['layout']) { + $ul_class .= ' sm-vertical'; + } + + // General Menu. + ob_start(); + $this->selectorList($menu, 0, $ul_class); + $menu_html = ob_get_clean(); + + $this->addRenderAttribute('main-menu', 'class', [ + 'elementor-currencies', + 'elementor-nav--main', + 'elementor-nav__container', + 'elementor-nav--layout-' . $settings['layout'], + ]); + + if ('none' !== $settings['pointer']) { + $animation_type = self::getPointerAnimationType($settings['pointer']); + + $this->addRenderAttribute('main-menu', 'class', [ + 'e--pointer-' . $settings['pointer'], + 'e--animation-' . $settings[$animation_type], + ]); + } + ?> + + + + context = \Context::getContext(); + + parent::__construct($data, $args); + } +} diff --git a/modules/creativeelements/includes/widgets/divider.php b/modules/creativeelements/includes/widgets/divider.php new file mode 100644 index 00000000..71b06f12 --- /dev/null +++ b/modules/creativeelements/includes/widgets/divider.php @@ -0,0 +1,290 @@ +startControlsSection( + 'section_divider', + [ + 'label' => __('Divider'), + ] + ); + + $this->addControl( + 'style', + [ + 'label' => __('Style'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'solid' => __('Solid'), + 'double' => __('Double'), + 'dotted' => __('Dotted'), + 'dashed' => __('Dashed'), + ], + 'default' => 'solid', + 'selectors' => [ + '{{WRAPPER}} .elementor-divider-separator' => 'border-top-style: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'weight', + [ + 'label' => __('Weight'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 1, + ], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-divider-separator' => 'border-top-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-divider-separator' => 'border-top-color: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%', 'px'], + 'range' => [ + 'px' => [ + 'max' => 1000, + ], + ], + 'default' => [ + 'size' => 100, + 'unit' => '%', + ], + 'tablet_default' => [ + 'unit' => '%', + ], + 'mobile_default' => [ + 'unit' => '%', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-divider-separator' => 'width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-divider' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'gap', + [ + 'label' => __('Gap'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 15, + ], + 'range' => [ + 'px' => [ + 'min' => 2, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-divider' => 'padding-top: {{SIZE}}{{UNIT}}; padding-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render divider widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + ?> +
+ +
+ +
+ +
+ context->employee) ? '#' : $this->context->link->getAdminLink('AdminModules') . '&configure=' . $module; + } + + protected function trans($id, array $params = [], $domain = null, $locale = null) + { + try { + return $this->translator->trans($id, $params, $domain, $locale ?: $this->locale); + } catch (\Exception $ex) { + return $id; + } + } + + /** + * Register email subscription widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @since 1.0.0 + * @access protected + */ + protected function _registerControls() + { + $this->startControlsSection( + 'section_email_subscription', + [ + 'label' => __('Form Fields'), + ] + ); + + $this->addResponsiveControl( + 'layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'inline' => __('Inline'), + 'multiline' => __('Multiline'), + ], + 'default' => 'inline', + 'tablet_default' => 'inline', + 'mobile_default' => 'inline', + 'prefix_class' => 'elementor%s-layout-', + ] + ); + + $this->addControl( + 'input_height', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px'], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 100, + ], + ], + 'default' => [ + 'size' => 50, + ], + 'selectors' => [ + '{{WRAPPER}} input[type=email]' => 'height: {{SIZE}}{{UNIT}}; padding: 0 calc({{SIZE}}{{UNIT}} / 3);', + '{{WRAPPER}} button[type=submit]' => 'height: {{SIZE}}{{UNIT}}; padding: 0 calc({{SIZE}}{{UNIT}} / 3);', + ], + ] + ); + + $this->addControl( + 'heading_email', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Email'), + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'input_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} input[type=email]' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'placeholder', + [ + 'label' => __('Placeholder'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->email_placeholder, + ] + ); + + $this->addControl( + 'heading_button', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Button'), + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'button_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} button[type=submit]' => 'margin: {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0;', + ], + ] + ); + + $this->addResponsiveControl( + 'button_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'prefix_class' => 'elementor%s-align-', + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'layout', + 'value' => 'multiline', + ], + [ + 'name' => 'layout_tablet', + 'value' => 'multiline', + ], + [ + 'name' => 'layout_mobile', + 'value' => 'multiline', + ], + ], + ], + ] + ); + + $this->addControl( + 'button', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'placeholder' => $this->button_placeholder, + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => '', + ] + ); + + $this->addControl( + 'icon_align', + [ + 'label' => __('Icon Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'left', + 'options' => [ + 'left' => __('Before'), + 'right' => __('After'), + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'icon_indent', + [ + 'label' => __('Icon Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button-content-wrapper' => 'gap: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-button-text' => 'flex-grow: min(0, {{SIZE}})', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_additional_options', + [ + 'label' => __('Additional Options'), + 'type' => ControlsManager::SECTION, + ] + ); + + $this->addControl( + 'configure_module', + [ + 'raw' => __('Email Subscription') . '

' . + '' . + ' ' . __('Configure Module') . + '', + 'type' => ControlsManager::RAW_HTML, + 'classes' => 'elementor-control-descriptor', + ] + ); + + empty($this->gdpr) or $this->addControl( + 'configure_gdpr', + [ + 'raw' => __('GDPR') . '

' . + '' . + ' ' . __('Configure Module') . + '', + 'type' => ControlsManager::RAW_HTML, + 'classes' => 'elementor-control-descriptor', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_form_style', + [ + 'label' => __('Form'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-widget-container, {{WRAPPER}} .elementor-field-label' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'max_width', + [ + 'label' => __('Max Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1600, + ], + '%' => [ + 'max' => 100, + ], + ], + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} form' => 'max-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_input_style', + [ + 'label' => __('Email'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'input_typography', + 'label' => __('Typography'), + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} input[type=email]', + ] + ); + + $this->startControlsTabs('tabs_input_colors'); + + $this->startControlsTab( + 'tab_input_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'input_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=email]' => 'color: {{VALUE}};', + '{{WRAPPER}} input[type=email]::placeholder' => 'color: {{VALUE}};', + '{{WRAPPER}} input[type=email]:-ms-input-placeholder' => 'color: {{VALUE}};', + '{{WRAPPER}} input[type=email]::-ms-input-placeholder ' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'input_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=email]' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'input_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=email]' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_input_focus', + [ + 'label' => __('Focus'), + ] + ); + + $this->addControl( + 'input_focus_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=email]:focus' => 'color: {{VALUE}};', + '{{WRAPPER}} input[type=email]::placeholder:focus' => 'color: {{VALUE}};', + '{{WRAPPER}} input[type=email]:-ms-input-placeholder:focus' => 'color: {{VALUE}};', + '{{WRAPPER}} input[type=email]::-ms-input-placeholder:focus ' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'input_background_focus_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=email]:focus' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'input_focus_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=email]:focus' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'input_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px'], + 'selectors' => [ + '{{WRAPPER}} input[type=email]' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'input_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} input[type=email]' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'input_padding', + [ + 'label' => __('Text Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px'], + 'selectors' => [ + '{{WRAPPER}} input[type=email]' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_button_style', + [ + 'label' => __('Button'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'button_typography', + 'label' => __('Typography'), + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + 'selector' => '{{WRAPPER}} button[type=submit]', + ] + ); + + $this->startControlsTabs('tabs_button_colors'); + + $this->startControlsTab( + 'tab_button_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'button_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} button[type=submit]' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button[type=submit]' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button[type=submit]' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_button_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'button_hover_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button[type=submit]:hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_background_hover_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button[type=submit]:hover' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_hover_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button[type=submit]:hover' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_animation', + [ + 'label' => __('Animation'), + 'label_block' => false, + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'button_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px'], + 'selectors' => [ + '{{WRAPPER}} button[type=submit]' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'button_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} button[type=submit]' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'button_padding', + [ + 'label' => __('Text Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px'], + 'selectors' => [ + '{{WRAPPER}} button[type=submit]' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_gdpr_style', + [ + 'label' => __('GDPR'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'view' => $this->gdpr ? 'traditional' : 'hide', + ], + ] + ); + + $this->addControl( + 'row_gap', + [ + 'label' => __('Rows Gap'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 60, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-field-type-gdpr' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'heading_style_label', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Label'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'label_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} label.elementor-field-label' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'label_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} label.elementor-field-label', + ] + ); + + $this->addControl( + 'heading_style_checkbox', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Checkbox'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'checkbox_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 5, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 60, + ], + ], + 'selectors' => !$this->gdpr ? [] : [ + '{{WRAPPER}} input[type=checkbox]' => 'margin: 0 {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_messages_style', + [ + 'label' => __('Messages'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'messages_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'before' => __('Before'), + 'after' => __('After'), + ], + 'default' => 'after', + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'messages_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_2, + 'selector' => '{{WRAPPER}} .elementor-message', + ] + ); + + $this->addControl( + 'heading_style_success', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Success'), + ] + ); + + $this->addControl( + 'success_message_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-message.elementor-message-success' => 'color: {{COLOR}};', + ], + ] + ); + + $this->addControl( + 'heading_style_error', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Error'), + ] + ); + + $this->addControl( + 'error_message_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-message.elementor-message-danger' => 'color: {{COLOR}};', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * Render email subscription widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $this->addRenderAttribute('form', [ + 'action' => $this->context->link->getModuleLink('creativeelements', 'ajax', [], null, null, null, true), + 'method' => 'post', + 'data-msg' => $settings['messages_position'], + ]); + $this->addRenderAttribute('email', [ + 'placeholder' => $settings['placeholder'] ?: $this->email_placeholder, + 'inputmode' => 'email', + ]); + $this->addRenderAttribute('button', 'class', 'elementor-button'); + + if ($settings['hover_animation']) { + $this->addRenderAttribute('button', 'class', 'elementor-animation-' . $settings['hover_animation']); + } + ?> +
getRenderAttributeString('form') ?>> + +
+ getRenderAttributeString('email') ?> required> + +
+ gdpr) : ?> +
+ +
+ +
+ + <# var placeholder = settings.placeholder || email_placeholder) ?> #> +
+
+ + +
+ gdpr) : ?> +
+ +
+ +
+ context = \Context::getContext(); + $this->translator = $this->context->getTranslator(); + + $id_lang = (int) \Tools::getValue('id_lang'); + $lang = $id_lang ? new \Language($id_lang) : null; + $this->locale = isset($lang->locale) ? $lang->locale : null; + $this->email_placeholder = $this->trans('Your email address', [], 'Shop.Forms.Labels'); + $this->button_placeholder = $this->trans('Subscribe', [], 'Shop.Theme.Actions'); + + $this->initGDPR($id_lang); + + parent::__construct($data, $args); + } + + protected function initGDPR($id_lang) + { + empty($id_lang) && $id_lang = $this->context->language->id; + + if (\Module::isEnabled('psgdpr') && \Module::getInstanceByName('psgdpr') && + call_user_func('GDPRConsent::getConsentActive', $id_module = \Module::getModuleIdByName('ps_emailsubscription')) + ) { + $this->gdpr = 'psgdpr_consent_checkbox'; + $this->gdpr_msg = call_user_func('GDPRConsent::getConsentMessage', $id_module, $id_lang); + $this->gdpr_cfg = $this->getModuleLink('psgdpr&page=dataConsent'); + } elseif (\Module::isEnabled('gdprpro') && \Configuration::get('gdpr-pro_consent_newsletter_enable')) { + $this->gdpr = 'gdpr_consent_chkbox'; + $this->gdpr_msg = \Configuration::get('gdpr-pro_consent_newsletter_text', $id_lang); + $this->gdpr_cfg = empty($this->context->employee) ? '#' : $this->context->link->getAdminLink('AdminGdprConfig'); + } + + // Strip

tags from GDPR message + empty($this->gdpr_msg) or $this->gdpr_msg = preg_replace('~~i', '', $this->gdpr_msg); + } +} diff --git a/modules/creativeelements/includes/widgets/facebook-button.php b/modules/creativeelements/includes/widgets/facebook-button.php new file mode 100644 index 00000000..0b7491af --- /dev/null +++ b/modules/creativeelements/includes/widgets/facebook-button.php @@ -0,0 +1,181 @@ +startControlsSection( + 'section_content', + [ + 'label' => __('Button'), + ] + ); + + $this->addControl( + 'type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'default' => 'like', + 'options' => [ + 'like' => __('Like'), + 'recommend' => __('Recommend'), + ], + ] + ); + + $this->addControl( + 'layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'default' => 'standard', + 'options' => [ + 'standard' => __('Standard'), + 'button' => __('Button'), + 'button_count' => __('Button Count'), + 'box_count' => __('Box Count'), + ], + 'prefix_class' => 'elementor-type-', + 'render_type' => 'template', + ] + ); + + $this->addControl( + 'size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'default' => 'small', + 'options' => [ + 'small' => __('Small'), + 'large' => __('Large'), + ], + 'prefix_class' => 'elementor-size-', + 'render_type' => 'template', + ] + ); + + $this->addControl( + 'show_share', + [ + 'label' => __('Share Button'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + ] + ); + + $this->addControl( + 'url_type', + [ + 'label' => __('Target URL'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'current' => __('Current Page'), + 'custom' => __('Custom'), + ], + 'separator' => 'before', + 'default' => 'current', + ] + ); + + $this->addControl( + 'url', + [ + 'label' => __('Link'), + 'placeholder' => __('https://your-link.com'), + 'label_block' => true, + 'condition' => [ + 'url_type' => 'custom', + ], + ] + ); + + $this->endControlsSection(); + } + + public function render() + { + $settings = $this->getSettings(); + + if ($settings['url_type'] == 'current') { + $url = \Tools::getShopProtocol() . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + } elseif (!empty($settings['url']) && \Validate::isAbsoluteUrl($settings['url'])) { + $url = $settings['url']; + } else { + return print Helper::transError('Invalid URL'); + } + + $this->addRenderAttribute('frame', [ + 'src' => 'about:blank', + 'loading' => 'lazy', + 'data-url' => 'https://www.facebook.com/plugins/like.php?' . http_build_query([ + 'href' => $url, + 'action' => $settings['type'], + 'layout' => $settings['layout'], + 'size' => $settings['size'], + 'share' => $settings['show_share'] ? 'true' : 'false', + ]), + 'style' => 'height: ' . + $this->getHeight($settings['layout'], $settings['size'], $settings['show_share']) . 'px;', + 'onload' => "this.removeAttribute('onload'),this.src=this.getAttribute('data-url')", + 'frameborder' => '0', + ]); + + echo "<\x69frame {$this->getRenderAttributeString('frame')}>"; + } + + public function renderPlainContent() + { + } +} diff --git a/modules/creativeelements/includes/widgets/facebook-page.php b/modules/creativeelements/includes/widgets/facebook-page.php new file mode 100644 index 00000000..fd839a45 --- /dev/null +++ b/modules/creativeelements/includes/widgets/facebook-page.php @@ -0,0 +1,211 @@ +startControlsSection( + 'section_content', + [ + 'label' => __('Facebook Page'), + ] + ); + + $this->addControl( + 'url', + [ + 'label' => __('URL'), + 'placeholder' => 'https://www.facebook.com/your-page/', + 'default' => 'https://www.facebook.com/webshopworks/', + 'label_block' => true, + 'description' => __('Paste the URL of the Facebook page.'), + ] + ); + + $this->addControl( + 'tabs', + [ + 'label' => __('Tabs'), + 'type' => ControlsManager::SELECT2, + 'multiple' => true, + 'label_block' => true, + 'default' => [ + 'timeline', + ], + 'options' => [ + 'timeline' => __('Timeline'), + 'events' => __('Events'), + 'messages' => __('Messages'), + ], + ] + ); + + $this->addControl( + 'small_header', + [ + 'label' => __('Small Header'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + ] + ); + + $this->addControl( + 'show_cover', + [ + 'label' => __('Cover'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'separator' => '', + ] + ); + + $this->addControl( + 'show_facepile', + [ + 'label' => __('Profile Photos'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'separator' => '', + ] + ); + + $this->addControl( + 'show_cta', + [ + 'label' => __('Custom CTA Button'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'separator' => '', + 'condition' => [ + 'small_header' => '', + ], + ] + ); + + $this->addControl( + 'height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => 'px', + 'size' => 500, + ], + 'range' => [ + 'px' => [ + 'min' => 70, + 'max' => 1000, + ], + ], + 'size_units' => ['px'], + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + } + + public function render() + { + $settings = $this->getSettings(); + + if (empty($settings['url'])) { + echo $this->getTitle() . ': ' . __('Please enter a valid URL'); + + return; + } + + $this->addRenderAttribute('frame', [ + 'height' => $settings['height']['size'], + 'src' => 'about:blank', + 'loading' => 'lazy', + 'data-url' => 'https://www.facebook.com/plugins/page.php?' . http_build_query([ + 'href' => $settings['url'], + 'tabs' => implode(',', $settings['tabs']), + 'small_header' => $settings['small_header'] ? 'true' : 'false', + 'hide_cover' => $settings['show_cover'] ? 'false' : 'true', + 'show_facepile' => $settings['show_facepile'] ? 'true' : 'false', + 'hide_cta' => $settings['show_cta'] ? 'false' : 'true', + 'height' => $settings['height']['size'], + 'width' => '', + ]), + 'onload' => "this.removeAttribute('onload'),this.src=this.getAttribute('data-url')+this.offsetWidth", + 'style' => implode(';', [ + 'border: none', + 'min-height: 70px', + 'min-width: 180px', + 'max-width: 500px', + ]), + 'frameborder' => '0', + 'scrolling' => 'no', + 'allow' => 'encrypted-media', + 'allowFullscreen' => 'true', + ]); + + echo "<\x69frame {$this->getRenderAttributeString('frame')}>"; + } + + public function renderPlainContent() + { + } +} diff --git a/modules/creativeelements/includes/widgets/flip-box.php b/modules/creativeelements/includes/widgets/flip-box.php new file mode 100644 index 00000000..2753c146 --- /dev/null +++ b/modules/creativeelements/includes/widgets/flip-box.php @@ -0,0 +1,1840 @@ +startControlsSection( + 'section_a', + [ + 'label' => __('Front'), + ] + ); + + $this->addControl( + 'graphic_element', + [ + 'label' => __('Graphic Element'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'none' => [ + 'title' => __('None'), + 'icon' => 'fa fa-ban', + ], + 'image' => [ + 'title' => __('Image'), + 'icon' => 'fa fa-picture-o', + ], + 'icon' => [ + 'title' => __('Icon'), + 'icon' => 'fa fa-star', + ], + ], + 'default' => 'icon', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'image', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'dynamic' => [ + 'active' => true, + ], + 'seo' => true, + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + 'condition' => [ + 'graphic_element' => 'image', + ], + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-star', + 'condition' => [ + 'graphic_element' => 'icon', + ], + ] + ); + + $this->addControl( + 'icon_view', + [ + 'label' => __('View'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + 'stacked' => __('Stacked'), + 'framed' => __('Framed'), + ], + 'default' => 'default', + 'condition' => [ + 'graphic_element' => 'icon', + ], + ] + ); + + $this->addControl( + 'icon_shape', + [ + 'label' => __('Shape'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'circle' => __('Circle'), + 'square' => __('Square'), + ], + 'default' => 'circle', + 'condition' => [ + 'icon_view!' => 'default', + 'graphic_element' => 'icon', + ], + ] + ); + + $this->addControl( + 'title_text_a', + [ + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('This is the heading'), + 'placeholder' => __('Enter your title'), + 'label_block' => true, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'description_text_a', + [ + 'show_label' => false, + 'type' => ControlsManager::TEXTAREA, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit.'), + 'placeholder' => __('Enter your description'), + ] + ); + + $this->addControl( + 'title_size_a', + [ + 'label' => __('Title HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => __('H1'), + 'h2' => __('H2'), + 'h3' => __('H3'), + 'h4' => __('H4'), + 'h5' => __('H5'), + 'h6' => __('H6'), + 'div' => __('div'), + 'span' => __('span'), + 'p' => __('p'), + ], + 'default' => 'h3', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_b', + [ + 'label' => __('Back'), + ] + ); + + $this->addControl( + 'graphic_element_b', + [ + 'label' => __('Graphic Element'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'none' => [ + 'title' => __('None'), + 'icon' => 'fa fa-ban', + ], + 'image' => [ + 'title' => __('Image'), + 'icon' => 'fa fa-picture-o', + ], + 'icon' => [ + 'title' => __('Icon'), + 'icon' => 'fa fa-star', + ], + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'image_b', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'dynamic' => [ + 'active' => true, + ], + 'seo' => true, + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + 'condition' => [ + 'graphic_element_b' => 'image', + ], + ] + ); + + $this->addControl( + 'icon_b', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-star', + 'condition' => [ + 'graphic_element_b' => 'icon', + ], + ] + ); + + $this->addControl( + 'icon_view_b', + [ + 'label' => __('View'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + 'stacked' => __('Stacked'), + 'framed' => __('Framed'), + ], + 'default' => 'default', + 'condition' => [ + 'graphic_element_b' => 'icon', + ], + ] + ); + + $this->addControl( + 'icon_shape_b', + [ + 'label' => __('Shape'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'circle' => __('Circle'), + 'square' => __('Square'), + ], + 'default' => 'circle', + 'condition' => [ + 'graphic_element_b' => 'icon', + 'icon_view_b!' => 'default', + ], + ] + ); + + $this->addControl( + 'title_text_b', + [ + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'label_block' => true, + 'default' => __('This is the heading'), + 'placeholder' => __('Enter your title'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'description_text_b', + [ + 'show_label' => false, + 'type' => ControlsManager::TEXTAREA, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit.'), + 'placeholder' => __('Enter your description'), + ] + ); + + $this->addControl( + 'title_size_b', + [ + 'label' => __('Title HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => __('H1'), + 'h2' => __('H2'), + 'h3' => __('H3'), + 'h4' => __('H4'), + 'h5' => __('H5'), + 'h6' => __('H6'), + 'div' => __('div'), + 'span' => __('span'), + 'p' => __('p'), + ], + 'default' => 'h3', + ] + ); + + $this->addControl( + 'button', + [ + 'label' => __('Button Text'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('Click Here'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('https://your-link.com'), + ] + ); + + $this->addControl( + 'link_click', + [ + 'label' => __('Apply Link On'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'box' => __('Whole Box'), + 'button' => __('Button Only'), + ], + 'default' => 'button', + 'condition' => [ + 'button!' => '', + 'link[url]!' => '', + ], + ] + ); + + $this->addControl( + 'button_icon', + [ + 'label' => __('Button Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => false, + 'condition' => [ + 'button!' => '', + ], + ] + ); + + $this->addControl( + 'button_icon_align', + [ + 'label' => __('Icon Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'left', + 'options' => [ + 'left' => __('Before'), + 'right' => __('After'), + ], + 'condition' => [ + 'button!' => '', + 'button_icon!' => '', + ], + ] + ); + + $this->addControl( + 'button_icon_indent', + [ + 'label' => __('Icon Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button-content-wrapper' => 'gap: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-button-text' => 'flex-grow: min(0, {{SIZE}})', + ], + 'condition' => [ + 'button!' => '', + 'button_icon!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_flip_box', + [ + 'label' => __('Flip Box'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 100, + 'max' => 1000, + ], + 'vh' => [ + 'min' => 10, + 'max' => 100, + ], + ], + 'size_units' => ['px', 'vh'], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box' => 'height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 200, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-side, {{WRAPPER}} .elementor-flip-box-overlay' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'heading_hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'flip_effect', + [ + 'label' => __('Flip Effect'), + 'type' => ControlsManager::SELECT, + 'default' => 'flip', + 'options' => [ + 'flip' => 'Flip', + 'slide' => 'Slide', + 'push' => 'Push', + 'zoom-in' => 'Zoom In', + 'zoom-out' => 'Zoom Out', + 'fade' => 'Fade', + ], + 'prefix_class' => 'elementor-flip-box--effect-', + ] + ); + + $this->addControl( + 'flip_direction', + [ + 'label' => __('Flip Direction'), + 'type' => ControlsManager::SELECT, + 'default' => 'up', + 'options' => [ + 'left' => __('Left'), + 'right' => __('Right'), + 'up' => __('Up'), + 'down' => __('Down'), + ], + 'prefix_class' => 'elementor-flip-box--direction-', + 'condition' => [ + 'flip_effect!' => [ + 'fade', + 'zoom-in', + 'zoom-out', + ], + ], + ] + ); + + $this->addControl( + 'flip_3d', + [ + 'label' => __('3D Depth'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('On'), + 'label_off' => __('Off'), + 'return_value' => 'elementor-flip-box--3d', + 'prefix_class' => '', + 'condition' => [ + 'flip_effect' => 'flip', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_a', + [ + 'label' => __('Front'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_style_a'); + + $this->startControlsTab( + 'tab_box_a', + [ + 'label' => __('Box'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background_a', + 'types' => ['none', 'classic', 'gradient'], + 'selector' => '{{WRAPPER}} .elementor-flip-box-front', + ] + ); + + $this->addControl( + 'background_overlay_a', + [ + 'label' => __('Background Overlay'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-overlay' => 'background-color: {{VALUE}};', + ], + 'condition' => [ + 'background_a_background' => 'classic', + 'background_a_image[url]!' => '', + ], + ] + ); + + $this->addControl( + 'alignment_a', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'vertical_position_a', + [ + 'label' => __('Vertical Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'top' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'middle' => [ + 'title' => __('Middle'), + 'icon' => 'eicon-v-align-middle', + ], + 'bottom' => [ + 'title' => __('Bottom'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'prefix_class' => 'elementor-flip-box-front--valign-', + ] + ); + + $this->addResponsiveControl( + 'padding_a', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-overlay' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border_a', + 'label' => __('Border Style'), + 'separator' => 'default', + 'selector' => '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-overlay', + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'shadow_a', + 'separator' => 'default', + 'selector' => '{{WRAPPER}} .elementor-flip-box-front', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_icon_a', + [ + 'label' => __('Icon'), + 'condition' => [ + 'graphic_element' => 'icon', + ], + ] + ); + + $this->addControl( + 'icon_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-icon-wrapper' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'icon_primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-view-stacked .elementor-icon' => 'background-color: {{VALUE}}', + implode(', ', [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-view-framed .elementor-icon', + '{{WRAPPER}} .elementor-flip-box-front .elementor-view-default .elementor-icon', + ]) => 'color: {{VALUE}}; border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'icon_secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-view-framed .elementor-icon' => 'background-color: {{VALUE}};', + '{{WRAPPER}} .elementor-flip-box-front .elementor-view-stacked .elementor-icon' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'icon_view!' => 'default', + ], + ] + ); + + $this->addControl( + 'icon_size', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 6, + 'max' => 300, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-icon' => 'font-size: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'icon_padding', + [ + 'label' => __('Icon Padding'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'icon_view!' => 'default', + ], + ] + ); + + $this->addControl( + 'icon_rotate', + [ + 'label' => __('Icon Rotate'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => 'deg', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-icon i' => 'transform: rotate({{SIZE}}{{UNIT}});', + ], + ] + ); + + $this->addControl( + 'icon_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'icon_view!' => 'default', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_image_a', + [ + 'label' => __('Image'), + 'condition' => [ + 'graphic_element' => 'image', + ], + ] + ); + + $this->addControl( + 'image_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-image' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'image_width', + [ + 'label' => __('Size (%)'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%'], + 'default' => [ + 'unit' => '%', + ], + 'range' => [ + '%' => [ + 'min' => 5, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-image img' => 'width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'image_opacity', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1, + 'min' => 0.10, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-image' => 'opacity: {{SIZE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'image_border', + 'selector' => '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-image img', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'image_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 200, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-image img' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_content_a', + [ + 'label' => __('Content'), + ] + ); + + $this->addControl( + 'heading_style_title_a', + [ + 'label' => __('Title'), + 'type' => ControlsManager::HEADING, + ] + ); + + $this->addControl( + 'title_spacing_a', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-title' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'title_color_a', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-title' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography_a', + 'selector' => '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-title', + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-title', + ] + ); + + $this->addControl( + 'heading_style_description_a', + [ + 'label' => __('Description'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'description_color_a', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-description' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'description_typography_a', + 'selector' => '{{WRAPPER}} .elementor-flip-box-front .elementor-flip-box-description', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_b', + [ + 'label' => __('Back'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_style_b'); + + $this->startControlsTab( + 'tab_box_b', + [ + 'label' => __('Box'), + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'background_b', + 'types' => ['none', 'classic', 'gradient'], + 'selector' => '{{WRAPPER}} .elementor-flip-box-back', + ] + ); + + $this->addControl( + 'background_overlay_b', + [ + 'label' => __('Background Overlay'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-overlay' => 'background-color: {{VALUE}};', + ], + 'condition' => [ + 'background_b_background' => 'classic', + 'background_b_image[url]!' => '', + ], + ] + ); + + $this->addControl( + 'alignment_b', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'vertical_position_b', + [ + 'label' => __('Vertical Position'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'top' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'middle' => [ + 'title' => __('Middle'), + 'icon' => 'eicon-v-align-middle', + ], + 'bottom' => [ + 'title' => __('Bottom'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'prefix_class' => 'elementor-flip-box-back--valign-', + ] + ); + + $this->addResponsiveControl( + 'padding_b', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-overlay' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border_b', + 'label' => __('Border Style'), + 'separator' => 'default', + 'selector' => '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-overlay', + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'shadow_b', + 'separator' => 'default', + 'selector' => '{{WRAPPER}} .elementor-flip-box-back', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_image_b', + [ + 'label' => __('Image'), + 'condition' => [ + 'graphic_element_b' => 'image', + ], + ] + ); + + $this->addControl( + 'image_spacing_b', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-image' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'image_width_b', + [ + 'label' => __('Size (%)'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%'], + 'default' => [ + 'unit' => '%', + ], + 'range' => [ + '%' => [ + 'min' => 5, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-image img' => 'width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'image_opacity_b', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1, + 'min' => 0.10, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-image' => 'opacity: {{SIZE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'image_border_b', + 'selector' => '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-image img', + ] + ); + + $this->addControl( + 'image_border_radius_b', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 200, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-image img' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_icon_b', + [ + 'label' => __('Icon'), + 'condition' => [ + 'graphic_element_b' => 'icon', + ], + ] + ); + + $this->addControl( + 'icon_spacing_b', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-icon-wrapper' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'icon_primary_color_b', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-view-stacked .elementor-icon' => 'background-color: {{VALUE}}', + '{{WRAPPER}} .elementor-flip-box-back .elementor-view-framed .elementor-icon, {{WRAPPER}} .elementor-flip-box-back .elementor-view-default .elementor-icon' => 'color: {{VALUE}}; border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'icon_secondary_color_b', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-view-framed .elementor-icon' => 'background-color: {{VALUE}};', + '{{WRAPPER}} .elementor-flip-box-back .elementor-view-stacked .elementor-icon' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'icon_view!' => 'default', + ], + ] + ); + + $this->addControl( + 'icon_size_b', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 6, + 'max' => 300, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-icon' => 'font-size: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'icon_padding_b', + [ + 'label' => __('Icon Padding'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'icon_view!' => 'default', + ], + ] + ); + + $this->addControl( + 'icon_rotate_b', + [ + 'label' => __('Icon Rotate'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => 'deg', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-icon i' => 'transform: rotate({{SIZE}}{{UNIT}});', + ], + ] + ); + + $this->addControl( + 'icon_border_radius_b', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'icon_view_b!' => 'default', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_content_b', + [ + 'label' => __('Content'), + ] + ); + + $this->addControl( + 'heading_style_title_b', + [ + 'label' => __('Title'), + 'type' => ControlsManager::HEADING, + ] + ); + + $this->addControl( + 'title_spacing_b', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-title' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'title_color_b', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-title' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography_b', + 'selector' => '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-title', + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke_b', + 'selector' => '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-title', + ] + ); + + $this->addControl( + 'heading_description_style_b', + [ + 'label' => __('Description'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'description_spacing_b', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-button' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'button!' => '', + ], + ] + ); + + $this->addControl( + 'description_color_b', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-description' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'description_typography_b', + 'selector' => '{{WRAPPER}} .elementor-flip-box-back .elementor-flip-box-description', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_button', + [ + 'label' => __('Button'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'button!' => '', + ], + ] + ); + + $this->addControl( + 'button_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'default' => 'sm', + 'options' => [ + 'xs' => __('Extra Small'), + 'sm' => __('Small'), + 'md' => __('Medium'), + 'lg' => __('Large'), + 'xl' => __('Extra Large'), + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'button_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .elementor-button', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + ] + ); + + $this->startControlsTabs('tabs_button_colors'); + + $this->startControlsTab( + 'tab_button_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'button_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button.elementor-button:not(#e), {{WRAPPER}} a.elementor-button:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_button_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'button_hover_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} button.elementor-button:not(#e):hover, {{WRAPPER}} a.elementor-button:not(#e):hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_hover_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button:hover' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'button_hover_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button:hover' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'button_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 20, + ], + ], + 'separator' => 'before', + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'border-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'button_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-button' => 'border-radius: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $flipbox_b_html_tag = 'div'; + $button_tag = 'a'; + $link_url = empty($settings['link']['url']) ? false : $settings['link']['url']; + + $this->addRenderAttribute([ + 'flipbox-back' => [ + 'class' => 'elementor-flip-box-back elementor-flip-box-side' + ], + 'button' => [ + 'class' => 'elementor-button elementor-size-' . $settings['button_size'], + ], + 'button_icon' => [ + 'class' => 'elementor-button-icon elementor-align-icon-' . $settings['button_icon_align'], + ], + ]); + + if (!empty($link_url)) { + if ($settings['link_click'] == 'box' || empty($settings['button'])) { + $flipbox_b_html_tag = 'a'; + $button_tag = 'button'; + $this->addRenderAttribute('flipbox-back', 'href', $link_url); + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('flipbox-back', 'target', '_blank'); + } + if ($settings['link']['nofollow']) { + $this->addRenderAttribute('flipbox-back', 'rel', 'nofollow'); + } + } else { + $this->addRenderAttribute('button', 'href', $link_url); + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('button', 'target', '_blank'); + } + if ($settings['link']['nofollow']) { + $this->addRenderAttribute('button', 'rel', 'nofollow'); + } + } + } + if ('icon' === $settings['graphic_element']) { + $this->addRenderAttribute('icon-wrapper-front', 'class', [ + 'elementor-icon-wrapper', + 'elementor-view-' . $settings['icon_view'], + ]); + if ('default' !== $settings['icon_view']) { + $this->addRenderAttribute('icon-wrapper-front', 'class', 'elementor-shape-' . $settings['icon_shape']); + } + if (!empty($settings['icon'])) { + $this->addRenderAttribute('icon_front', 'class', $settings['icon']); + } + } + if ('icon' === $settings['graphic_element_b']) { + $this->addRenderAttribute('icon-wrapper-back', 'class', [ + 'elementor-icon-wrapper', + 'elementor-view-' . $settings['icon_view_b'], + ]); + if ('default' !== $settings['icon_view_b']) { + $this->addRenderAttribute('icon-wrapper-back', 'class', 'elementor-shape-' . $settings['icon_shape_b']); + } + if (!empty($settings['icon_b'])) { + $this->addRenderAttribute('icon_b', 'class', $settings['icon_b']); + } + } + ?> +

+
+
+
+ +
getRenderAttributeString('icon-wrapper-front') ?>> +
+ getRenderAttributeString('icon_front') ?>> +
+
+ +
+ +
+ + + < class="elementor-flip-box-title"> + + > + + +
+ +
+
+
+ < getRenderAttributeString('flipbox-back') ?>> +
+
+ + +
+ +
+ +
getRenderAttributeString('icon-wrapper-back') ?>> +
+ getRenderAttributeString('icon_b') ?>> +
+
+ + + + < class="elementor-flip-box-title"> + + > + + +
+ + + < getRenderAttributeString('button') ?>> + + + getRenderAttributeString('button_icon') ?>> + + + + + + > + +
+
+ > +
+ + <# + if ( 'icon' === settings.graphic_element ) { + var iconWrapperClasses = 'elementor-icon-wrapper'; + iconWrapperClasses += ' elementor-view-' + settings.icon_view; + + if ( 'default' !== settings.icon_view ) { + iconWrapperClasses += ' elementor-shape-' + settings.icon_shape; + } + } + if ( 'icon' === settings.graphic_element_b ) { + var iconWrapperClassesBack = 'elementor-icon-wrapper'; + iconWrapperClassesBack += ' elementor-view-' + settings.icon_view_b; + + if ( 'default' !== settings.icon_view_b ) { + iconWrapperClassesBack += ' elementor-shape-' + settings.icon_shape_b; + } + } + + var titleTagFront = settings.title_size_a, + titleTagBack = settings.title_size_b, + btnSizeClass = 'elementor-size-' + settings.button_size, + wrapperTag = 'div', + buttonTag = 'div'; + + view.addRenderAttribute('flipbox-back', 'class', 'elementor-flip-box-back elementor-flip-box-side'); + view.addRenderAttribute('button', 'class', ['elementor-button', btnSizeClass]); + view.addRenderAttribute('button_icon', 'class', [ + 'elementor-button-icon', + 'elementor-align-icon-' + settings.button_icon_align + ]); + + if (settings.link) { + if ( 'box' === settings.link_click || !settings.button ) { + wrapperTag = 'a'; + buttonTag = 'button'; + view.addRenderAttribute( 'flipbox-back', 'href', settings.link.url ); + } else { + buttonTag = 'button'; + view.addRenderAttribute('button', 'href', settings.link.url); + } + } + #> +
+
+
+
+ <# if ( 'icon' === settings.graphic_element ) { #> +
+
+ +
+
+ <# } else if ( 'image' === settings.graphic_element && settings.image.url ) { #> +
+ +
+ <# } #> + <# if ( settings.title_text_a ) { #> + <{{ titleTagFront }} class="elementor-flip-box-title"> + {{{ settings.title_text_a }}} + + <# } #> + <# if ( settings.description_text_a ) { #> +
{{{ settings.description_text_a }}}
+ <# } #> +
+
+
+ <{{ wrapperTag }} {{{ view.getRenderAttributeString('flipbox-back') }}}> +
+
+ <# if ( 'icon' === settings.graphic_element_b ) { #> +
+
+ +
+
+ <# } else if ( 'image' === settings.graphic_element_b && settings.image_b.url ) { #> +
+ +
+ <# } #> + <# if ( settings.title_text_b ) { #> + <{{ titleTagBack }} class="elementor-flip-box-title"> + {{{ settings.title_text_b }}} + + <# } #> + <# if ( settings.description_text_b ) { #> +
{{{ settings.description_text_b }}}
+ <# } #> + <# if ( settings.button ) { #> + <{{ buttonTag }} {{{ view.getRenderAttributeString('button') }}}> + + <# if ( settings.button_icon ) { #> + + + + <# } #> + {{{ settings.button }}} + + + <# } #> +
+
+ +
+ startControlsSection( + 'section_map', + [ + 'label' => __('Map'), + ] + ); + + $default_address = __('London Eye, London, United Kingdom'); + $this->addControl( + 'address', + [ + 'label' => __('Location'), + 'type' => ControlsManager::TEXT, + // 'dynamic' => [ + // 'active' => true, + // 'categories' => [ + // TagsModule::POST_META_CATEGORY, + // ], + // ], + 'placeholder' => $default_address, + 'default' => $default_address, + 'label_block' => true, + ] + ); + + $this->addControl( + 'zoom', + [ + 'label' => __('Zoom'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 20, + ], + ], + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 40, + 'max' => 1440, + ], + ], + 'selectors' => [ + "{{WRAPPER}} \x69frame" => 'height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'prevent_scroll', + [ + 'label' => __('Prevent Scroll'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'selectors' => [ + "{{WRAPPER}} \x69frame" => 'pointer-events: none;', + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_map_style', + [ + 'label' => __('Map'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('map_filter'); + + $this->startControlsTab( + 'normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters', + 'selector' => "{{WRAPPER}} \x69frame", + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters_hover', + 'selector' => "{{WRAPPER}}:hover \x69frame", + ] + ); + + $this->addControl( + 'hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'selectors' => [ + "{{WRAPPER}} \x69frame" => 'transition-duration: {{SIZE}}s', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + } + + /** + * Render google maps widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if (empty($settings['address'])) { + return; + } + + if (0 === absint($settings['zoom']['size'])) { + $settings['zoom']['size'] = 10; + } + + printf( + '
' . + '<%s src="https://maps.google.com/maps?q=%s&t=m&z=%d&output=embed&iwloc=near"' . + ' loading="lazy" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" aria-label="%s">' . + '
', + "\x69frame", + rawurlencode($settings['address']), + absint($settings['zoom']['size']), + esc_attr($settings['address']) + ); + } + + /** + * Render google maps widget output in the editor. + * + * Written as a Backbone JavaScript template and used to generate the live preview. + * + * @since 1.0.0 + * @access protected + */ + protected function _contentTemplate() + { + } +} diff --git a/modules/creativeelements/includes/widgets/heading.php b/modules/creativeelements/includes/widgets/heading.php new file mode 100644 index 00000000..2ea14f90 --- /dev/null +++ b/modules/creativeelements/includes/widgets/heading.php @@ -0,0 +1,376 @@ +startControlsSection( + 'section_title', + [ + 'label' => __('Title'), + ] + ); + + $this->addControl( + 'title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXTAREA, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('Enter your title'), + 'default' => __('Add Your Heading Text Here'), + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'default' => [ + 'url' => '', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'default' => 'default', + 'options' => [ + 'default' => __('Default'), + 'small' => __('Small'), + 'medium' => __('Medium'), + 'large' => __('Large'), + 'xl' => __('XL'), + 'xxl' => __('XXL'), + ], + ] + ); + + $this->addControl( + 'header_size', + [ + 'label' => __('HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => 'H1', + 'h2' => 'H2', + 'h3' => 'H3', + 'h4' => 'H4', + 'h5' => 'H5', + 'h6' => 'H6', + 'div' => 'div', + 'span' => 'span', + 'p' => 'p', + ], + 'default' => 'h2', + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}}' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_title_style', + [ + 'label' => __('Title'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + // Stronger selector to avoid section style from overwriting + '{{WRAPPER}}.elementor-widget-heading .elementor-heading-title' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-heading-title', + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-heading-title', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'text_shadow', + 'selector' => '{{WRAPPER}} .elementor-heading-title', + ] + ); + + $this->addControl( + 'blend_mode', + [ + 'label' => __('Blend Mode'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Normal'), + 'multiply' => 'Multiply', + 'screen' => 'Screen', + 'overlay' => 'Overlay', + 'darken' => 'Darken', + 'lighten' => 'Lighten', + 'color-dodge' => 'Color Dodge', + 'saturation' => 'Saturation', + 'color' => 'Color', + 'difference' => 'Difference', + 'exclusion' => 'Exclusion', + 'hue' => 'Hue', + 'luminosity' => 'Luminosity', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-heading-title' => 'mix-blend-mode: {{VALUE}}', + ], + 'separator' => 'none', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render heading widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if (empty($settings['title'])) { + return; + } + + $this->addRenderAttribute('title', 'class', 'elementor-heading-title'); + + if (!empty($settings['size'])) { + $this->addRenderAttribute('title', 'class', 'elementor-size-' . $settings['size']); + } + + $this->addInlineEditingAttributes('title'); + + $title = $settings['title']; + + if (!empty($settings['link']['url'])) { + $this->addRenderAttribute('url', 'href', $settings['link']['url']); + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('url', 'target', '_blank'); + } + + if (!empty($settings['link']['nofollow'])) { + $this->addRenderAttribute('url', 'rel', 'nofollow'); + } + + $title = sprintf('%2$s', $this->getRenderAttributeString('url'), $title); + } + + printf( + '<%1$s %2$s>%3$s', + $settings['header_size'], + $this->getRenderAttributeString('title'), + $title + ); + } + + /** + * Render heading widget output in the editor. + * + * Written as a Backbone JavaScript template and used to generate the live preview. + * + * @since 1.0.0 + * @access protected + */ + protected function _contentTemplate() + { + ?> + <# + var title = settings.title, + header_size = settings.header_size; + + if ( '' !== settings.link.url ) { + title = '' + title + ''; + } + + view.addRenderAttribute( 'title', 'class', [ 'elementor-heading-title', 'elementor-size-' + settings.size ] ); + + view.addInlineEditingAttributes( 'title' ); + #> + <{{ header_size }} {{{ view.getRenderAttributeString( 'title' ) }}}>{{{ title }}} + startControlsSection( + 'section_title', + [ + 'label' => __('HTML Code'), + ] + ); + + $this->addControl( + 'html', + [ + 'label' => '', + 'type' => ControlsManager::CODE, + 'default' => '', + 'placeholder' => __('Enter your code'), + 'show_label' => false, + ] + ); + + $this->endControlsSection(); + } + + /** + * Render HTML widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + echo $this->getSettingsForDisplay('html'); + } + + /** + * Render HTML widget output in the editor. + * + * Written as a Backbone JavaScript template and used to generate the live preview. + * + * @since 1.0.0 + * @access protected + */ + protected function _contentTemplate() + { + ?> + {{{ settings.html }}} + startControlsSection( + 'section_icon', + [ + 'label' => __('Icon Box'), + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-star', + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + 'stacked' => __('Stacked'), + 'framed' => __('Framed'), + ], + 'default' => 'default', + 'prefix_class' => 'elementor-view-', + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'shape', + [ + 'label' => __('Shape'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'circle' => __('Circle'), + 'square' => __('Square'), + ], + 'default' => 'circle', + 'condition' => [ + 'view!' => 'default', + 'icon!' => '', + ], + 'prefix_class' => 'elementor-shape-', + ] + ); + + $this->addControl( + 'title_text', + [ + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('This is the heading'), + 'placeholder' => __('Enter your title'), + 'label_block' => true, + ] + ); + + $this->addControl( + 'description_text', + [ + 'label' => '', + 'type' => ControlsManager::TEXTAREA, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + 'placeholder' => __('Enter your description'), + 'rows' => 10, + 'separator' => 'none', + 'show_label' => false, + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('https://your-link.com'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'position', + [ + 'label' => __('Icon Position'), + 'type' => ControlsManager::CHOOSE, + 'default' => 'top', + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'top' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'prefix_class' => 'elementor-position-', + 'toggle' => false, + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'title_size', + [ + 'label' => __('Title HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => 'H1', + 'h2' => 'H2', + 'h3' => 'H3', + 'h4' => 'H4', + 'h5' => 'H5', + 'h6' => 'H6', + 'div' => 'div', + 'span' => 'span', + 'p' => 'p', + ], + 'default' => 'h3', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_icon', + [ + 'label' => __('Icon'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->startControlsTabs('icon_colors'); + + $this->startControlsTab( + 'icon_colors_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}}.elementor-view-stacked .elementor-icon' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-framed .elementor-icon, ' . + '{{WRAPPER}}.elementor-view-default .elementor-icon' => 'color: {{VALUE}}; border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'condition' => [ + 'view!' => 'default', + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-view-framed .elementor-icon' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-stacked .elementor-icon' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'icon_colors_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'hover_primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover, ' . + '{{WRAPPER}}.elementor-view-default .elementor-icon:hover' => 'color: {{VALUE}}; border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'condition' => [ + 'view!' => 'default', + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addResponsiveControl( + 'icon_space', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 15, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-position-right .elementor-icon-box-icon' => 'margin-left: {{SIZE}}{{UNIT}};', + '{{WRAPPER}}.elementor-position-left .elementor-icon-box-icon' => 'margin-right: {{SIZE}}{{UNIT}};', + '{{WRAPPER}}.elementor-position-top .elementor-icon-box-icon' => 'margin-bottom: {{SIZE}}{{UNIT}};', + '(mobile){{WRAPPER}} .elementor-icon-box-icon' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'icon_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 6, + 'max' => 300, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'font-size: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'icon_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};', + ], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + ], + ], + 'condition' => [ + 'view!' => 'default', + ], + ] + ); + + $this->addControl( + 'rotate', + [ + 'label' => __('Rotate'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0, + 'unit' => 'deg', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon i' => 'transform: rotate({{SIZE}}{{UNIT}});', + ], + ] + ); + + $this->addControl( + 'border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'view' => 'framed', + ], + ] + ); + + $this->addControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'view!' => 'default', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_content', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'text_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-box-wrapper' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'content_vertical_alignment', + [ + 'label' => __('Vertical Alignment'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'top' => __('Top'), + 'middle' => __('Middle'), + 'bottom' => __('Bottom'), + ], + 'default' => 'top', + 'prefix_class' => 'elementor-vertical-align-', + ] + ); + + $this->addControl( + 'heading_title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'title_bottom_space', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-box-title' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-box-title' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'selector' => '{{WRAPPER}} .elementor-icon-box-title', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-icon-box-title', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'title_shadow', + 'selector' => '{{WRAPPER}} .elementor-icon-box-title', + ] + ); + + $this->addControl( + 'heading_description', + [ + 'label' => __('Description'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'description_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-box-description' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'description_typography', + 'selector' => '{{WRAPPER}} .elementor-icon-box-description', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'description_shadow', + 'selector' => '{{WRAPPER}} .elementor-icon-box-description', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render icon box widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $this->addRenderAttribute('icon', 'class', ['elementor-icon', 'elementor-animation-' . $settings['hover_animation']]); + + $icon_tag = 'span'; + $has_icon = !empty($settings['icon']); + + if (!empty($settings['link']['url'])) { + $this->addRenderAttribute('link', 'href', $settings['link']['url']); + $icon_tag = 'a'; + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('link', 'target', '_blank'); + } + + if ($settings['link']['nofollow']) { + $this->addRenderAttribute('link', 'rel', 'nofollow'); + } + } + + if ($has_icon) { + $this->addRenderAttribute('i', 'class', $settings['icon']); + $this->addRenderAttribute('i', 'aria-hidden', 'true'); + } + + $this->addRenderAttribute('description_text', 'class', 'elementor-icon-box-description'); + + $link_attributes = $this->getRenderAttributeString('link'); + + $this->addInlineEditingAttributes('title_text', 'none'); + $this->addInlineEditingAttributes('description_text'); + ?> +
+ +
+ <getRenderAttributeString('icon') ?>> + getRenderAttributeString('i') ?>> + > +
+ +
+ < class="elementor-icon-box-title"> + <getRenderAttributeString('title_text') ?>> + + > + > +

getRenderAttributeString('description_text') ?>>

+
+
+ + <# + var link = settings.link.url ? 'href="' + settings.link.url + '"' : '', + iconTag = link ? 'a' : 'span'; + + view.addRenderAttribute( 'description_text', 'class', 'elementor-icon-box-description' ); + + view.addInlineEditingAttributes( 'title_text', 'none' ); + view.addInlineEditingAttributes( 'description_text' ); + #> +
+ <# if ( settings.icon ) { #> +
+ <{{{ iconTag + ' ' + link }}} class="elementor-icon elementor-animation-{{ settings.hover_animation }}"> + + +
+ <# } #> +
+ <{{{ settings.title_size }}} class="elementor-icon-box-title"> + <{{{ iconTag + ' ' + link }}} {{{ view.getRenderAttributeString( 'title_text' ) }}}> + {{{ settings.title_text }}} + + +

{{{ settings.description_text }}}

+
+
+ startControlsSection( + 'section_icon', + [ + 'label' => __('Icon List'), + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::CHOOSE, + 'default' => 'traditional', + 'options' => [ + 'traditional' => [ + 'title' => __('Default'), + 'icon' => 'eicon-editor-list-ul', + ], + 'inline' => [ + 'title' => __('Inline'), + 'icon' => 'eicon-ellipsis-h', + ], + ], + 'render_type' => 'template', + 'classes' => 'elementor-control-start-end', + 'label_block' => false, + 'style_transfer' => true, + 'prefix_class' => 'elementor-icon-list--layout-', + ] + ); + + $repeater = new Repeater(); + + $repeater->addControl( + 'text', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'label_block' => true, + 'placeholder' => __('List Item'), + 'default' => __('List Item'), + 'dynamic' => [ + 'active' => true, + ], + ] + ); + + $repeater->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => true, + 'default' => 'fa fa-check', + ] + ); + + $repeater->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'label_block' => true, + 'placeholder' => __('https://your-link.com'), + ] + ); + + $this->addControl( + 'icon_list', + [ + 'label' => '', + 'type' => ControlsManager::REPEATER, + 'fields' => $repeater->getControls(), + 'default' => [ + [ + 'text' => __('List Item #1'), + 'icon' => 'fa fa-check', + ], + [ + 'text' => __('List Item #2'), + 'icon' => 'fa fa-times', + ], + [ + 'text' => __('List Item #3'), + 'icon' => 'fa fa-dot-circle-o', + ], + ], + 'title_field' => ' {{{ text }}}', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_icon_list', + [ + 'label' => __('List'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-items:not(.elementor-inline-items) .elementor-icon-list-item:not(:last-child)' => 'padding-bottom: calc({{SIZE}}{{UNIT}}/2)', + '{{WRAPPER}} .elementor-icon-list-items:not(.elementor-inline-items) .elementor-icon-list-item:not(:first-child)' => 'margin-top: calc({{SIZE}}{{UNIT}}/2)', + '{{WRAPPER}} .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item' => 'margin-right: calc({{SIZE}}{{UNIT}}/2); margin-left: calc({{SIZE}}{{UNIT}}/2)', + '{{WRAPPER}} .elementor-icon-list-items.elementor-inline-items' => 'margin-right: calc(-{{SIZE}}{{UNIT}}/2); margin-left: calc(-{{SIZE}}{{UNIT}}/2)', + 'body.lang-rtl {{WRAPPER}} .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after' => 'left: calc(-{{SIZE}}{{UNIT}}/2)', + 'body:not(.lang-rtl) {{WRAPPER}} .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after' => 'right: calc(-{{SIZE}}{{UNIT}}/2)', + ], + ] + ); + + $this->addResponsiveControl( + 'icon_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-h-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'prefix_class' => 'elementor%s-align-', + ] + ); + + $text_columns = range(1, 10); + $text_columns = array_combine($text_columns, $text_columns); + $text_columns[''] = __('Default'); + + $this->addResponsiveControl( + 'columns', + [ + 'label' => __('Columns'), + 'type' => ControlsManager::SELECT, + 'separator' => 'before', + 'options' => &$text_columns, + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-items' => 'columns: {{VALUE}};', + ], + 'condition' => [ + 'view!' => 'inline', + ], + ] + ); + + $this->addResponsiveControl( + 'column_gap', + [ + 'label' => __('Columns Gap'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%', 'em', 'vw'], + 'range' => [ + 'px' => [ + 'max' => 100, + ], + '%' => [ + 'max' => 10, + 'step' => 0.1, + ], + 'vw' => [ + 'max' => 10, + 'step' => 0.1, + ], + 'em' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-items' => 'column-gap: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'view!' => 'inline', + ], + ] + ); + + $this->addControl( + 'divider', + [ + 'label' => __('Divider'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Off'), + 'label_on' => __('On'), + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-item:not(:last-child):after' => 'content: ""', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'divider_style', + [ + 'label' => __('Style'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'solid' => __('Solid'), + 'double' => __('Double'), + 'dotted' => __('Dotted'), + 'dashed' => __('Dashed'), + ], + 'default' => 'solid', + 'condition' => [ + 'divider' => 'yes', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-items:not(.elementor-inline-items) .elementor-icon-list-item:not(:last-child):after' => 'border-top-style: {{VALUE}}', + '{{WRAPPER}} .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:not(:last-child):after' => 'border-left-style: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'divider_weight', + [ + 'label' => __('Weight'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 1, + ], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 20, + ], + ], + 'condition' => [ + 'divider' => 'yes', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-items:not(.elementor-inline-items) .elementor-icon-list-item:not(:last-child):after' => 'border-top-width: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-inline-items .elementor-icon-list-item:not(:last-child):after' => 'border-left-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'divider_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => '%', + ], + 'condition' => [ + 'divider' => 'yes', + 'view!' => 'inline', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-item:not(:last-child):after' => 'width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'divider_height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%', 'px'], + 'default' => [ + 'unit' => '%', + ], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 100, + ], + '%' => [ + 'min' => 1, + 'max' => 100, + ], + ], + 'condition' => [ + 'divider' => 'yes', + 'view' => 'inline', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-item:not(:last-child):after' => 'height: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'divider_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#ddd', + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'condition' => [ + 'divider' => 'yes', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-item:not(:last-child):after' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_icon_style', + [ + 'label' => __('Icon'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'icon_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-icon i' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + ] + ); + + $this->addControl( + 'icon_color_hover', + [ + 'label' => __('Hover'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-item:hover .elementor-icon-list-icon i' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'icon_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 14, + ], + 'range' => [ + 'px' => [ + 'min' => 6, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-icon' => 'width: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} .elementor-icon-list-icon i' => 'font-size: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_text_style', + [ + 'label' => __('Text'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-text' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + ] + ); + + $this->addControl( + 'text_color_hover', + [ + 'label' => __('Hover'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-item:hover .elementor-icon-list-text' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'text_indent', + [ + 'label' => __('Text Indent'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-text' => is_rtl() ? 'padding-right: {{SIZE}}{{UNIT}};' : 'padding-left: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'icon_typography', + 'selector' => '{{WRAPPER}} .elementor-icon-list-item', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'text_shadow', + 'selector' => '{{WRAPPER}} .elementor-icon-list-item', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render icon list widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $this->addRenderAttribute('icon_list', 'class', 'elementor-icon-list-items'); + $this->addRenderAttribute('list_item', 'class', 'elementor-icon-list-item'); + + if ('inline' === $settings['view']) { + $this->addRenderAttribute('icon_list', 'class', 'elementor-inline-items'); + $this->addRenderAttribute('list_item', 'class', 'elementor-inline-item'); + } + ?> +
    getRenderAttributeString('icon_list') ?>> + $item) : + $repeater_setting_key = $this->getRepeaterSettingKey('text', 'icon_list', $index); + + $this->addRenderAttribute($repeater_setting_key, 'class', 'elementor-icon-list-text'); + + $this->addInlineEditingAttributes($repeater_setting_key); + ?> +
  • + addRenderAttribute($link_key, 'href', $item['link']['url']); + + if ($item['link']['is_external']) { + $this->addRenderAttribute($link_key, 'target', '_blank'); + } + + if ($item['link']['nofollow']) { + $this->addRenderAttribute($link_key, 'rel', 'nofollow'); + } + + echo 'getRenderAttributeString($link_key) . '>'; + } + ?> + + + + + + getRenderAttributeString($repeater_setting_key) ?>> + + + +
  • + +
+ + <# + view.addRenderAttribute( 'icon_list', 'class', 'elementor-icon-list-items' ); + view.addRenderAttribute( 'list_item', 'class', 'elementor-icon-list-item' ); + + if ( 'inline' == settings.view ) { + view.addRenderAttribute( 'icon_list', 'class', 'elementor-inline-items' ); + view.addRenderAttribute( 'list_item', 'class', 'elementor-inline-item' ); + } + #> + <# if ( settings.icon_list ) { #> + + <# } #> + startControlsSection( + 'section_icon', + [ + 'label' => __('Icon'), + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-star', + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + 'stacked' => __('Stacked'), + 'framed' => __('Framed'), + ], + 'default' => 'default', + 'prefix_class' => 'elementor-view-', + ] + ); + + $this->addControl( + 'shape', + [ + 'label' => __('Shape'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'circle' => __('Circle'), + 'square' => __('Square'), + ], + 'default' => 'circle', + 'condition' => [ + 'view!' => 'default', + ], + 'prefix_class' => 'elementor-shape-', + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('https://your-link.com'), + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'default' => 'center', + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-wrapper' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_icon', + [ + 'label' => __('Icon'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('icon_colors'); + + $this->startControlsTab( + 'icon_colors_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}}.elementor-view-stacked .elementor-icon' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-framed .elementor-icon, ' . + '{{WRAPPER}}.elementor-view-default .elementor-icon' => 'color: {{VALUE}}; border-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-framed a.elementor-icon:not(#e), ' . + '{{WRAPPER}}.elementor-view-default a.elementor-icon:not(#e)' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + ] + ); + + $this->addControl( + 'secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'condition' => [ + 'view!' => 'default', + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-view-framed .elementor-icon' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-stacked .elementor-icon, ' . + '{{WRAPPER}}.elementor-view-stacked a.elementor-icon:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'icon_colors_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'hover_primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover, ' . + '{{WRAPPER}}.elementor-view-default .elementor-icon:hover' => 'color: {{VALUE}}; border-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-framed a.elementor-icon:not(#e):hover, ' . + '{{WRAPPER}}.elementor-view-default a.elementor-icon:not(#e):hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'condition' => [ + 'view!' => 'default', + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover, ' . + '{{WRAPPER}}.elementor-view-stacked a.elementor-icon:not(#e):hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 6, + 'max' => 300, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'font-size: {{SIZE}}{{UNIT}};', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'icon_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};', + ], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + ], + ], + 'condition' => [ + 'view!' => 'default', + ], + ] + ); + + $this->addControl( + 'rotate', + [ + 'label' => __('Rotate'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0, + 'unit' => 'deg', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon i' => 'transform: rotate({{SIZE}}{{UNIT}});', + ], + ] + ); + + $this->addControl( + 'border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'view' => 'framed', + ], + ] + ); + + $this->addControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'view!' => 'default', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * Render icon widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $this->addRenderAttribute('wrapper', 'class', 'elementor-icon-wrapper'); + + $this->addRenderAttribute('icon-wrapper', 'class', 'elementor-icon'); + + if (!empty($settings['hover_animation'])) { + $this->addRenderAttribute('icon-wrapper', 'class', 'elementor-animation-' . $settings['hover_animation']); + } + + $icon_tag = 'div'; + + if (!empty($settings['link']['url'])) { + $this->addRenderAttribute('icon-wrapper', 'href', $settings['link']['url']); + $icon_tag = 'a'; + + if (!empty($settings['link']['is_external'])) { + $this->addRenderAttribute('icon-wrapper', 'target', '_blank'); + } + + if (!empty($settings['link']['nofollow'])) { + $this->addRenderAttribute('icon-wrapper', 'rel', 'nofollow'); + } + } + + if (!empty($settings['icon'])) { + $this->addRenderAttribute('icon', 'class', $settings['icon']); + $this->addRenderAttribute('icon', 'aria-hidden', 'true'); + } + + ?> +
getRenderAttributeString('wrapper') ?>> + < getRenderAttributeString('icon-wrapper') ?>> + getRenderAttributeString('icon') ?>> + > +
+ + <# + var link = settings.link.url ? 'href="' + settings.link.url + '"' : '', + iconTag = link ? 'a' : 'div'; + #> +
+ <{{{ iconTag }}} class="elementor-icon elementor-animation-{{ settings.hover_animation }}" {{{ link }}}> + + +
+ startControlsSection( + 'section_image', + [ + 'label' => __('Image Box'), + ] + ); + + $this->addControl( + 'image', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'seo' => true, + 'dynamic' => [ + 'active' => true, + ], + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ] + ); + + $this->addControl( + 'title_text', + [ + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('This is the heading'), + 'placeholder' => __('Enter your title'), + 'label_block' => true, + ] + ); + + $this->addControl( + 'description_text', + [ + 'label' => __('Content'), + 'type' => ControlsManager::TEXTAREA, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + 'placeholder' => __('Enter your description'), + 'separator' => 'none', + 'rows' => 10, + 'show_label' => false, + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('https://your-link.com'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'position', + [ + 'label' => __('Image Position'), + 'type' => ControlsManager::CHOOSE, + 'default' => 'top', + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'top' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'prefix_class' => 'elementor-position-', + 'toggle' => false, + ] + ); + + $this->addControl( + 'title_size', + [ + 'label' => __('Title HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => 'H1', + 'h2' => 'H2', + 'h3' => 'H3', + 'h4' => 'H4', + 'h5' => 'H5', + 'h6' => 'H6', + 'div' => 'div', + 'span' => 'span', + 'p' => 'p', + ], + 'default' => 'h3', + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_image', + [ + 'label' => __('Image'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'image_space', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 15, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-position-right .elementor-image-box-img' => 'margin-left: {{SIZE}}{{UNIT}};', + '{{WRAPPER}}.elementor-position-left .elementor-image-box-img' => 'margin-right: {{SIZE}}{{UNIT}};', + '{{WRAPPER}}.elementor-position-top .elementor-image-box-img' => 'margin-bottom: {{SIZE}}{{UNIT}};', + '(mobile){{WRAPPER}} .elementor-image-box-img' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'image_size', + [ + 'label' => __('Width') . ' (%)', + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 30, + 'unit' => '%', + ], + 'tablet_default' => [ + 'unit' => '%', + ], + 'mobile_default' => [ + 'unit' => '%', + ], + 'size_units' => ['%'], + 'range' => [ + '%' => [ + 'min' => 5, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-box-wrapper .elementor-image-box-img' => 'width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->startControlsTabs('image_effects'); + + $this->startControlsTab( + 'normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters', + 'selector' => '{{WRAPPER}} .elementor-image-box-img img', + ] + ); + + $this->addControl( + 'image_opacity', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1, + 'min' => 0.10, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-box-img img' => 'opacity: {{SIZE}};', + ], + ] + ); + + $this->addControl( + 'background_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0.3, + ], + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-box-img img' => 'transition-duration: {{SIZE}}s', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters_hover', + 'selector' => '{{WRAPPER}}:hover .elementor-image-box-img img', + ] + ); + + $this->addControl( + 'image_opacity_hover', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1, + 'min' => 0.10, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}}:hover .elementor-image-box-img img' => 'opacity: {{SIZE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_content', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'text_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-box-wrapper' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'content_vertical_alignment', + [ + 'label' => __('Vertical Alignment'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'top' => __('Top'), + 'middle' => __('Middle'), + 'bottom' => __('Bottom'), + ], + 'default' => 'top', + 'prefix_class' => 'elementor-vertical-align-', + ] + ); + + $this->addControl( + 'heading_title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'title_bottom_space', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-box-title' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-image-box-title' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'selector' => '{{WRAPPER}} .elementor-image-box-title', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-image-box-title', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'title_shadow', + 'selector' => '{{WRAPPER}} .elementor-image-box-title', + ] + ); + + $this->addControl( + 'heading_description', + [ + 'label' => __('Description'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'description_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-image-box-description' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'description_typography', + 'selector' => '{{WRAPPER}} .elementor-image-box-description', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'description_shadow', + 'selector' => '{{WRAPPER}} .elementor-image-box-description', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render image box widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $has_content = !empty($settings['title_text']) || !empty($settings['description_text']); + + $html = '
'; + + if (!empty($settings['link']['url'])) { + $this->addRenderAttribute('link', 'href', $settings['link']['url']); + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('link', 'target', '_blank'); + } + + if (!empty($settings['link']['nofollow'])) { + $this->addRenderAttribute('link', 'rel', 'nofollow'); + } + } + + if (!empty($settings['image']['url'])) { + $image_html = GroupControlImageSize::getAttachmentImageHtml($settings); + + if (!empty($settings['link']['url'])) { + $image_html = 'getRenderAttributeString('link') . '>' . $image_html . ''; + } + + $html .= '
' . $image_html . '
'; + } + + if ($has_content) { + $html .= '
'; + + if (!empty($settings['title_text'])) { + $this->addRenderAttribute('title_text', 'class', 'elementor-image-box-title'); + + $this->addInlineEditingAttributes('title_text', 'none'); + + $title_html = $settings['title_text']; + + if (!empty($settings['link']['url'])) { + $title_html = 'getRenderAttributeString('link') . '>' . $title_html . ''; + } + + $html .= sprintf( + '<%1$s %2$s>%3$s', + $settings['title_size'], + $this->getRenderAttributeString('title_text'), + $title_html + ); + } + + if (!empty($settings['description_text'])) { + $this->addRenderAttribute('description_text', 'class', 'elementor-image-box-description'); + + $this->addInlineEditingAttributes('description_text'); + + $html .= sprintf( + '

%2$s

', + $this->getRenderAttributeString('description_text'), + $settings['description_text'] + ); + } + + $html .= '
'; + } + + $html .= '
'; + + echo $html; + } + + /** + * Render image box widget output in the editor. + * + * Written as a Backbone JavaScript template and used to generate the live preview. + * + * @since 1.0.0 + * @access protected + */ + protected function _contentTemplate() + { + ?> + <# + var html = '
'; + + if ( settings.image.url ) { + var imageUrl = elementor.imagesManager.getImageUrl( settings.image ), + imageHtml = ''; + + if ( settings.link.url ) { + imageHtml = '' + imageHtml + ''; + } + + html += '
' + imageHtml + '
'; + } + + var hasContent = !! ( settings.title_text || settings.description_text ); + + if ( hasContent ) { + html += '
'; + + if ( settings.title_text ) { + var title_html = settings.title_text; + + if ( settings.link.url ) { + title_html = '' + title_html + ''; + } + + view.addRenderAttribute( 'title_text', 'class', 'elementor-image-box-title' ); + + view.addInlineEditingAttributes( 'title_text', 'none' ); + + html += '<' + settings.title_size + ' ' + view.getRenderAttributeString( 'title_text' ) + '>' + + title_html + + ''; + } + + if ( settings.description_text ) { + view.addRenderAttribute( 'description_text', 'class', 'elementor-image-box-description' ); + + view.addInlineEditingAttributes( 'description_text' ); + + html += '

' + + settings.description_text + + '

'; + } + + html += '
'; + } + + html += '
'; + + print( html ); + #> + startControlsSection( + 'section_image_carousel', + [ + 'label' => __('Image Carousel'), + ] + ); + + $this->addControl( + 'links', + [ + 'type' => ControlsManager::RAW_HTML, + 'raw' => ' + ', + 'condition' => [ + 'link_to' => 'custom', + ], + ] + ); + + $repeater = new Repeater(); + + $repeater->addControl( + 'image', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'seo' => true, + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ] + ); + + $repeater->addControl( + 'caption', + [ + 'label' => __('Caption'), + 'label_block' => true, + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Enter your caption about the image'), + 'title' => __('Input image caption here'), + ] + ); + + $repeater->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'label_block' => true, + 'placeholder' => __('http://your-link.com'), + ] + ); + + $this->addControl( + 'carousel', + [ + 'type' => ControlsManager::REPEATER, + 'fields' => $repeater->getControls(), + 'default' => [ + [ + 'image' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ], + ], + 'title_field' => '<# if (image.url) { #>' . + '<# } #>' . + '{{{ caption || image.title || image.alt || image.url.split("/").pop() }}}', + ] + ); + + $this->addControl( + 'link_to', + [ + 'label' => __('Link'), + 'type' => ControlsManager::SELECT, + 'default' => 'none', + 'options' => [ + 'none' => __('None'), + 'file' => __('Media File'), + 'custom' => __('Custom URL'), + ], + ] + ); + + $this->addControl( + 'variable_width', + [ + 'label' => __('Variable Width'), + 'type' => ControlsManager::SWITCHER, + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'image_stretch', + [ + 'label' => __('Image Stretch'), + 'type' => ControlsManager::SWITCHER, + ] + ); + + $this->addResponsiveControl( + 'image_height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'vh'], + 'range' => [ + 'px' => [ + 'max' => 1000, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .slick-slide-image' => 'height: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'image_stretch!' => '', + ], + ] + ); + + $this->addControl( + 'open_lightbox', + [ + 'label' => __('Lightbox'), + 'type' => ControlsManager::SELECT, + 'default' => 'default', + 'options' => [ + 'default' => __('Default'), + 'yes' => __('Yes'), + 'no' => __('No'), + ], + 'condition' => [ + 'link_to' => 'file', + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->registerCarouselSection([ + 'variable_width' => true, + ]); + + $this->startControlsSection( + 'section_style_image', + [ + 'label' => __('Image'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'image_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Default'), + 'custom' => __('Custom'), + ], + ] + ); + + $this->addResponsiveControl( + 'image_spacing_custom', + [ + 'label' => __('Image Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'default' => [ + 'size' => 20, + ], + 'selectors' => [ + '{{WRAPPER}} .slick-list' => 'margin-left: -{{SIZE}}{{UNIT}}; -webkit-clip-path: inset(0 0 0 {{SIZE}}{{UNIT}}); clip-path: inset(0 0 0 {{SIZE}}{{UNIT}});', + '{{WRAPPER}} .slick-slide .slick-slide-inner' => 'padding-left: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'image_spacing' => 'custom', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'image_border', + 'selector' => '{{WRAPPER}} .elementor-image-carousel-wrapper .elementor-image-carousel .slick-slide-image', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'image_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-carousel-wrapper .elementor-image-carousel .slick-slide-image' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_caption', + [ + 'label' => __('Caption'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'caption_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'default' => 'center', + 'selectors' => [ + '{{WRAPPER}} .elementor-image-carousel-caption' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'caption_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-image-carousel-caption' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'caption_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + 'selector' => '{{WRAPPER}} .elementor-image-carousel-caption', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'caption_shadow', + 'selector' => '{{WRAPPER}} .elementor-image-carousel-caption', + ] + ); + + $this->endControlsSection(); + + $this->registerNavigationStyleSection(); + } + + public function onImport($widget) + { + // Compatibility fix with WP image-carousel + if (isset($widget['settings']['carousel'][0]['url'])) { + $carousel = []; + $import_images = Plugin::$instance->templates_manager->getImportImagesInstance(); + + foreach ($widget['settings']['carousel'] as &$img) { + $image = $import_images->import($img); + + $carousel[] = [ + '_imported' => true, + '_id' => Utils::generateRandomString(), + 'image' => $image ?: [ + 'id' => 0, + 'url' => Utils::getPlaceholderImageSrc(), + ], + ]; + } + + $widget['settings']['carousel'] = $carousel; + } + + return $widget; + } + + /** + * Render image carousel widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if (empty($settings['carousel'])) { + return; + } + + $id = $this->getId(); + $edit_mode = Plugin::$instance->editor->isEditMode(); + $slides = []; + + foreach ($settings['carousel'] as $index => &$attachment) { + if (empty($attachment['image']['url'])) { + continue; + } + $image_html = GroupControlImageSize::getAttachmentImageHtml($attachment, 'image', 'auto', 'slick-slide-image'); + $link = $this->getLinkUrl($attachment, $settings['link_to']); + + if ($link) { + $link_key = 'link_' . $index; + + $this->addRenderAttribute($link_key, [ + 'href' => $link['url'], + 'data-elementor-open-lightbox' => $settings['open_lightbox'], + 'data-elementor-lightbox-slideshow' => $id, + 'data-elementor-lightbox-index' => $index, + ]); + + if ($edit_mode) { + $this->addRenderAttribute($link_key, [ + 'class' => 'elementor-clickable', + ]); + } + + if (!empty($link['is_external'])) { + $this->addRenderAttribute($link_key, 'target', '_blank'); + } + + if (!empty($link['nofollow'])) { + $this->addRenderAttribute($link_key, 'rel', 'nofollow'); + } + + $image_html = 'getRenderAttributeString($link_key) . '>' . $image_html . ''; + } + + $slide_html = '
' . $image_html; + + if (!empty($attachment['caption'])) { + $slide_html .= + ''; + } + + $slide_html .= '
'; + + $slides[] = $slide_html; + } + + if ('yes' === $settings['variable_width']) { + $this->addRenderAttribute('carousel', 'class', 'slick-variable-width'); + } + + if ('yes' === $settings['image_stretch']) { + $this->addRenderAttribute('carousel', 'class', 'slick-image-stretch'); + } + + $this->renderCarousel($settings, $slides); + } + + /** + * Retrieve image carousel link URL. + * + * @since 1.0.0 + * @access private + * + * @param array $attachment + * @param object $instance + * + * @return array|string|false An array/string containing the attachment URL, or false if no link. + */ + private function getLinkUrl($attachment, $link_to) + { + if ('none' === $link_to) { + return false; + } + + if ('custom' === $link_to) { + if (empty($attachment['link']['url'])) { + return false; + } + + return $attachment['link']; + } + + return empty($attachment['image']['url']) ? false : [ + 'url' => Helper::getMediaLink($attachment['image']['url']), + ]; + } +} diff --git a/modules/creativeelements/includes/widgets/image-gallery.php b/modules/creativeelements/includes/widgets/image-gallery.php new file mode 100644 index 00000000..f1f092ee --- /dev/null +++ b/modules/creativeelements/includes/widgets/image-gallery.php @@ -0,0 +1,587 @@ +startControlsSection( + 'section_gallery', + [ + 'label' => __('Image Gallery'), + ] + ); + + $this->addControl( + 'links', + [ + 'type' => ControlsManager::RAW_HTML, + 'raw' => ' + ', + 'condition' => [ + 'gallery_link' => 'custom', + ], + ] + ); + + $repeater = new Repeater(); + + $repeater->addControl( + 'image', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'seo' => true, + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ] + ); + + $repeater->addControl( + 'caption', + [ + 'label' => __('Caption'), + 'label_block' => true, + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Enter your caption about the image'), + 'title' => __('Input image caption here'), + ] + ); + + $repeater->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'label_block' => true, + 'placeholder' => __('http://your-link.com'), + ] + ); + + $this->addControl( + 'gallery', + [ + 'type' => ControlsManager::REPEATER, + 'fields' => $repeater->getControls(), + 'default' => [ + [ + 'image' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ], + ], + 'title_field' => '<# if (image.url) { #>' . + '<# } #>' . + '{{{ caption || image.title || image.alt || image.url.split("/").pop() }}}', + ] + ); + + $this->addControl( + 'layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'default' => 'grid', + 'options' => [ + 'grid' => __('Grid'), + 'masonry' => __('Masonry'), + ], + 'prefix_class' => 'elementor-image-gallery--layout-', + ] + ); + + $gallery_columns = range(1, 10); + $gallery_columns = array_combine($gallery_columns, $gallery_columns); + + $this->addResponsiveControl( + 'gallery_columns', + [ + 'label' => __('Columns'), + 'type' => ControlsManager::SELECT, + 'desktop_default' => 4, + 'tablet_default' => 3, + 'mobile_default' => 2, + 'options' => &$gallery_columns, + 'selectors' => [ + '{{WRAPPER}} figure' => 'width: calc(100% / {{VALUE}})', + ], + ] + ); + + $this->addResponsiveControl( + 'gallery_max_height', + [ + 'label' => __('Max. Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 2000, + ], + 'vh' => [ + 'max' => 400, + ], + ], + 'size_units' => ['px', 'vh'], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-gallery' => 'max-height: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'layout' => 'masonry', + ], + ] + ); + + $this->addControl( + 'gallery_link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::SELECT, + 'default' => 'file', + 'options' => [ + 'none' => __('None'), + 'file' => __('Media File'), + 'custom' => __('Custom URL'), + ], + ] + ); + + $this->addControl( + 'open_lightbox', + [ + 'label' => __('Lightbox'), + 'type' => ControlsManager::SELECT, + 'default' => 'default', + 'options' => [ + 'default' => __('Default'), + 'yes' => __('Yes'), + 'no' => __('No'), + ], + 'condition' => [ + 'gallery_link' => 'file', + ], + ] + ); + + $this->addControl( + 'gallery_rand', + [ + 'label' => __('Order By'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Default'), + 'rand' => __('Random'), + ], + 'default' => '', + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_gallery_images', + [ + 'label' => __('Images'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'image_height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 800, + ], + ], + 'selectors' => [ + '{{WRAPPER}} img' => 'object-fit: cover; height: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'layout' => 'grid', + ], + ] + ); + + $this->addResponsiveControl( + 'image_spacing_custom', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'default' => [ + 'size' => 0, + ], + 'selectors' => [ + '{{WRAPPER}} figure' => 'padding: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-image-gallery' => 'margin: -{{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'image_border', + 'selector' => '{{WRAPPER}} figure img', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'image_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} figure img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_caption', + [ + 'label' => __('Caption'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'gallery_display_caption', + [ + 'label' => __('Display'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Show'), + 'none' => __('Hide'), + ], + 'selectors' => [ + '{{WRAPPER}} figcaption' => 'display: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'default' => 'center', + 'selectors' => [ + '{{WRAPPER}} figcaption' => 'text-align: {{VALUE}};', + ], + 'condition' => [ + 'gallery_display_caption' => '', + ], + ] + ); + + $this->addControl( + 'text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} figcaption' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'gallery_display_caption' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + 'selector' => '{{WRAPPER}} figcaption', + 'condition' => [ + 'gallery_display_caption' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'caption_shadow', + 'selector' => '{{WRAPPER}} figcaption', + 'condition' => [ + 'gallery_display_caption' => '', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * Render image gallery widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if (!$settings['gallery']) { + return; + } + $gallery = $settings['gallery']; + + empty($settings['gallery_rand']) or shuffle($gallery); + + $this->addRenderAttribute('link', [ + 'data-elementor-open-lightbox' => $settings['open_lightbox'], + 'data-elementor-lightbox-slideshow' => $this->getId(), + ]); + + if (Plugin::$instance->editor->isEditMode()) { + $this->addRenderAttribute('link', [ + 'class' => 'elementor-clickable', + ]); + } + ?> + + + <# + function getLinkUrl(attachment, linkTo) { + if ('none' === linkTo) { + return false; + } + if ('custom' === linkTo) { + if (!attachment || !attachment.link || !attachment.link.url) { + return false; + } + return attachment.link; + } + return !attachment || !attachment.image || !attachment.image.url ? false : { + url: elementor.imagesManager.getImageUrl(attachment.image), + }; + } + var gallery = !settings.gallery_rand ? settings.gallery : settings.gallery.sort(function shuffle() { + return Math.random() > 0.5 ? 1 : -1; + }), + link; + + view.addRenderAttribute('link', { + 'class': 'elementor-clickable', + 'data-elementor-open-lightbox': settings.open_lightbox, + 'data-elementor-lightbox-slideshow': view.getID(), + }); + #> + + Helper::getMediaLink($attachment['image']['url']), + ]; + } +} diff --git a/modules/creativeelements/includes/widgets/image-hotspot.php b/modules/creativeelements/includes/widgets/image-hotspot.php new file mode 100644 index 00000000..31b02fcb --- /dev/null +++ b/modules/creativeelements/includes/widgets/image-hotspot.php @@ -0,0 +1,794 @@ +startControlsSection( + 'section_image', + [ + 'label' => __('Image'), + ] + ); + + $this->addControl( + 'image', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'seo' => true, + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'default' => 'center', + 'selectors' => [ + '{{WRAPPER}}' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_hotspots', + [ + 'label' => __('Hotspots'), + ] + ); + + $this->addControl( + 'hotspots', + [ + 'label' => '', + 'type' => ControlsManager::REPEATER, + 'default' => [ + [ + '_id' => Utils::generateRandomString(), + 'title' => __('Hotspot #1'), + 'description' => + '

' . __('Lorem ipsum dolor sit amet, consectetur adipiscing elit.') . '

', + 'x' => [ + 'size' => 25, + 'unit' => '%', + ], + 'y' => [ + 'size' => 50, + 'unit' => '%', + ], + 'link' => [ + 'url' => '', + ], + ], + ], + 'fields' => [ + [ + 'name' => 'title', + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'default' => __('Hotspot Title'), + 'label_block' => true, + ], + [ + 'name' => 'description', + 'type' => ControlsManager::WYSIWYG, + 'default' => '

' . __('Hotspot Description') . '

', + 'show_label' => false, + ], + [ + 'name' => 'x', + 'label' => _x('X Position', 'Background Control'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 50, + 'unit' => '%', + ], + 'range' => [ + '%' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot-wrapper{{CURRENT_ITEM}}' => 'left: {{SIZE}}{{UNIT}};', + ], + ], + [ + 'name' => 'y', + 'label' => _x('Y Position', 'Background Control'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 50, + 'unit' => '%', + ], + 'range' => [ + '%' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot-wrapper{{CURRENT_ITEM}}' => 'top: {{SIZE}}{{UNIT}}', + ], + ], + [ + 'name' => 'link', + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'default' => ['url' => ''], + 'placeholder' => 'http://your-link.com', + ], + ], + 'title_field' => '{{{ title }}}', + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => '', + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + 'stacked' => __('Stacked'), + 'framed' => __('Framed'), + ], + 'default' => 'framed', + 'prefix_class' => 'elementor-view-', + ] + ); + + $this->addControl( + 'title_size', + [ + 'label' => __('Title HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => __('H1'), + 'h2' => __('H2'), + 'h3' => __('H3'), + 'h4' => __('H4'), + 'h5' => __('H5'), + 'h6' => __('H6'), + 'div' => __('div'), + 'span' => __('span'), + 'p' => __('p'), + ], + 'default' => 'h4', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_image', + [ + 'label' => __('Image'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'image_size', + [ + 'label' => __('Size (%)'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 100, + 'unit' => '%', + ], + 'size_units' => ['%'], + 'range' => [ + '%' => [ + 'min' => 1, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot' => 'max-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'image_opacity', + [ + 'label' => __('Opacity (%)'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1, + 'min' => 0.10, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot > img' => 'opacity: {{SIZE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'image_border', + 'label' => __('Image Border'), + 'selector' => '{{WRAPPER}} .elementor-image-hotspot > img', + ] + ); + + $this->addControl( + 'image_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot > img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'image_box_shadow', + 'selector' => '{{WRAPPER}} .elementor-image-hotspot > img', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_icon', + [ + 'label' => __('Icon'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'icon_size', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 22, + 'unit' => 'px', + ], + 'range' => [ + 'px' => [ + 'min' => 6, + 'max' => 300, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'font-size: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'icon_padding', + [ + 'label' => __('Icon Padding'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 0.4, + 'unit' => 'em', + ], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'view!' => 'default', + ], + ] + ); + + $this->addControl( + 'icon_rotate', + [ + 'label' => __('Icon Rotate'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-icon:before' => 'transform: rotate({{SIZE}}{{UNIT}});', + ], + ] + ); + + $this->addControl( + 'icon_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'view' => 'framed', + ], + ] + ); + + $this->addControl( + 'icon_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'view!' => 'default', + ], + ] + ); + + $this->startControlsTabs('icon_tabs'); + + $this->startControlsTab( + 'icon_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'icon_primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-view-stacked .elementor-icon' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-framed .elementor-icon, {{WRAPPER}}.elementor-view-default .elementor-icon' => 'color: {{VALUE}}; border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'icon_secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#ffffff', + 'condition' => [ + 'view!' => 'default', + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-view-framed .elementor-icon' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-stacked .elementor-icon' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'icon_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'hover_primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover, {{WRAPPER}}.elementor-view-default .elementor-icon:hover' => 'color: {{VALUE}}; border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'condition' => [ + 'view!' => 'default', + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'icon_animation', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_box', + [ + 'label' => __('Box'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'box_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 500, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot-content' => 'width: {{SIZE}}px', + ], + ] + ); + + $this->addResponsiveControl( + 'box_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'box_background', + 'types' => ['classic'], + 'selector' => '{{WRAPPER}} .elementor-image-hotspot-content', + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'box_border', + 'selector' => '{{WRAPPER}} .elementor-image-hotspot-content', + ] + ); + + $this->addControl( + 'box_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot-content' => 'border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;', + ], + ] + ); + + $this->addControl( + 'box_shadow_type', + [ + 'label' => _x('Box Shadow', 'Box Shadow Control'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Default'), + 'outset' => __('Custom'), + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'box_shadow', + [ + 'type' => ControlsManager::BOX_SHADOW, + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot-content' => 'box-shadow: {{HORIZONTAL}}px {{VERTICAL}}px {{BLUR}}px {{SPREAD}}px {{COLOR}};', + ], + 'condition' => [ + 'box_shadow_type!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_content', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'text_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot-content' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'heading_title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'title_bottom_space', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot-title' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot-title' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-image-hotspot-title', + ] + ); + + $this->addControl( + 'heading_description', + [ + 'label' => __('Description'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'description_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-hotspot .elementor-image-hotspot-description' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'description_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} .elementor-image-hotspot .elementor-image-hotspot-description', + ] + ); + + $this->endControlsSection(); + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if (empty($settings['image']['url'])) { + return; + } + + empty($settings['icon']) or $this->addRenderAttribute('icon', 'class', $settings['icon']); + ?> +
+ + $item) : ?> +
+ addRenderAttribute("icon-wrapper-$i", 'class', 'elementor-icon'); + + empty($settings['icon_animation']) or $this->addRenderAttribute("icon-wrapper-$i", [ + 'class' => 'elementor-animation-' . $settings['icon_animation'], + ]); + + if (!empty($item['link']['url'])) { + $icon_tag = 'a'; + $this->addRenderAttribute("icon-wrapper-$i", 'href', $item['link']['url']); + + empty($item['link']['is_external']) or $this->addRenderAttribute("icon-wrapper-$i", [ + 'target' => '_blank', + ]); + empty($item['link']['nofollow']) or $this->addRenderAttribute("icon-wrapper-$i", [ + 'rel' => 'nofollow', + ]); + } + ?> + < getRenderAttributeString("icon-wrapper-$i") ?>> + getRenderAttributeString('icon') ?>> + > +
+ + < class="elementor-image-hotspot-title"> + + > + + +
+ +
+
+ +
+ + <# + if (!settings.image.url) { + return; + } + var animation = settings.icon_animation ? 'elementor-animation-' + settings.icon_animation : ''; + #> +
+ + <# _.each( settings.hotspots, function( item ) { #> +
+ <# var iconTag = item.link.url ? 'a' : 'div'; #> + <{{{ iconTag }}} class="elementor-icon elementor-animation-{{ settings.icon_animation }}" + <# if (item.link.url) { #>href="{{ item.link.url }}"<# } #>> + + +
+ <# if (item.title) { #> + <{{{settings.title_size}}} class="elementor-image-hotspot-title"> + {{{item.title}}} + + <# } #> + <# if (item.description) { #> +
{{{item.description}}}
+ <# } #> +
+
+ <# }) #> +
+ startControlsSection( + 'section_image_slider', + [ + 'label' => __('Image Slider'), + ] + ); + + $this->addControl( + 'speed', + [ + 'label' => __('Speed') . ' (ms)', + 'type' => ControlsManager::NUMBER, + 'default' => '5000', + ] + ); + + $this->addControl( + 'pause', + [ + 'label' => __('Pause on Hover'), + 'type' => ControlsManager::SELECT, + 'default' => '1', + 'options' => [ + '1' => __('Yes'), + '' => __('No'), + ], + ] + ); + + $this->addControl( + 'wrap', + [ + 'label' => __('Loop forever'), + 'type' => ControlsManager::SELECT, + 'default' => '1', + 'options' => [ + '1' => __('Yes'), + '' => __('No'), + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_slides_list', + [ + 'label' => __('Slides List'), + ] + ); + + $modules = basename(_MODULE_DIR_); + $ample = 'ps_imageslider/images/sample'; + $img = Utils::getPlaceholderImageSrc(); + $desc = '

EXCEPTEUR OCCAECAT

' . + '

Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' . + 'Proin tristique in tortor et dignissim. Quisque non tempor leo. Maecenas egestas sem elit

'; + + $this->addControl( + 'slides', + [ + 'type' => ControlsManager::REPEATER, + 'default' => [ + [ + 'image' => [ + 'url' => file_exists(_PS_MODULE_DIR_ . $ample . '-1.jpg') ? "$modules/$ample-1.jpg" : $img, + 'id' => 0, + ], + 'title' => 'SAMPLE 1', + 'description' => $desc, + 'active' => '1', + ], + [ + 'image' => [ + 'url' => file_exists(_PS_MODULE_DIR_ . $ample . '-2.jpg') ? "$modules/$ample-2.jpg" : $img, + 'id' => 0, + ], + 'title' => 'SAMPLE 2', + 'description' => $desc, + 'active' => '1', + ], + [ + 'image' => [ + 'url' => file_exists(_PS_MODULE_DIR_ . $ample . '-3.jpg') ? "$modules/$ample-3.jpg" : $img, + 'id' => 0, + ], + 'title' => 'SAMPLE 3', + 'legend' => 'Excepteur Occaecat', + 'description' => $desc, + 'active' => '1', + ], + ], + 'fields' => [ + [ + 'name' => 'image', + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'seo' => true, + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ], + [ + 'name' => 'title', + 'label' => __('Title & Description'), + 'label_block' => true, + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Enter your title'), + 'default' => __('This is heading element'), + ], + [ + 'name' => 'description', + 'label' => __('Description'), + 'type' => ControlsManager::WYSIWYG, + 'default' => '', + ], + [ + 'name' => 'url', + 'label' => __('Link'), + 'type' => ControlsManager::TEXT, + 'label_block' => true, + 'placeholder' => __('http://your-link.com'), + ], + [ + 'name' => 'active', + 'label' => __('Enabled'), + 'type' => ControlsManager::SWITCHER, + 'default' => '1', + 'return_value' => '1', + ], + ], + 'title_field' => '{{{ title }}}', + ] + ); + + $this->endControlsSection(); + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $editSettings = Plugin::instance()->editor->isEditMode() ? $this->getData('editSettings') : null; + $activeItemIndex = isset($editSettings['activeItemIndex']) ? $editSettings['activeItemIndex'] : 0; + $slides = []; + + foreach ($settings['slides'] as $i => &$slide) { + if (!empty($slide['active']) && !$activeItemIndex || $i + 1 == $activeItemIndex) { + $slides[] = [ + 'image_url' => Helper::getMediaLink($slide['image']['url']), + 'title' => $slide['title'], + 'legend' => !empty($slide['image']['alt']) ? $slide['image']['alt'] : '', + 'description' => $slide['description'], + 'url' => $slide['url'], + ]; + } + } + + $context = \Context::getContext(); + $context->smarty->assign([ + 'homeslider' => [ + 'speed' => $settings['speed'], + 'pause' => $settings['pause'] ? 'true' : 'false', + 'wrap' => $settings['wrap'] ? 'true' : 'false', + 'slides' => $slides, + ], + ]); + + $tpl = 'modules/ps_imageslider/views/templates/hook/slider.tpl'; + + if (file_exists(_PS_THEME_DIR_ . $tpl)) { + $tpl_path = _PS_THEME_DIR_ . $tpl; + } elseif (($parent = $context->shop->theme->get('parent')) && file_exists(_PS_ALL_THEMES_DIR_ . "$parent/$tpl")) { + $tpl_path = _PS_ALL_THEMES_DIR_ . "$parent/$tpl"; + } else { + $tpl_path = _PS_ROOT_DIR_ . "/$tpl"; + } + + echo $context->smarty->fetch($tpl_path); + } + + public function renderPlainContent() + { + } +} diff --git a/modules/creativeelements/includes/widgets/image.php b/modules/creativeelements/includes/widgets/image.php new file mode 100644 index 00000000..7cd49b1c --- /dev/null +++ b/modules/creativeelements/includes/widgets/image.php @@ -0,0 +1,778 @@ +startControlsSection( + 'section_image', + [ + 'label' => __('Image'), + ] + ); + + $this->addControl( + 'image', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'seo' => true, + 'dynamic' => [ + 'active' => true, + ], + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'caption', + [ + 'label' => __('Custom Caption'), + 'label_block' => true, + 'type' => ControlsManager::TEXT, + 'default' => '', + 'placeholder' => __('Enter your image caption'), + 'dynamic' => [ + 'active' => true, + ], + ] + ); + + $this->addControl( + 'link_to', + [ + 'label' => __('Link'), + 'type' => ControlsManager::SELECT, + 'default' => 'none', + 'options' => [ + 'none' => __('None'), + 'file' => __('Media File'), + 'custom' => __('Custom URL'), + ], + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('https://your-link.com'), + 'condition' => [ + 'link_to' => 'custom', + ], + 'show_label' => false, + ] + ); + + $this->addControl( + 'open_lightbox', + [ + 'label' => __('Lightbox'), + 'type' => ControlsManager::SELECT, + 'default' => 'default', + 'options' => [ + 'default' => __('Default'), + 'yes' => __('Yes'), + 'no' => __('No'), + ], + 'condition' => [ + 'link_to' => 'file', + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_image', + [ + 'label' => __('Image'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => '%', + ], + 'tablet_default' => [ + 'unit' => '%', + ], + 'mobile_default' => [ + 'unit' => '%', + ], + 'size_units' => ['%', 'px', 'vw'], + 'range' => [ + '%' => [ + 'min' => 1, + 'max' => 100, + ], + 'px' => [ + 'min' => 1, + 'max' => 1000, + ], + 'vw' => [ + 'min' => 1, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image img' => 'width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'space', + [ + 'label' => __('Max Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => '%', + ], + 'tablet_default' => [ + 'unit' => '%', + ], + 'mobile_default' => [ + 'unit' => '%', + ], + 'size_units' => ['%', 'px', 'vw'], + 'range' => [ + '%' => [ + 'min' => 1, + 'max' => 100, + ], + 'px' => [ + 'min' => 1, + 'max' => 1000, + ], + 'vw' => [ + 'min' => 1, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image img' => 'max-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => 'px', + ], + 'tablet_default' => [ + 'unit' => 'px', + ], + 'mobile_default' => [ + 'unit' => 'px', + ], + 'size_units' => ['px', 'vh'], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 1000, + ], + 'vh' => [ + 'min' => 1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image img' => 'height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'object-fit', + [ + 'label' => __('Object Fit'), + 'type' => ControlsManager::SELECT, + 'condition' => [ + 'height[size]!' => '', + ], + 'options' => [ + '' => __('Default'), + 'fill' => _x('Fill', 'Background Control'), + 'cover' => _x('Cover', 'Background Control'), + 'contain' => _x('Contain', 'Background Control'), + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-image img' => 'object-fit: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'object_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::SELECT, + 'condition' => [ + 'height[size]!' => '', + ], + 'options' => [ + '' => __('Default'), + 'top left' => _x('Top Left', 'Background Control'), + 'top center' => _x('Top Center', 'Background Control'), + 'top right' => _x('Top Right', 'Background Control'), + 'center left' => _x('Center Left', 'Background Control'), + 'center center' => _x('Center Center', 'Background Control'), + 'center right' => _x('Center Right', 'Background Control'), + 'bottom left' => _x('Bottom Left', 'Background Control'), + 'bottom center' => _x('Bottom Center', 'Background Control'), + 'bottom right' => _x('Bottom Right', 'Background Control'), + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-image img' => 'object-position: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'separator_panel_style', + [ + 'type' => ControlsManager::DIVIDER, + 'style' => 'thick', + ] + ); + + $this->startControlsTabs('image_effects'); + + $this->startControlsTab( + 'normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'opacity', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1, + 'min' => 0.10, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image img' => 'opacity: {{SIZE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters', + 'selector' => '{{WRAPPER}} .elementor-image img', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'opacity_hover', + [ + 'label' => __('Opacity'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1, + 'min' => 0.10, + 'step' => 0.01, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image:hover img' => 'opacity: {{SIZE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters_hover', + 'selector' => '{{WRAPPER}} .elementor-image:hover img', + ] + ); + + $this->addControl( + 'background_hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image img' => 'transition-duration: {{SIZE}}s', + ], + ] + ); + + $this->addControl( + 'hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'image_border', + 'selector' => '{{WRAPPER}} .elementor-image img', + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'image_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-image img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'image_box_shadow', + 'exclude' => [ + 'box_shadow_position', + ], + 'selector' => '{{WRAPPER}} .elementor-image img', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_caption', + [ + 'label' => __('Caption'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'caption!' => '', + ], + ] + ); + + $this->addControl( + 'caption_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .widget-image-caption' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .widget-image-caption' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addControl( + 'caption_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .widget-image-caption' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'caption_typography', + 'selector' => '{{WRAPPER}} .widget-image-caption', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'caption_text_shadow', + 'selector' => '{{WRAPPER}} .widget-image-caption', + ] + ); + + $this->addResponsiveControl( + 'caption_space', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .widget-image-caption' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * Render image widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if (empty($settings['image']['url'])) { + return; + } + + $has_caption = !empty($settings['caption']); + $link = $this->getLinkUrl($settings); + + if ($link) { + $this->addRenderAttribute('link', [ + 'href' => $link['url'], + 'data-elementor-open-lightbox' => $settings['open_lightbox'], + ]); + + if (Plugin::$instance->editor->isEditMode()) { + $this->addRenderAttribute('link', [ + 'class' => 'elementor-clickable', + ]); + } + + if (!empty($link['is_external'])) { + $this->addRenderAttribute('link', 'target', '_blank'); + } + + if (!empty($link['nofollow'])) { + $this->addRenderAttribute('link', 'rel', 'nofollow'); + } + }?> + + + <# if ( settings.image.url ) { + var image_url = elementor.imagesManager.getImageUrl( settings.image ); + + if ( ! image_url ) { + return; + } + + var link_url; + + if ( 'custom' === settings.link_to ) { + link_url = settings.link.url; + } else if ( 'file' === settings.link_to ) { + link_url = image_url; + } + + #>
<# + var lightbox = 'data-elementor-open-lightbox', + imgClass = ''; + + if ( '' !== settings.hover_animation ) { + imgClass = 'elementor-animation-' + settings.hover_animation; + } + + if ( settings.caption ) { + #>
<# + } + + if ( link_url ) { + #><# + } + #><# + + if ( link_url ) { + #><# + } + + if ( settings.caption ) { + #>
{{{ settings.caption }}}
<# + } + + if ( settings.caption ) { + #>
<# + } + + #>
<# + } #> + Helper::getMediaLink($settings['image']['url']), + ]; + } +} diff --git a/modules/creativeelements/includes/widgets/index.php b/modules/creativeelements/includes/widgets/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/includes/widgets/index.php @@ -0,0 +1,8 @@ +startControlsSection( + 'section_selector', + [ + 'label' => $this->getTitle(), + ] + ); + + $this->addControl( + 'skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'default' => 'dropdown', + 'options' => [ + 'classic' => __('Classic'), + 'dropdown' => __('Dropdown'), + ], + 'separator' => 'after', + ] + ); + + $this->addControl( + 'content', + [ + 'label' => __('Content'), + 'label_block' => true, + 'type' => ControlsManager::SELECT2, + 'default' => ['name'], + 'options' => [ + 'flag' => __('Country Flag'), + 'code' => __('ISO Code'), + 'name' => __('Language'), + ], + 'multiple' => true, + ] + ); + + $this->addControl( + 'show_current', + [ + 'label' => __('Current Language'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'prefix_class' => 'elementor-nav--', + 'return_value' => 'active', + ] + ); + + $this->registerNavContentControls([ + 'layout_options' => [ + 'horizontal' => __('Horizontal'), + 'vertical' => __('Vertical'), + ], + 'submenu_condition' => [ + 'skin' => 'dropdown', + ], + ]); + + $this->endControlsSection(); + + $this->registerNavStyleSection([ + 'active_condition' => [ + 'show_current!' => '', + ], + 'space_between_condition' => [ + 'skin' => 'classic', + ], + ]); + + $this->registerDropdownStyleSection([ + 'dropdown_condition' => [ + 'skin' => 'dropdown', + ], + 'active_condition' => [ + 'show_current!' => '', + ], + ]); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-nav-menu'; + } + + /** + * Render language selector widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.0 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getActiveSettings(); + $context = \Context::getContext(); + $languages = \Language::getLanguages(true, $context->shop->id); + + if (count($languages) <= 1 || !$settings['content']) { + return; + } + $this->indicator = $settings['indicator']; + $this->lang_flag = in_array('flag', $settings['content']); + $this->lang_code = in_array('code', $settings['content']); + $this->lang_name = in_array('name', $settings['content']); + + $id_lang = $context->language->id; + $menu = [ + '0' => [ + 'id_lang' => $id_lang, + 'name' => $context->language->name, + 'iso_code' => $context->language->iso_code, + 'url' => 'javascript:;', + 'current' => false, + 'children' => [], + ] + ]; + foreach ($languages as &$lang) { + $lang['current'] = $id_lang == $lang['id_lang']; + $lang['url'] = $context->link->getLanguageLink($lang['id_lang']); + + if ($context->controller instanceof \IndexController) { + // Remove rewritten URL from home page + $lang['url'] = preg_replace('~[^/]+$~', '', $lang['url']); + } + $menu[0]['children'][] = $lang; + } + if ('classic' === $settings['skin']) { + $menu = &$menu[0]['children']; + } + $ul_class = 'elementor-nav'; + + if ('vertical' === $settings['layout']) { + $ul_class .= ' sm-vertical'; + } + + // General Menu. + ob_start(); + $this->selectorList($menu, 0, $ul_class); + $menu_html = ob_get_clean(); + + $this->addRenderAttribute('main-menu', 'class', [ + 'elementor-langs', + 'elementor-nav--main', + 'elementor-nav__container', + 'elementor-nav--layout-' . $settings['layout'], + ]); + + if ('none' !== $settings['pointer']) { + $animation_type = self::getPointerAnimationType($settings['pointer']); + + $this->addRenderAttribute('main-menu', 'class', [ + 'e--pointer-' . $settings['pointer'], + 'e--animation-' . $settings[$animation_type], + ]); + } + ?> + + + + module) { + return false; + } + $opts = []; + $table = _DB_PREFIX_ . 'layerslider'; + $sliders = \Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS( + "SELECT `id`, `name` FROM `$table` WHERE `flag_hidden` = 0 AND `flag_deleted` = 0 LIMIT 100" + ); + if (!empty($sliders)) { + foreach ($sliders as &$slider) { + $name = empty($slider['name']) ? 'Unnamed' : $slider['name']; + $opts[$slider['id']] = "#{$slider['id']} - $name"; + } + } + + return $opts; + } + + /** + * Register Creative Slider widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @since 1.0.0 + * @access protected + */ + protected function _registerControls() + { + $this->startControlsSection( + 'section_layerslider', + [ + 'label' => __('Creative Slider'), + ] + ); + + if ($this->module) { + $this->addControl( + 'ls-new', + [ + 'type' => ControlsManager::BUTTON, + 'text' => ' ' . __('Create New Slider'), + 'label_block' => true, + 'description' => __('or'), + ] + ); + + $this->addControl( + 'slider', + [ + 'classes' => 'ls-selector', + 'label' => __('Slider'), + 'type' => ControlsManager::SELECT2, + 'select2options' => [ + 'placeholder' => __('Select...'), + ], + 'options' => $this->getSliderOptions(), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'ls-edit', + [ + 'type' => ControlsManager::BUTTON, + 'text' => ' ' . __('Edit Slider'), + 'condition' => [ + 'slider!' => '0', + ], + ] + ); + } else { + $this->addControl( + 'ls-alert', + [ + 'raw' => $this->getAlert(), + 'type' => ControlsManager::RAW_HTML, + ] + ); + + $this->addControl( + 'ls-promo', + [ + 'raw' => $this->getPromo(), + 'type' => ControlsManager::RAW_HTML, + ] + ); + + $this->addControl('slider', ['type' => ControlsManager::HIDDEN]); + } + + $this->endControlsSection(); + } + + /** + * Render Creative Slider widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + if (!$this->module) { + return; + } + $id = (int) $this->getSettings('slider'); + + if (!empty($id)) { + $slider = $this->module->generateSlider($id); + + if (\Tools::getValue('render') === 'widget') { + $this->patchInitScript($slider, $id); + } + echo $slider; + } + } + + protected function patchInitScript(&$slider, $id) + { + $suffix = '_' . time(); + $slider = str_replace("layerslider_$id", "layerslider_$id$suffix", $slider); + ob_start(); + ?> + + module) { + return; + } + echo "<\x69frame src=\"https://creativeslider.webshopworks.com/promo-slider.html\" " . + "style=\"width: 100%; height: 66vh; border: none;\">"; + } + + protected function getAlert() + { + return ' +
+ + + + + + +

Do you need an awesome slider?

+

Creative Slider is the perfect choice for you. With this widget you can easily place Creative Slider anywhere.

+
'; + } + + protected function getPromo() + { + ob_start(); + $iso = get_locale(); + $more = "https://addons.prestashop.com/$iso/sliders-galleries/19062-creative-slider-responsive-slideshow.html"; + $demo = 'https://addons.prestashop.com/demo/FO11013.html'; + ?> + + + active)) { + $this->module = $ls; + + $context = \Context::getContext(); + + empty($context->employee) or Helper::$body_scripts['ce-layerslider'] = [ + 'hndl' => 'ce-layerslider', + 'l10n' => [ + 'ls' => [ + 'url' => $context->link->getAdminLink('AdminLayerSlider'), + 'NameYourSlider' => __('Name your new slider'), + 'ChangesYouMadeMayNotBeSaved' => __('Changes you made may not be saved, are you sure you want to close?'), + ], + ], + ]; + + if (is_admin()) { + wp_enqueue_style('jquery-fancybox', _PS_JS_DIR_ . 'jquery/plugins/fancybox/jquery.fancybox.css'); + wp_enqueue_script('jquery-fancybox', _PS_JS_DIR_ . 'jquery/plugins/fancybox/jquery.fancybox.js', ['jquery'], false, true); + } + } + parent::__construct($data, $args); + } +} diff --git a/modules/creativeelements/includes/widgets/menu-anchor.php b/modules/creativeelements/includes/widgets/menu-anchor.php new file mode 100644 index 00000000..7e4dc7b4 --- /dev/null +++ b/modules/creativeelements/includes/widgets/menu-anchor.php @@ -0,0 +1,160 @@ +startControlsSection( + 'section_anchor', + [ + 'label' => __('Anchor'), + ] + ); + + $this->addControl( + 'anchor', + [ + 'label' => __('The ID of Menu Anchor.'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('For Example: About'), + 'description' => __('This ID will be the CSS ID you will have to use in your own page, Without #.'), + 'label_block' => true, + ] + ); + + $this->addControl( + 'anchor_note', + [ + 'type' => ControlsManager::RAW_HTML, + 'raw' => sprintf(__('Note: The ID link ONLY accepts these chars: %s'), '`A-Z, a-z, 0-9, _ , -`'), + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render menu anchor widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $anchor = $this->getSettingsForDisplay('anchor'); + + if (!empty($anchor)) { + $this->addRenderAttribute('inner', 'id', sanitize_html_class($anchor)); + } + + $this->addRenderAttribute('inner', 'class', 'elementor-menu-anchor'); + ?> +
getRenderAttributeString('inner') ?>>
+ +
+ language->iso_code; + $path = _PS_MODULE_DIR_ . "$module/config_$iso.xml"; + + if ('en' === $iso || !file_exists($path)) { + $path = _PS_MODULE_DIR_ . "$module/config.xml"; + + if (!file_exists($path)) { + return null; + } + } + + libxml_use_internal_errors(true); + $config = @simplexml_load_file($path); + libxml_clear_errors(); + + return !$config ? null : (object) [ + 'name' => (string) $config->name, + 'displayName' => (string) $config->displayName, + 'author' => (string) $config->author, + 'tab' => (string) $config->tab, + ]; + } + + protected function getModuleOptions() + { + static $modules = []; + + if (!$modules && \Context::getContext()->controller instanceof \AdminCEEditorController) { + $exclude_tabs = get_option('elementor_exclude_modules', []); + $table = _DB_PREFIX_ . 'module'; + $inner_join_shop = \Shop::addSqlAssociation('module', 'm'); + $rows = \Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(" + SELECT m.`name` FROM `$table` m $inner_join_shop + WHERE m.`active` = 1 AND m.`name` NOT IN ('creativeelements', 'creativepopup', 'layerslider', 'messengerchat') + "); + if ($rows) { + foreach ($rows as &$row) { + $mod = self::getModuleConfig($row['name']); + + if ($mod && !in_array($mod->tab, $exclude_tabs)) { + $modules[$mod->name] = $mod->displayName ?: $mod->name; + } + } + } + } + return $modules; + } + + protected function _registerControls() + { + $this->startControlsSection( + 'section_module', + [ + 'label' => __('Module'), + ] + ); + + $this->addControl( + 'module', + [ + 'label_block' => true, + 'type' => ControlsManager::SELECT2, + 'select2options' => [ + 'placeholder' => __('Select...'), + ], + 'options' => $this->getModuleOptions(), + ] + ); + + $this->addControl( + 'hook', + [ + 'label' => __('Hook'), + 'type' => ControlsManager::TEXT, + 'description' => __('Specify the required hook if needed.'), + 'input_list' => [ + 'displayHome', + 'displayTop', + 'displayBanner', + 'displayNav1', + 'displayNav2', + 'displayNavFullWidth', + 'displayTopColumn', + 'displayLeftColumn', + 'displayRightColumn', + 'displayFooterBefore', + 'displayFooter', + 'displayFooterAfter', + 'displayFooterProduct', + ], + 'condition' => [ + 'module!' => '0', + ], + ] + ); + + $this->endControlsSection(); + } + + public static function isInCustomerGroups(\Module $module) + { + if (!\Group::isFeatureActive()) { + return true; + } + + $context = \Context::getContext(); + $customer = $context->customer; + + if ($customer instanceof \Customer && $customer->isLogged()) { + $groups = $customer->getGroups(); + } elseif ($customer instanceof \Customer && $customer->isLogged(true)) { + $groups = [\Configuration::get('PS_GUEST_GROUP')]; + } else { + $groups = [\Configuration::get('PS_UNIDENTIFIED_GROUP')]; + } + + $table = _DB_PREFIX_ . 'module_group'; + $id_shop = (int) $context->shop->id; + $id_module = (int) $module->id; + $id_groups = implode(', ', array_map('intval', $groups)); + + return (bool) \Db::getInstance()->getValue( + "SELECT 1 FROM $table WHERE id_module = $id_module AND id_shop = $id_shop AND id_group IN ($id_groups)" + ); + } + + protected function renderModule($module, $hook_name, $hook_args = []) + { + $res = ''; + try { + $mod = \Module::getInstanceByName($module); + + if (!empty($mod->active) && self::isInCustomerGroups($mod)) { + if (in_array(\Tools::strtolower($hook_name), self::$product_hooks)) { + $vars = &\Context::getContext()->smarty->tpl_vars; + + if (isset($vars['product']->value)) { + $hook_args['product'] = $vars['product']->value; + } + if (stripos($hook_name, 'footer') && isset($vars['category']->value)) { + $hook_args['category'] = $vars['category']->value; + } + } + + if (method_exists($mod, "hook$hook_name")) { + $res = \Hook::coreCallHook($mod, "hook$hook_name", $hook_args); + } elseif (method_exists($mod, 'renderWidget')) { + $res = \Hook::coreRenderWidget($mod, $hook_name, $hook_args); + } elseif (method_exists($mod, '__call')) { + $res = \Hook::coreCallHook($mod, "hook$hook_name", $hook_args); + } + } + } catch (\Exception $ex) { + // skip + } + return $res; + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if ($settings['module']) { + echo $this->renderModule( + $settings['module'], + !empty($settings['hook']) ? $settings['hook'] : 'displayCEWidget' + ); + } + } + + public function renderPlainContent() + { + } +} diff --git a/modules/creativeelements/includes/widgets/nav-menu.php b/modules/creativeelements/includes/widgets/nav-menu.php new file mode 100644 index 00000000..89e2f24a --- /dev/null +++ b/modules/creativeelements/includes/widgets/nav-menu.php @@ -0,0 +1,657 @@ +executeS(" + SELECT h.name FROM {$ps}link_block AS lb + INNER JOIN {$ps}hook AS h ON h.id_hook = lb.id_hook + ORDER BY h.name + "); + if ($rows) { + foreach ($rows as &$row) { + $hooks[$row['name']] = $row['name']; + } + } + return $hooks; + } + + /** + * Register nav menu widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @since 2.5.0 + * @access protected + */ + protected function _registerControls() + { + $is_admin = is_admin(); + + $this->startControlsSection( + 'section_layout', + [ + 'label' => __('Layout'), + ] + ); + + $this->addControl( + 'menu', + [ + 'label' => __('Menu'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'mainmenu' => __('Main Menu'), + 'categorytree' => __('Category Tree'), + 'linklist' => __('Link List'), + ], + 'default' => 'mainmenu', + 'save_default' => true, + ] + ); + + if ($is_admin && \Module::getInstanceByName('ps_mainmenu')) { + $this->addControl( + 'mainmenu_description', + [ + 'raw' => sprintf( + __("Go to the %s module to manage your menu items."), + $this->context->link->getAdminLink('AdminModules') . '&configure=ps_mainmenu', + __('Main Menu') + ), + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-descriptor', + 'condition' => [ + 'menu' => 'mainmenu', + ], + ] + ); + } else { + $this->addControl( + 'mainmenu_description', + [ + 'raw' => sprintf(__('%s module (%s) must be installed!'), __('Main Menu'), 'ps_mainmenu'), + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning', + 'condition' => [ + 'menu' => 'mainmenu', + ], + ] + ); + } + + $this->addControl( + 'linklist_hook', + [ + 'label' => __('Hook'), + 'type' => ControlsManager::SELECT, + 'default' => 'displayFooter', + 'options' => $is_admin ? $this->getAvailableHooks() : [], + 'condition' => [ + 'menu' => 'linklist', + ], + ] + ); + + if ($is_admin && \Module::getInstanceByName('ps_linklist')) { + $this->addControl( + 'linklist_description', + [ + 'raw' => sprintf( + __('Go to the %s module to manage your menu items.'), + $this->context->link->getAdminLink('AdminModules') . '&configure=ps_linklist', + __('Link List') + ), + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-descriptor', + 'condition' => [ + 'menu' => 'linklist', + ], + ] + ); + } else { + $this->addControl( + 'linklist_description', + [ + 'raw' => sprintf(__('%s module (%s) must be installed!'), __('Link List'), 'ps_linklist'), + 'type' => ControlsManager::RAW_HTML, + 'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning', + 'condition' => [ + 'menu' => 'linklist', + ], + ] + ); + } + + $this->registerNavContentControls([ + 'layout_options' => [ + 'horizontal' => __('Horizontal'), + 'vertical' => __('Vertical'), + 'dropdown' => __('Dropdown'), + ], + ]); + + $this->addControl( + 'heading_mobile_dropdown', + [ + 'label' => __('Mobile Dropdown'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + 'condition' => [ + 'layout!' => 'dropdown', + ], + ] + ); + + $breakpoints = Responsive::getBreakpoints(); + + $this->addControl( + 'dropdown', + [ + 'label' => __('Breakpoint'), + 'type' => ControlsManager::SELECT, + 'default' => 'tablet', + 'options' => [ + /* translators: %d: Breakpoint number. */ + 'mobile' => sprintf(__('Mobile (< %dpx)'), $breakpoints['md']), + /* translators: %d: Breakpoint number. */ + 'tablet' => sprintf(__('Tablet (< %dpx)'), $breakpoints['lg']), + ], + 'prefix_class' => 'elementor-nav--dropdown-', + 'condition' => [ + 'layout!' => 'dropdown', + ], + ] + ); + + $this->addControl( + 'full_width', + [ + 'label' => __('Full Width'), + 'type' => ControlsManager::SWITCHER, + 'description' => __('Stretch the dropdown of the menu to full width.'), + 'prefix_class' => 'elementor-nav--', + 'return_value' => 'stretch', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'text_align', + [ + 'label' => __('Align'), + 'type' => ControlsManager::SELECT, + 'default' => 'aside', + 'options' => [ + 'aside' => __('Aside'), + 'center' => __('Center'), + ], + 'prefix_class' => 'elementor-nav--text-align-', + ] + ); + + $this->addControl( + 'animation_dropdown', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'toggle', + 'options' => [ + 'toggle' => __('Toggle'), + 'accordion' => __('Accordion'), + ], + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'toggle', + [ + 'label' => __('Toggle Button'), + 'type' => ControlsManager::SELECT, + 'default' => 'burger', + 'options' => [ + '' => __('None'), + 'burger' => __('Hamburger'), + ], + 'prefix_class' => 'elementor-nav--toggle elementor-nav--', + 'render_type' => 'template', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'toggle_align', + [ + 'label' => __('Toggle Align'), + 'type' => ControlsManager::CHOOSE, + 'default' => 'left', + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-h-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'selectors_dictionary' => [ + 'left' => 'margin-right: auto', + 'center' => 'margin: 0 auto', + 'right' => 'margin-left: auto', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-menu-toggle' => '{{VALUE}}', + ], + 'condition' => [ + 'toggle!' => '', + ], + 'label_block' => false, + ] + ); + + $this->endControlsSection(); + + $this->registerCategoryTreeSection([ + 'condition' => [ + 'menu' => 'categorytree', + ], + ]); + + $this->registerNavStyleSection([ + 'devices' => ['desktop', 'tablet'], + 'scheme' => true, + 'condition' => [ + 'layout!' => 'dropdown', + ], + ]); + + $this->registerDropdownStyleSection([ + 'scheme' => true, + 'show_description' => true, + ]); + + $this->startControlsSection( + 'style_toggle', + [ + 'label' => __('Toggle Button'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'toggle!' => '', + ], + ] + ); + + $this->startControlsTabs('tabs_toggle_style'); + + $this->startControlsTab( + 'tab_toggle_style_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'toggle_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} div.elementor-menu-toggle' => 'color: {{VALUE}}', // Harder selector to override text color control + ], + ] + ); + + $this->addControl( + 'toggle_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-menu-toggle' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_toggle_style_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'toggle_color_hover', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} div.elementor-menu-toggle:hover' => 'color: {{VALUE}}', // Harder selector to override text color control + ], + ] + ); + + $this->addControl( + 'toggle_background_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-menu-toggle:hover' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'toggle_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 15, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-menu-toggle' => 'font-size: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'toggle_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-menu-toggle' => 'border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'toggle_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-menu-toggle' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * Render nav menu widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.0 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getActiveSettings(); + $this->indicator = $settings['indicator']; + $children = 'children'; + + if ('categorytree' === $settings['menu']) { + $render_method = 'psCategoryTree'; + + $menu = $this->getCategoryTree( + $this->getRootCategory($settings['root_category']), + $settings + ); + } elseif ('mainmenu' === $settings['menu']) { + $render_method = 'psMainMenu'; + + if (!$module = \Module::getInstanceByName('ps_mainmenu')) { + return; + } + $menu = $module->getWidgetVariables('displayCE', []); + } elseif ('linklist' === $settings['menu']) { + $render_method = 'psLinkList'; + $children = 'linkBlocks'; + + if (!$module = \Module::getInstanceByName('ps_linklist')) { + return; + } + $menu = $module->getWidgetVariables($settings['linklist_hook'], []); + } + + if (empty($menu[$children])) { + return; + } + + $ul_class = 'elementor-nav'; + + if ('vertical' === $settings['layout']) { + $ul_class .= ' sm-vertical'; + } + + ob_start(); + $this->$render_method($menu[$children], 0, $ul_class); + $menu_html = ob_get_clean(); + + $this->addRenderAttribute('menu-toggle', 'class', [ + 'elementor-menu-toggle', + ]); + + if (Plugin::$instance->editor->isEditMode()) { + $this->addRenderAttribute('menu-toggle', [ + 'class' => 'elementor-clickable', + ]); + } + + if ('dropdown' !== $settings['layout']) { + $this->addRenderAttribute('main-menu', 'class', [ + 'elementor-nav-menu', + 'elementor-nav--main', + 'elementor-nav__container', + 'elementor-nav--layout-' . $settings['layout'], + ]); + + if ('none' !== $settings['pointer']) { + $animation_type = self::getPointerAnimationType($settings['pointer']); + + $this->addRenderAttribute('main-menu', 'class', [ + 'e--pointer-' . $settings['pointer'], + 'e--animation-' . $settings[$animation_type], + ]); + } + ?> + + +
getRenderAttributeString('menu-toggle') ?>> + + +
+ + + + +
    > + context->controller instanceof \ProductController || $this->context->controller instanceof \CategoryController) && + $node['id'] == $this->context->cookie->last_visited_category; + ?> +
  • "> + + + indicator && $node['children']) : ?> + + + + psCategoryTree($node['children'], $depth + 1) ?> +
  • + +
+ + + context->language->id, 0, 1, 'id_product', 'ASC', false, true) : []; + + return !empty($prods[0]['id_product']) ? $prods[0]['id_product'] : 1; + } + + protected function _registerControls() + { + $this->startControlsSection( + 'section_product_box', + [ + 'label' => __('Product Box'), + ] + ); + + $this->addControl( + 'skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'options' => $this->getSkinOptions(), + 'default' => 'product', + ] + ); + + $this->addControl( + 'product_id', + [ + 'label' => __('Product'), + 'type' => ControlsManager::SELECT2, + 'label_block' => true, + 'select2options' => [ + 'placeholder' => __('Loading') . '...', + 'allowClear' => false, + 'product' => true, + 'ajax' => [ + 'url' => Helper::getAjaxProductsListLink(), + ], + ], + 'default' => $this->getDefaultProductId(), + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + + $this->registerMiniatureSections(); + + $this->startControlsSection( + 'section_style_product', + [ + 'label' => __('Product Box'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $product_selector = '{{WRAPPER}}:not(.wrapfix) .elementor-product-box > *, {{WRAPPER}}.wrapfix .elementor-product-box > * > *'; + $product_selector_hover = '{{WRAPPER}}:not(.wrapfix) .elementor-product-box > :hover, {{WRAPPER}}.wrapfix .elementor-product-box > * > :hover'; + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + '' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-product-box' => 'text-align: {{VALUE}};', + $product_selector => 'display: inline-block;', + ], + ] + ); + + $this->addResponsiveControl( + 'product_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + $product_selector => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}} !important;', + ], + ] + ); + + $this->addControl( + 'product_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + $product_selector => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; border-style: solid;', + ], + ] + ); + + $this->addControl( + 'product_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + $product_selector => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->startControlsTabs('product_style_tabs'); + + $this->startControlsTab( + 'product_style_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'product_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + $product_selector => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'product_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-product-miniature' => 'background: {{VALUE}};', + ], + 'condition' => [ + 'skin' => 'custom', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'product_box_shadow', + 'selector' => $product_selector, + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'product_style_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'product_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + $product_selector_hover => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'product_bg_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-product-miniature:hover' => 'background-color: {{VALUE}};', + ], + 'condition' => [ + 'skin' => 'custom', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'product_box_shadow_hover', + 'selector' => $product_selector_hover, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->registerMiniatureStyleSections(); + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $product = $this->getProduct($settings['product_id']); + + if (empty($product) || empty($this->context->currency->id)) { + return; + } + + if ('custom' === $settings['skin']) { + echo '
' . $this->fetchMiniature($settings, $product) . '
'; + } else { + if (!$tpl = $this->getSkinTemplate($settings['skin'])) { + return; + } + // Store product temporary if exists + isset($this->context->smarty->tpl_vars['product']) && $tmp = $this->context->smarty->tpl_vars['product']; + + $this->context->smarty->assign('product', $product); + + echo '
' . $this->context->smarty->fetch($tpl) . '
'; + + // Restore product if exists + isset($tmp) && $this->context->smarty->tpl_vars['product'] = $tmp; + } + } +} diff --git a/modules/creativeelements/includes/widgets/product-carousel.php b/modules/creativeelements/includes/widgets/product-carousel.php new file mode 100644 index 00000000..4da8ca15 --- /dev/null +++ b/modules/creativeelements/includes/widgets/product-carousel.php @@ -0,0 +1,331 @@ +startControlsSection( + 'section_product_carousel', + [ + 'label' => __('Product Carousel'), + ] + ); + + $this->addControl( + 'skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'options' => $this->getSkinOptions(), + 'default' => 'product', + ] + ); + + $this->registerListingControls(); + + $this->endControlsSection(); + + $this->registerMiniatureSections(); + + $this->registerHeadingStyleSection(); + + $this->registerCarouselSection([ + 'default_slides_count' => 4, + ]); + + $this->startControlsSection( + 'section_style_product', + [ + 'label' => __('Product Box'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'product_spacing_custom', + [ + 'label' => __('Columns Gap'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .slick-list' => 'margin-left: -{{SIZE}}{{UNIT}}; -webkit-clip-path: inset(0 0 0 {{SIZE}}{{UNIT}}); clip-path: inset(0 0 0 {{SIZE}}{{UNIT}});', + '{{WRAPPER}} .slick-slide .slick-slide-inner' => 'margin-left: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'product_spacing_row', + [ + 'label' => __('Rows Gap'), + 'separator' => '', + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .slick-slide .slick-slide-inner' => 'margin-top: calc({{SIZE}}{{UNIT}} / 2); margin-bottom: calc({{SIZE}}{{UNIT}} / 2);', + ], + ] + ); + + $product_selector = '{{WRAPPER}}:not(.wrapfix) .slick-slide-inner > *, {{WRAPPER}}.wrapfix .slick-slide-inner > * > *'; + $product_selector_hover = '{{WRAPPER}}:not(.wrapfix) .slick-slide-inner > :hover, {{WRAPPER}}.wrapfix .slick-slide-inner > * > :hover'; + + $this->addResponsiveControl( + 'product_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + $product_selector => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}} !important;', + ], + ] + ); + + $this->addControl( + 'product_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'separator' => '', + 'selectors' => [ + $product_selector => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; border-style: solid;', + ], + ] + ); + + $this->addControl( + 'product_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'separator' => '', + 'selectors' => [ + $product_selector => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->startControlsTabs('product_style_tabs'); + + $this->startControlsTab( + 'product_style_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'product_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + $product_selector => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'product_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'separator' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-product-miniature' => 'background: {{VALUE}};', + ], + 'condition' => [ + 'skin' => 'custom', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'product_box_shadow', + 'separator' => '', + 'selector' => $product_selector, + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'product_style_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'product_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + $product_selector_hover => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'product_bg_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'separator' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-product-miniature:hover' => 'background-color: {{VALUE}};', + ], + 'condition' => [ + 'skin' => 'custom', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'product_box_shadow_hover', + 'separator' => '', + 'selector' => $product_selector_hover, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->registerMiniatureStyleSections(); + + $this->registerNavigationStyleSection(); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-heading'; + } + + protected function render() + { + if (empty($this->context->currency->id)) { + return; + } + $settings = $this->getSettingsForDisplay(); + $listing = $settings['listing']; + + if ($settings['randomize'] && in_array($listing, ['category', 'viewed', 'products', 'related'])) { + $settings['order_by'] = 'rand'; + } + $settings['related_id'] = $settings['related_product_id']; + + $products = $this->getProducts( + $listing, + $settings['order_by'], + $settings['order_dir'], + $settings['limit'] ?: 8, + in_array($listing, ['category', 'related', 'manufacturer', 'supplier']) ? $settings["{$listing}_id"] : 0, + $settings['products'] + ); + + if (empty($products)) { + return; + } + + if (!empty($settings['heading'])) { + $this->addRenderAttribute('heading', 'class', 'elementor-heading-title'); + $this->addInlineEditingAttributes('heading'); + + printf( + '<%1$s %2$s>%3$s', + $settings['heading_size'], + $this->getRenderAttributeString('heading'), + $settings['heading'] + ); + } + + $slides = []; + + if ('custom' === $settings['skin']) { + foreach ($products as &$product) { + $slides[] = '
' . $this->fetchMiniature($settings, $product) . '
'; + } + } else { + if (!$tpl = $this->getSkinTemplate($settings['skin'])) { + return; + } + // Store product temporary if exists + isset($this->context->smarty->tpl_vars['product']) && $tmp = $this->context->smarty->tpl_vars['product']; + + foreach ($products as &$product) { + $this->context->smarty->assign('product', $product); + $slides[] = '
' . $this->context->smarty->fetch($tpl) . '
'; + } + // Restore product if exists + isset($tmp) && $this->context->smarty->tpl_vars['product'] = $tmp; + } + + $this->renderCarousel($settings, $slides); + } +} diff --git a/modules/creativeelements/includes/widgets/product-grid.php b/modules/creativeelements/includes/widgets/product-grid.php new file mode 100644 index 00000000..aa55b244 --- /dev/null +++ b/modules/creativeelements/includes/widgets/product-grid.php @@ -0,0 +1,332 @@ +startControlsSection( + 'section_grid_settings', + [ + 'label' => __('Product Grid'), + ] + ); + + $this->addControl( + 'skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'options' => $this->getSkinOptions(), + 'default' => 'product', + ] + ); + + $this->registerListingControls('num_of_prods'); + + $this->addResponsiveControl( + 'columns', + [ + 'label' => __('Columns'), + 'type' => ControlsManager::NUMBER, + 'min' => 1, + 'selectors' => [ + '{{WRAPPER}} .elementor-product-grid' => '-ms-grid-columns: repeat({{VALUE}}, minmax(0, 1fr)); grid-template-columns: repeat({{VALUE}}, minmax(0, 1fr));', + ], + 'default' => 4, + 'tablet_default' => 3, + 'mobile_default' => 1, + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + + $this->registerMiniatureSections(); + + $this->registerHeadingStyleSection(); + + $this->startControlsSection( + 'section_style_product', + [ + 'label' => __('Product Box'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'product_column_gap', + [ + 'label' => __('Columns Gap'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-product-grid' => 'grid-column-gap: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'product_row_gap', + [ + 'label' => __('Rows Gap'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-product-grid' => 'grid-row-gap: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $product_selector = '{{WRAPPER}}:not(.wrapfix) .elementor-product-grid > *, {{WRAPPER}}.wrapfix .elementor-product-grid > * > *'; + $product_selector_hover = '{{WRAPPER}}:not(.wrapfix) .elementor-product-grid > :hover, {{WRAPPER}}.wrapfix .elementor-product-grid > * > :hover'; + + $this->addResponsiveControl( + 'product_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + $product_selector => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}} !important;', + ], + ] + ); + + $this->addControl( + 'product_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + $product_selector => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; border-style: solid;', + ], + ] + ); + + $this->addControl( + 'product_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + $product_selector => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->startControlsTabs('product_style_tabs'); + + $this->startControlsTab( + 'product_style_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'product_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + $product_selector => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'product_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-product-miniature' => 'background: {{VALUE}};', + ], + 'condition' => [ + 'skin' => 'custom', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'product_box_shadow', + 'selector' => $product_selector, + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'product_style_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'product_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + $product_selector_hover => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'product_bg_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-product-miniature:hover' => 'background-color: {{VALUE}};', + ], + 'condition' => [ + 'skin' => 'custom', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'product_box_shadow_hover', + 'selector' => $product_selector_hover, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->registerMiniatureStyleSections(); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-heading'; + } + + protected function render() + { + if (empty($this->context->currency->id)) { + return; + } + $settings = $this->getSettingsForDisplay(); + $listing = $settings['listing']; + + if ($settings['randomize'] && in_array($listing, ['category', 'viewed', 'products', 'related'])) { + $settings['order_by'] = 'rand'; + } + $settings['related_id'] = $settings['related_product_id']; + + $products = $this->getProducts( + $listing, + $settings['order_by'], + $settings['order_dir'], + $settings['num_of_prods'] ?: 8, + in_array($listing, ['category', 'related', 'manufacturer', 'supplier']) ? $settings["{$listing}_id"] : 0, + $settings['products'] + ); + + if (empty($products)) { + return; + } + + if (!empty($settings['heading'])) { + $this->addRenderAttribute('heading', 'class', 'elementor-heading-title'); + $this->addInlineEditingAttributes('heading'); + + printf( + '<%1$s %2$s>%3$s', + $settings['heading_size'], + $this->getRenderAttributeString('heading'), + $settings['heading'] + ); + } + + if ('custom' === $settings['skin']) { + echo '
'; + foreach ($products as &$product) { + echo $this->fetchMiniature($settings, $product); + } + echo '
'; + } else { + if (!$tpl = $this->getSkinTemplate($settings['skin'])) { + return; + } + // Store product temporary if exists + isset($this->context->smarty->tpl_vars['product']) && $tmp = $this->context->smarty->tpl_vars['product']; + + echo '
'; + foreach ($products as &$product) { + $this->context->smarty->assign('product', $product); + echo $this->context->smarty->fetch($tpl); + } + echo '
'; + + // Restore product if exists + isset($tmp) && $this->context->smarty->tpl_vars['product'] = $tmp; + } + } +} diff --git a/modules/creativeelements/includes/widgets/progress.php b/modules/creativeelements/includes/widgets/progress.php new file mode 100644 index 00000000..eeb91be4 --- /dev/null +++ b/modules/creativeelements/includes/widgets/progress.php @@ -0,0 +1,359 @@ +startControlsSection( + 'section_progress', + [ + 'label' => __('Progress Bar'), + ] + ); + + $this->addControl( + 'title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('Enter your title'), + 'default' => __('My Skill'), + 'label_block' => true, + ] + ); + + $this->addControl( + 'progress_type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Default'), + 'info' => __('Info'), + 'success' => __('Success'), + 'warning' => __('Warning'), + 'danger' => __('Danger'), + ], + ] + ); + + $this->addControl( + 'percent', + [ + 'label' => __('Percentage'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 50, + 'unit' => '%', + ], + 'label_block' => true, + ] + ); + + $this->addControl('display_percentage', [ + 'label' => __('Display Percentage'), + 'type' => ControlsManager::SELECT, + 'default' => 'show', + 'options' => [ + 'show' => __('Show'), + 'hide' => __('Hide'), + ], + ]); + + $this->addControl( + 'inner_text', + [ + 'label' => __('Inner Text'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('e.g. Web Designer'), + 'default' => __('Web Designer'), + 'label_block' => true, + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_progress_style', + [ + 'label' => __('Progress Bar'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'bar_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-progress-wrapper .elementor-progress-bar' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'bar_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-progress-wrapper' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'bar_inline_color', + [ + 'label' => __('Inner Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-progress-bar' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_title', + [ + 'label' => __('Title Style'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-title' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography', + 'selector' => '{{WRAPPER}} .elementor-title', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'title_shadow', + 'selector' => '{{WRAPPER}} .elementor-title', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render progress widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $this->addRenderAttribute('wrapper', [ + 'class' => 'elementor-progress-wrapper', + 'role' => 'progressbar', + 'aria-valuemin' => '0', + 'aria-valuemax' => '100', + 'aria-valuenow' => $settings['percent']['size'], + 'aria-valuetext' => $settings['inner_text'], + ]); + + if (!empty($settings['progress_type'])) { + $this->addRenderAttribute('wrapper', 'class', 'progress-' . $settings['progress_type']); + } + + $this->addRenderAttribute('progress-bar', [ + 'class' => 'elementor-progress-bar', + 'data-max' => $settings['percent']['size'], + ]); + + $this->addRenderAttribute('inner_text', [ + 'class' => 'elementor-progress-text', + ]); + + $this->addInlineEditingAttributes('inner_text'); + ?> + + + + +
getRenderAttributeString('wrapper') ?>> +
getRenderAttributeString('progress-bar') ?>> + getRenderAttributeString('inner_text') ?>> + + % + +
+
+ + <# + view.addRenderAttribute( 'progressWrapper', { + 'class': [ 'elementor-progress-wrapper', 'progress-' + settings.progress_type ], + 'role': 'progressbar', + 'aria-valuemin': '0', + 'aria-valuemax': '100', + 'aria-valuenow': settings.percent.size, + 'aria-valuetext': settings.inner_text + } ); + + view.addRenderAttribute( 'inner_text', { + 'class': 'elementor-progress-text' + } ); + + view.addInlineEditingAttributes( 'inner_text' ); + #> + <# if ( settings.title ) { #> + {{{ settings.title }}}<# + } #> +
+
+ {{{ settings.inner_text }}} + <# if ( 'hide' !== settings.display_percentage ) { #> + {{{ settings.percent.size }}}% + <# } #> +
+
+ startControlsSection( + 'section_shopping_cart', + [ + 'label' => __('Shopping Cart'), + ] + ); + + $this->addControl( + 'skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'classic' => __('Classic'), + 'sidebar' => __('Sidebar'), + ], + 'default' => 'sidebar', + ] + ); + + $this->addControl( + 'title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXT, + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addControl( + 'empty_message', + [ + 'label' => __('Empty Message'), + 'type' => ControlsManager::TEXT, + 'label_block' => true, + 'default' => __('No products in the cart.'), + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addControl( + 'show_shipping', + [ + 'label' => __('Shipping Price'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + 'prefix_class' => 'elementor-cart--show-shipping-', + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addControl( + 'show_view_cart', + [ + 'label' => __('View Cart'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'prefix_class' => 'elementor-cart--show-view-cart-', + 'default' => 'yes', + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addControl( + 'checkout', + [ + 'label' => __('Buttons'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Checkout'), + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addControl( + 'view_cart', + [ + 'type' => ControlsManager::TEXT, + 'placeholder' => __('View Cart'), + 'condition' => [ + 'skin' => 'sidebar', + 'show_view_cart!' => '', + ], + ] + ); + + $this->addControl( + 'heading_toggle', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Toggle'), + 'separator' => 'before', + ] + ); + + $icon_options = [ + 'fa fa-shopping-cart' => 'cart-fa', + 'ceicon-cart-light' => 'cart-light', + 'ceicon-cart-medium' => 'cart-medium', + 'ceicon-cart-solid' => 'cart-solid', + 'ceicon-trolley-light' => 'trolley-light', + 'ceicon-trolley-medium' => 'trolley-medium', + 'ceicon-trolley-solid' => 'trolley-solid', + 'ceicon-trolley-bold' => 'trolley-bold', + 'fa fa-shopping-basket' => 'basket-fa', + 'ceicon-basket-light' => 'basket-light', + 'ceicon-basket-medium' => 'basket-medium', + 'ceicon-basket-solid' => 'basket-solid', + 'fa fa-shopping-bag' => 'bag-fa', + 'ceicon-bag-light' => 'bag-light', + 'ceicon-bag-medium' => 'bag-medium', + 'ceicon-bag-solid' => 'bag-solid', + 'ceicon-bag-rounded-o' => 'bag-rounded-o', + 'ceicon-bag-rounded' => 'bag-rounded', + 'ceicon-bag-trapeze-o' => 'bag-trapeze-o', + 'ceicon-bag-trapeze' => 'bag-trapeze', + ]; + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'ceicon-basket-solid', + 'options' => &$icon_options, + 'include' => array_keys($icon_options), + ] + ); + + $this->addControl( + 'icon_align', + [ + 'label' => __('Icon Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'left', + 'options' => [ + 'left' => __('Before'), + 'right' => __('After'), + ], + 'prefix_class' => 'elementor-cart--align-icon-', + 'condition' => [ + 'show_subtotal!' => '', + ], + ] + ); + + $this->addControl( + 'items_indicator', + [ + 'label' => __('Items Indicator'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'none' => __('None'), + 'bubble' => __('Bubble'), + // 'plain' => __('Plain'), + ], + 'prefix_class' => 'elementor-cart--items-indicator-', + 'default' => 'bubble', + ] + ); + + $this->addControl( + 'hide_empty_indicator', + [ + 'label' => __('Hide Empty'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Yes'), + 'label_off' => __('No'), + 'return_value' => 'hide', + 'prefix_class' => 'elementor-cart--empty-indicator-', + 'condition' => [ + 'items_indicator!' => 'none', + ], + ] + ); + + $this->addControl( + 'show_subtotal', + [ + 'label' => __('Subtotal'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'return_value' => 'yes', + 'default' => 'yes', + 'prefix_class' => 'elementor-cart--show-subtotal-', + ] + ); + + $this->addControl( + 'alignment', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'heading_atc_action', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Add to Cart Action'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'action_show_modal', + [ + 'label' => __('Show Modal'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('On'), + 'label_off' => __('Off'), + 'default' => 'yes', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'action_open_cart', + [ + 'label' => __('Open Shopping Cart'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('On'), + 'label_off' => __('Off'), + 'frontend_available' => true, + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addControl( + 'modal_url', + [ + 'type' => ControlsManager::HIDDEN, + 'default' => $this->context->link->getModuleLink('creativeelements', 'ajax', [], true), + 'condition' => [ + 'action_show_modal!' => '', + ], + 'frontend_available' => true, + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_toggle_style', + [ + 'label' => __('Toggle'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('toggle_button_colors'); + + $this->startControlsTab('toggle_button_normal_colors', ['label' => __('Normal')]); + + $this->addControl( + 'toggle_button_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle a.elementor-button:not(#e)' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_subtotal!' => '', + ], + ] + ); + + $this->addControl( + 'toggle_button_icon_color', + [ + 'label' => __('Icon Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button-icon' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'toggle_button_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'toggle_button_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab('toggle_button_hover_colors', ['label' => __('Hover')]); + + $this->addControl( + 'toggle_button_hover_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle a.elementor-button:not(#e):hover' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_subtotal!' => '', + ], + ] + ); + + $this->addControl( + 'toggle_button_hover_icon_color', + [ + 'label' => __('Icon Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button:hover .elementor-button-icon' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'toggle_button_hover_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button:hover' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'toggle_button_hover_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button:hover' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'toggle_button_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 20, + ], + ], + 'separator' => 'before', + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button' => 'border-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'toggle_button_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + + ] + ); + + $this->addResponsiveControl( + 'toggle_button_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'toggle_button_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-cart__toggle .elementor-button', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'heading_icon_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Icon'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'toggle_icon_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'size_units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button-icon' => 'font-size: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'toggle_icon_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'size-units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}}.elementor-cart--align-icon-left .elementor-cart__toggle .elementor-button-text' => 'margin-left: {{SIZE}}{{UNIT}}', + '{{WRAPPER}}.elementor-cart--align-icon-right .elementor-cart__toggle .elementor-button-text' => 'margin-right: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'show_subtotal!' => '', + ], + ] + ); + + $this->addControl( + 'items_indicator_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Items Indicator'), + 'separator' => 'before', + 'condition' => [ + 'items_indicator!' => 'none', + ], + ] + ); + $this->addControl( + 'items_indicator_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button-icon[data-counter]:before' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'items_indicator!' => 'none', + ], + ] + ); + + $this->addControl( + 'items_indicator_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button-icon[data-counter]:before' => 'background-color: {{VALUE}}', + ], + 'condition' => [ + 'items_indicator' => 'bubble', + ], + ] + ); + + $this->addControl( + 'items_indicator_distance_top', + [ + 'label' => __('Top Distance'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => 'em', + ], + 'range' => [ + 'em' => [ + 'min' => -4, + 'max' => 4, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button-icon[data-counter]:before' => 'top: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'items_indicator' => 'bubble', + ], + ] + ); + + $this->addControl( + 'items_indicator_distance_right', + [ + 'label' => __('Right Distance'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => 'em', + ], + 'range' => [ + 'em' => [ + 'min' => -4, + 'max' => 4, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__toggle .elementor-button-icon[data-counter]:before' => 'right: calc(0em - {{SIZE}}{{UNIT}})', + ], + 'condition' => [ + 'items_indicator' => 'bubble', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_cart_style', + [ + 'label' => __('Shopping Cart'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addGroupControl( + GroupControlBackground::getType(), + [ + 'name' => 'cart_background', + 'selector' => '{{WRAPPER}} .elementor-cart__main', + ] + ); + + $this->addControl( + 'lightbox_color', + [ + 'label' => __('Overlay Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__container' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'lightbox_ui_color', + [ + 'label' => __('UI Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__close-button, {{WRAPPER}} .elementor-cart__product-remove' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'lightbox_ui_color_hover', + [ + 'label' => __('UI Hover Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__close-button:hover, {{WRAPPER}} .elementor-cart__product-remove:hover' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'heading_title_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Title'), + 'separator' => 'before', + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__title' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'selector' => '{{WRAPPER}} .elementor-cart__title', + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addControl( + 'heading_empty_message_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Empty Message'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'empty_message_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__empty-message' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'empty_message_typography', + 'selector' => '{{WRAPPER}} .elementor-cart__empty-message', + ] + ); + + $this->addControl( + 'heading_product_divider_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Divider'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'divider_style', + [ + 'label' => __('Style'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Default'), + 'none' => __('None'), + 'solid' => __('Solid'), + 'double' => __('Double'), + 'dotted' => __('Dotted'), + 'dashed' => __('Dashed'), + 'groove' => __('Groove'), + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__product:not(:last-of-type), {{WRAPPER}} .elementor-cart__products, {{WRAPPER}} .elementor-cart__summary' => 'border-bottom-style: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'divider_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__product:not(:last-of-type), {{WRAPPER}} .elementor-cart__products, {{WRAPPER}} .elementor-cart__summary' => 'border-color: {{VALUE}}', + ], + 'condition' => [ + 'divider_style!' => 'none', + ] + ] + ); + + $this->addControl( + 'divider_width', + [ + 'label' => __('Weight'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__product:not(:last-of-type), {{WRAPPER}} .elementor-cart__products, {{WRAPPER}} .elementor-cart__summary' => 'border-bottom-width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'divider_style!' => 'none', + ] + ] + ); + + $this->addResponsiveControl( + 'divider_gap', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__product, {{WRAPPER}} .elementor-cart__footer-buttons, {{WRAPPER}} .elementor-cart__summary' => 'padding-bottom: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .elementor-cart__product:not(:first-of-type), {{WRAPPER}} .elementor-cart__footer-buttons, {{WRAPPER}} .elementor-cart__summary' => 'padding-top: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_product_tabs_style', + [ + 'label' => __('Products'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addControl( + 'heading_product_title_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Product Title'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'product_title_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__product-name a:not(#e)' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'product_title_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-cart__product-name a', + ] + ); + + $this->addControl( + 'heading_product_attr_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Product Attributes'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'product_attr_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__product-attrs' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'product_attr_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} .elementor-cart__product-attr', + ] + ); + + $this->addControl( + 'heading_product_price_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Product Price'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'product_price_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__product-price' => 'color: {{VALUE}}', + + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'product_price_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-cart__product-price', + ] + ); + + $this->addControl( + 'show_remove_icon', + [ + 'label' => __('Remove Item Icon'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'return_value' => 'yes', + 'default' => 'yes', + 'prefix_class' => 'elementor-cart--show-remove-button-', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_summary', + [ + 'label' => __('Summary'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addControl( + 'subtotal_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__summary' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'subtotal_typography', + 'selector' => '{{WRAPPER}} .elementor-cart__summary', + ] + ); + + $this->addControl( + 'heading_total_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Total'), + 'separator' => 'before', + 'condition' => [ + 'show_shipping!' => '', + ], + ] + ); + + $this->addControl( + 'total_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__summary strong' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_shipping!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'total_typography', + 'selector' => '{{WRAPPER}} .elementor-cart__summary strong', + 'condition' => [ + 'show_shipping!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_buttons', + [ + 'label' => __('Buttons'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'sidebar', + ], + ] + ); + + $this->addControl( + 'buttons_layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'inline' => __('Inline'), + 'stacked' => __('Stacked'), + ], + 'default' => 'inline', + 'prefix_class' => 'elementor-cart--buttons-', + ] + ); + + $this->addControl( + 'space_between_buttons', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__footer-buttons' => 'grid-column-gap: {{SIZE}}{{UNIT}}; grid-row-gap: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'show_view_cart!' => '', + ], + ] + ); + + $this->addControl( + 'button_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-cart__footer-buttons .elementor-button' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'product_buttons_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-cart__footer-buttons .elementor-button', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'heading_view_cart_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('View Cart'), + 'separator' => 'before', + 'condition' => [ + 'show_view_cart!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'view_cart_border', + 'selector' => '{{WRAPPER}} .elementor-button--view-cart', + 'condition' => [ + 'show_view_cart!' => '', + ], + ] + ); + + $this->startControlsTabs( + 'tabs_view_cart_style', + [ + 'condition' => [ + 'show_view_cart!' => '', + ], + ] + ); + + $this->startControlsTab( + 'tabs_view_cart_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'view_cart_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button--view-cart:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'view_cart_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button--view-cart' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tabs_view_cart_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'view_cart_text_color_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button--view-cart:not(#e):hover, {{WRAPPER}} a.elementor-button--view-cart:not(#e):focus' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'view_cart_background_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button--view-cart:hover, {{WRAPPER}} .elementor-button--view-cart:focus' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'view_cart_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button--view-cart:hover, {{WRAPPER}} .elementor-button--view-cart:focus' => 'border-color: {{VALUE}};', + ], + 'condition' => [ + 'view_cart_border_border!' => '', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'heading_checkout_style', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Checkout'), + 'separator' => 'before', + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'checkout_border', + 'selector' => '{{WRAPPER}} .elementor-button--checkout', + ] + ); + + $this->startControlsTabs('tabs_checkout_style'); + + $this->startControlsTab( + 'tabs_checkout_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'checkout_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button--checkout:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'checkout_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button--checkout' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tabs_checkout_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'checkout_text_color_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button--checkout:not(#e):hover, {{WRAPPER}} a.elementor-button--checkout:not(#e):focus' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'checkout_background_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button--checkout:hover, {{WRAPPER}} .elementor-button--checkout:focus' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'checkout_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-button--checkout:hover, {{WRAPPER}} .elementor-button--checkout:focus' => 'border-color: {{VALUE}};', + ], + 'condition' => [ + 'checkout_border_border!' => '', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + } + + /** + * Render shopping cart widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.0 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $controller = $this->context->controller; + + $cart_is_hidden = 'sidebar' !== $settings['skin'] || + $controller instanceof \CartController || + $controller instanceof \OrderController || + $controller instanceof \OrderConfirmationController; + $cart = $controller->cart_presenter->present($this->context->cart, true); + + $toggle_button_link = $this->context->link->getPageLink('cart', true, null, ['action' => 'show'], false, null, true); + $toggle_button_classes = 'elementor-button elementor-size-sm' . ($cart_is_hidden ? ' elementor-cart-hidden' : ''); + ?> +
+ +
+
+
+
+ renderCartContent($cart, $settings, $toggle_button_link) ?> +
+
+ + +
+ context->smarty->tpl_vars['urls']->value['pages']['order']; + $checkout_disabled = $cart['minimalPurchaseRequired'] || !$cart['products'] ? ' ce-disabled' : ''; + ?> +
+
+ renderCartItem($product); + } + // echo \Hook::exec('displayShoppingCart'); + ?> +
+
+
+
+ + + + +
+ + + imageSize]) ? $cover['bySize'][$this->imageSize] : $cover['small']; + ?> +
+
+ <?= esc_attr($cover['legend']) ?> +
+
+ + + +
+ $value) : ?> +
+ : + +
+ + + +
+ : + + + + + + + +
+ + +
+
+
+ × + + + +
+
+ +
+
+ context = \Context::getContext(); + $this->imageSize = \ImageType::getFormattedName('cart'); + + parent::__construct($data, $args); + } +} diff --git a/modules/creativeelements/includes/widgets/shortcode.php b/modules/creativeelements/includes/widgets/shortcode.php new file mode 100644 index 00000000..2ee8d894 --- /dev/null +++ b/modules/creativeelements/includes/widgets/shortcode.php @@ -0,0 +1,149 @@ +startControlsSection( + 'section_shortcode', + [ + 'label' => __('Shortcode'), + ] + ); + + $this->addControl( + 'shortcode', + [ + 'label' => __('Enter your shortcode'), + 'type' => ControlsManager::TEXTAREA, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => "{hook h='displayShortcode'}", + 'default' => '', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render shortcode widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + echo do_shortcode($this->getSettings('shortcode')); + } + + protected function renderSmarty() + { + echo $this->getSettings('shortcode'); + } + + /** + * Render shortcode widget as plain content. + * + * Override the default behavior by printing the shortcode instead of rendering it. + * + * @since 1.0.0 + * @access public + */ + public function renderPlainContent() + { + // In plain mode, render without shortcode + echo $this->getSettings('shortcode'); + } +} diff --git a/modules/creativeelements/includes/widgets/sign-in.php b/modules/creativeelements/includes/widgets/sign-in.php new file mode 100644 index 00000000..b4dda95a --- /dev/null +++ b/modules/creativeelements/includes/widgets/sign-in.php @@ -0,0 +1,457 @@ + __('My account'), + 'identity' => __('Personal info'), + 'address' => __('New Address'), + 'addresses' => __('Addresses'), + 'history' => __('Order history'), + 'order-slip' => __('Credit slip'), + 'discount' => __('My vouchers'), + 'logout' => __('Sign out'), + 'custom' => __('Custom URL'), + ]; + } + + /** + * Register sign in widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @since 2.5.0 + * @access protected + */ + protected function _registerControls() + { + $this->startControlsSection( + 'section_selector', + [ + 'label' => $this->getTitle(), + ] + ); + + $this->startControlsTabs('tabs_label_content'); + + $this->startControlsTab( + 'tab_label_sign_in', + [ + 'label' => __('Sign in'), + ] + ); + + $icon_options = [ + 'fa fa-user' => 'user', + 'fa fa-user-o' => 'user-o', + 'fa fa-user-circle' => 'user-circle', + 'fa fa-user-circle-o' => 'user-circle-o', + 'ceicon-user-simple' => 'user-simple', + 'ceicon-user-minimal' => 'user-minimal', + ]; + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => false, + 'default' => 'fa fa-user', + 'options' => &$icon_options, + 'include' => array_keys($icon_options), + ] + ); + + $this->addControl( + 'label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::TEXT, + 'default' => __('Sign in'), + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_label_signed_in', + [ + 'label' => __('Signed in'), + ] + ); + + $this->addControl( + 'account', + [ + 'label' => __('Label'), + 'label_block' => true, + 'type' => ControlsManager::SELECT2, + 'default' => ['icon', 'firstname'], + 'multiple' => true, + 'options' => [ + 'icon' => __('Icon'), + 'before' => __('Before'), + 'firstname' => __('First Name'), + 'lastname' => __('Last Name'), + 'after' => __('After'), + ], + ] + ); + + $this->addControl( + 'before', + [ + 'label' => __('Before'), + 'type' => ControlsManager::TEXT, + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'account', + 'operator' => 'contains', + 'value' => 'before', + ], + ], + ], + ] + ); + + $this->addControl( + 'after', + [ + 'label' => __('After'), + 'type' => ControlsManager::TEXT, + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'account', + 'operator' => 'contains', + 'value' => 'after', + ], + ], + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->registerNavContentControls(); + + $this->addControl( + 'heading_usermenu', + [ + 'label' => __('Usermenu'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $repeater = new Repeater(); + + $repeater->addControl( + 'link_to', + [ + 'label' => __('Link'), + 'type' => ControlsManager::SELECT, + 'default' => 'identity', + 'options' => $this->getLinkToOptions(), + ] + ); + + $repeater->addControl( + 'link', + [ + 'label_block' => true, + 'type' => ControlsManager::URL, + 'placeholder' => __('http://your-link.com'), + 'classes' => 'ce-hide-link-options', + 'condition' => [ + 'link_to' => 'custom', + ], + ] + ); + + $repeater->addControl( + 'text', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + ] + ); + + $repeater->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => false, + 'default' => 'fa fa-user', + 'options' => &$icon_options, + ] + ); + + $this->addControl( + 'usermenu', + [ + 'type' => ControlsManager::REPEATER, + 'fields' => $repeater->getControls(), + 'default' => [ + [ + 'link_to' => 'my-account', + 'icon' => 'fa fa-user-o', + ], + [ + 'link_to' => 'addresses', + 'icon' => 'fa fa-address-book-o', + ], + [ + 'link_to' => 'history', + 'icon' => 'fa fa-list', + ], + [ + 'link_to' => 'logout', + 'icon' => 'fa fa-sign-out', + ], + ], + 'title_field' => ' {{{ text || ' . + 'elementor.panel.currentView.currentPageView.model.get("settings").controls.' . + 'usermenu.fields.link_to.options[link_to] }}}', + ] + ); + + $this->endControlsSection(); + + $this->registerNavStyleSection([ + 'show_icon' => true, + 'active_condition' => [ + 'hide!' => '', + ], + 'space_between_condition' => [ + 'hide!' => '', + ], + ]); + + $this->registerDropdownStyleSection([ + 'active_condition' => [ + 'hide!' => '', + ], + ]); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-nav-menu'; + } + + public function getUrl(&$item) + { + if ('custom' === $item['link_to']) { + return $item['link']['url']; + } + if ('logout' === $item['link_to']) { + return $this->context->link->getPageLink('index', true, null, 'mylogout'); + } + return $this->context->link->getPageLink($item['link_to'], true); + } + + /** + * Render sing in widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.0 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getActiveSettings(); + $customer = $this->context->customer; + $this->indicator = $settings['indicator']; + + if ($customer->isLogged()) { + $options = $this->getLinkToOptions(); + $account = &$settings['account']; + $menu = [ + [ + 'id' => 0, + 'icon' => in_array('icon', $account) ? $settings['icon'] : '', + 'label' => call_user_func(function () use ($settings, $account, $customer) { + $label = ''; + + in_array('before', $account) && $label .= $settings['before']; + in_array('firstname', $account) && $label .= " {$customer->firstname}"; + in_array('lastname', $account) && $label .= " {$customer->lastname}"; + in_array('after', $account) && $label .= $settings['after']; + + return trim($label); + }), + 'url' => $this->context->link->getPageLink('my-account', true), + 'children' => [], + ], + ]; + foreach ($settings['usermenu'] as $i => &$item) { + $menu[0]['children'][] = [ + 'id' => $i + 1, + 'icon' => $item['icon'], + 'label' => $item['text'] ?: $options[$item['link_to']], + 'url' => $this->getUrl($item), + ]; + } + } else { + $menu = [ + [ + 'id' => 0, + 'icon' => $settings['icon'], + 'label' => $settings['label'], + 'url' => $this->context->link->getPageLink('my-account', true), + 'children' => [], + ], + ]; + } + $ul_class = 'elementor-nav'; + + // General Menu. + ob_start(); + $this->accountList($menu, 0, $ul_class); + $menu_html = ob_get_clean(); + + $this->addRenderAttribute('main-menu', 'class', [ + 'elementor-sign-in', + 'elementor-nav--main', + 'elementor-nav__container', + 'elementor-nav--layout-horizontal', + ]); + + if ('none' !== $settings['pointer']) { + $animation_type = self::getPointerAnimationType($settings['pointer']); + + $this->addRenderAttribute('main-menu', 'class', [ + 'e--pointer-' . $settings['pointer'], + 'e--animation-' . $settings[$animation_type], + ]); + } + ?> + + + + context = \Context::getContext(); + + parent::__construct($data, $args); + } +} diff --git a/modules/creativeelements/includes/widgets/site-logo.php b/modules/creativeelements/includes/widgets/site-logo.php new file mode 100644 index 00000000..22bbf843 --- /dev/null +++ b/modules/creativeelements/includes/widgets/site-logo.php @@ -0,0 +1,137 @@ +updateControl('image', [ + 'label' => '', + 'dynamic' => ['default' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'site-logo')], + 'default' => ['url' => 'img/' . \Configuration::get('PS_LOGO')], + ], [ + 'recursive' => true, + ]); + + $this->updateControl('link_to', [ + 'default' => 'custom', + ]); + + $this->updateControl('link', [ + 'dynamic' => ['default' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'site-url')], + 'default' => ['url' => __PS_BASE_URI__], + ], [ + 'recursive' => true, + ]); + + $this->removeControl('caption'); + + $this->startInjection([ + 'of' => 'height', + ]); + + $this->addControl( + 'shrink', + [ + 'label' => __('Sticked'), + 'type' => ControlsManager::POPOVER_TOGGLE, + 'render_type' => 'ui', + 'condition' => [ + 'height[size]!' => '', + ], + ] + ); + + $this->startPopover(); + + $this->addResponsiveControl( + 'shrink_height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'vh'], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 500, + ], + ], + 'selectors' => [ + '.elementor-sticky--active:not(#e) .elementor-element-{{ID}} .elementor-image img' => 'height: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'shrink!' => '', + ], + ] + ); + + $this->addControl( + 'shrink_duration', + [ + 'label' => __('Transition Duration') . ' (s)', + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'default' => [ + 'size' => 0.3, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-image img' => 'transition: height {{SIZE}}s', + ], + 'condition' => [ + 'shrink!' => '', + ], + ] + ); + + $this->endPopover(); + + $this->endInjection(); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-' . parent::getName(); + } +} diff --git a/modules/creativeelements/includes/widgets/site-title.php b/modules/creativeelements/includes/widgets/site-title.php new file mode 100644 index 00000000..d9fb5aec --- /dev/null +++ b/modules/creativeelements/includes/widgets/site-title.php @@ -0,0 +1,64 @@ +updateControl('title', [ + 'dynamic' => ['default' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'site-title')], + 'default' => \Configuration::get('PS_SHOP_NAME'), + ], [ + 'recursive' => true, + ]); + + $this->updateControl('link', [ + 'dynamic' => ['default' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'site-url')], + 'default' => ['url' => __PS_BASE_URI__], + ], [ + 'recursive' => true, + ]); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-' . parent::getName(); + } +} diff --git a/modules/creativeelements/includes/widgets/social-icons.php b/modules/creativeelements/includes/widgets/social-icons.php new file mode 100644 index 00000000..199c6a90 --- /dev/null +++ b/modules/creativeelements/includes/widgets/social-icons.php @@ -0,0 +1,527 @@ +addControl( + 'social', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => true, + 'default' => 'fa fa-instagram', + 'include' => [ + 'fa fa-android', + 'fa fa-apple', + 'fa fa-behance', + 'fa fa-bitbucket', + 'fa fa-codepen', + 'fa fa-delicious', + 'fa fa-deviantart', + 'fa fa-digg', + 'fa fa-dribbble', + 'fa fa-envelope', + 'fa fa-facebook', + 'fa fa-flickr', + 'fa fa-foursquare', + 'fa fa-free-code-camp', + 'fa fa-github', + 'fa fa-gitlab', + 'fa fa-globe', + 'fa fa-google-plus', + 'fa fa-houzz', + 'fa fa-instagram', + 'fa fa-jsfiddle', + 'fa fa-link', + 'fa fa-linkedin', + 'fa fa-medium', + 'fa fa-meetup', + 'fa fa-mixcloud', + 'fa fa-odnoklassniki', + 'fa fa-pinterest', + 'fa fa-product-hunt', + 'fa fa-reddit', + 'fa fa-rss', + 'fa fa-shopping-cart', + 'fa fa-skype', + 'fa fa-slideshare', + 'fa fa-snapchat', + 'fa fa-soundcloud', + 'fa fa-spotify', + 'fa fa-stack-overflow', + 'fa fa-steam', + 'fa fa-stumbleupon', + 'fa fa-telegram', + 'fa fa-thumb-tack', + 'fa fa-tripadvisor', + 'fa fa-tumblr', + 'fa fa-twitch', + 'fa fa-twitter', + 'fa fa-vimeo', + 'fa fa-vk', + 'fa fa-weibo', + 'fa fa-weixin', + 'fa fa-whatsapp', + 'fa fa-wordpress', + 'fa fa-xing', + 'fa fa-yelp', + 'fa fa-youtube', + 'fa fa-500px', + ], + ] + ); + + $repeater->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'label_block' => true, + 'default' => [ + 'is_external' => 'true', + ], + 'placeholder' => __('https://your-link.com'), + ] + ); + + return $repeater->getControls(); + } + + /** + * Register social icons widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @since 1.0.0 + * @access protected + */ + protected function _registerControls() + { + $this->startControlsSection( + 'section_social_icon', + [ + 'label' => __('Social Icons'), + ] + ); + + $this->addControl( + 'social_icon_list', + [ + 'type' => ControlsManager::REPEATER, + 'fields' => $this->getSocialIconListControls(), + 'default' => [ + [ + 'social' => 'fa fa-facebook', + ], + [ + 'social' => 'fa fa-twitter', + ], + [ + 'social' => 'fa fa-pinterest', + ], + ], + 'title_field' => ' {{{ social.replace( "fa fa-", "" )' . + '.replace( "-", " " ).replace( /\b\w/g, function( letter ){ return letter.toUpperCase() } ) }}}', + ] + ); + + $this->addControl( + 'shape', + [ + 'label' => __('Shape'), + 'type' => ControlsManager::SELECT, + 'default' => 'rounded', + 'options' => [ + 'rounded' => __('Rounded'), + 'square' => __('Square'), + 'circle' => __('Circle'), + ], + 'prefix_class' => 'elementor-shape-', + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'default' => 'center', + 'selectors' => [ + '{{WRAPPER}}' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_social_style', + [ + 'label' => __('Icon'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'icon_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::SELECT, + 'default' => 'default', + 'options' => [ + 'default' => __('Official Color'), + 'custom' => __('Custom'), + ], + ] + ); + + $this->addControl( + 'icon_primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'condition' => [ + 'icon_color' => 'custom', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-social-icon:not(:hover)' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'icon_secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'condition' => [ + 'icon_color' => 'custom', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-social-icon:not(:hover) i' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'icon_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 6, + 'max' => 300, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-social-icon' => 'font-size: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'icon_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-social-icon' => 'padding: {{SIZE}}{{UNIT}};', + ], + 'default' => [ + 'unit' => 'em', + ], + 'tablet_default' => [ + 'unit' => 'em', + ], + 'mobile_default' => [ + 'unit' => 'em', + ], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + ], + ], + ] + ); + + $icon_spacing = is_rtl() ? 'margin-left: {{SIZE}}{{UNIT}};' : 'margin-right: {{SIZE}}{{UNIT}};'; + + $this->addResponsiveControl( + 'icon_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-social-icon:not(:last-child)' => $icon_spacing, + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'image_border', // We know this mistake - TODO: 'icon_border' (for hover control condition also) + 'selector' => '{{WRAPPER}} .elementor-social-icon', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_social_hover', + [ + 'label' => __('Icon Hover'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'hover_primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'condition' => [ + 'icon_color' => 'custom', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-social-icon:hover' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'condition' => [ + 'icon_color' => 'custom', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-social-icon:hover i' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'condition' => [ + 'image_border_border!' => '', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-social-icon:hover' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->endControlsSection(); + } + + /** + * Render social icons widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $class_animation = ''; + + if (!empty($settings['hover_animation'])) { + $class_animation = ' elementor-animation-' . $settings['hover_animation']; + } + ?> +
+ $item) : + $link_key = 'link_' . $index; + + $social = str_replace('fa fa-', '', $item['social']); + + $this->addRenderAttribute($link_key, [ + 'class' => 'elementor-icon elementor-social-icon elementor-social-icon-' . $social . $class_animation, + 'href' => $item['link']['url'], + ]); + + if ($item['link']['is_external']) { + $this->addRenderAttribute($link_key, 'target', '_blank'); + } + + if ($item['link']['nofollow']) { + $this->addRenderAttribute($link_key, 'rel', 'nofollow'); + } + ?> + getRenderAttributeString($link_key) ?>> + + + + +
+ +
+ <# _.each( settings.social_icon_list, function( item ) { + var social = item.social.replace( 'fa fa-', '' ), + link = item.link ? item.link.url : '', + linkClass = 'elementor-icon elementor-social-icon elementor-social-icon-' + social; #> + + {{{ social }}} + + + <# } ); #> +
+ startControlsSection( + 'section_spacer', + [ + 'label' => __('Spacer'), + ] + ); + + $this->addResponsiveControl( + 'space', + [ + 'label' => __('Space'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 50, + ], + 'size_units' => ['px', 'vh', 'em'], + 'range' => [ + 'px' => [ + 'min' => 10, + 'max' => 600, + ], + 'em' => [ + 'min' => 0.1, + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-spacer-inner' => 'height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render spacer widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + ?> +
+
+
+ +
+
+
+ startControlsSection( + 'section_rating', + [ + 'label' => __('Rating'), + ] + ); + + $this->addControl( + 'rating_scale', + [ + 'label' => __('Rating Scale'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '5' => '0-5', + '10' => '0-10', + ], + 'default' => '5', + ] + ); + + $this->addControl( + 'rating', + [ + 'label' => __('Rating'), + 'type' => ControlsManager::NUMBER, + 'min' => 0, + 'max' => 10, + 'step' => 0.1, + 'default' => 5, + ] + ); + + $this->addControl( + 'star_style', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'star_fontawesome' => 'Font Awesome', + 'star_unicode' => 'Unicode', + ], + 'default' => 'star_fontawesome', + 'render_type' => 'template', + 'prefix_class' => 'elementor--star-style-', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'unmarked_star_style', + [ + 'label' => __('Unmarked Style'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'solid' => [ + 'title' => __('Solid'), + 'icon' => 'fa fa-star', + ], + 'outline' => [ + 'title' => __('Outline'), + 'icon' => 'fa fa-star-o', + ], + ], + 'default' => 'solid', + ] + ); + + $this->addControl( + 'title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXT, + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'prefix_class' => 'elementor-star-rating--align-', + 'selectors' => [ + '{{WRAPPER}}' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_title_style', + [ + 'label' => __('Title'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-star-rating__title' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'selector' => '{{WRAPPER}} .elementor-star-rating__title', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'title_shadow', + 'selector' => '{{WRAPPER}} .elementor-star-rating__title', + ] + ); + + $this->addResponsiveControl( + 'title_gap', + [ + 'label' => __('Gap'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}}:not(.elementor-star-rating--align-justify) .elementor-star-rating__title' => 'margin-right: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}}:not(.elementor-star-rating--align-justify) .elementor-star-rating__title' => 'margin-left: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_stars_style', + [ + 'label' => __('Stars'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'icon_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-star-rating' => 'font-size: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'icon_space', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .elementor-star-rating i:not(:last-of-type)' => 'margin-right: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .elementor-star-rating i:not(:last-of-type)' => 'margin-left: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'stars_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-star-rating i:before' => 'color: {{VALUE}}', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'stars_unmarked_color', + [ + 'label' => __('Unmarked Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-star-rating i' => 'color: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * @since 2.3.0 + * @access protected + */ + protected function getRating() + { + $settings = $this->getSettingsForDisplay(); + $rating_scale = (int) $settings['rating_scale']; + $rating = (float) $settings['rating'] > $rating_scale ? $rating_scale : $settings['rating']; + + return [$rating, $rating_scale]; + } + + /** + * @since 2.3.0 + * @access protected + */ + protected function renderStars($icon) + { + $rating_data = $this->getRating(); + $rating = (float) $rating_data[0]; + $floored_rating = (int) $rating; + $stars_html = ''; + + for ($stars = 1; $stars <= $rating_data[1]; $stars++) { + if ($stars <= $floored_rating) { + $stars_html .= '' . $icon . ''; + } elseif ($floored_rating + 1 === $stars && $rating !== $floored_rating) { + $stars_html .= '' . $icon . ''; + } else { + $stars_html .= '' . $icon . ''; + } + } + + return $stars_html; + } + + /** + * @since 2.3.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $rating_data = $this->getRating(); + $textual_rating = $rating_data[0] . '/' . $rating_data[1]; + $icon = ''; + + if ('star_fontawesome' === $settings['star_style']) { + if ('outline' === $settings['unmarked_star_style']) { + $icon = ''; + } + } elseif ('star_unicode' === $settings['star_style']) { + $icon = '★'; + + if ('outline' === $settings['unmarked_star_style']) { + $icon = '☆'; + } + } + + $this->addRenderAttribute('icon_wrapper', [ + 'class' => 'elementor-star-rating', + 'title' => $textual_rating, + 'itemtype' => 'http://schema.org/Rating', + 'itemscope' => '', + 'itemprop' => 'reviewRating', + ]); + + $schema_rating = '' . $textual_rating . ''; + $stars_element = + '
getRenderAttributeString('icon_wrapper') . '>' . + $this->renderStars($icon) . ' ' . $schema_rating . + '
'; + ?> +
+ +
+ + +
+ + <# + var getRating = function() { + var ratingScale = parseInt( settings.rating_scale, 10 ), + rating = settings.rating > ratingScale ? ratingScale : settings.rating; + + return [ rating, ratingScale ]; + }, + ratingData = getRating(), + rating = ratingData[0], + textualRating = ratingData[0] + '/' + ratingData[1], + renderStars = function( icon ) { + var starsHtml = '', + flooredRating = Math.floor( rating ); + + for ( var stars = 1; stars <= ratingData[1]; stars++ ) { + if ( stars <= flooredRating ) { + starsHtml += '' + icon + ''; + } else if ( flooredRating + 1 === stars && rating !== flooredRating ) { + starsHtml += + '' + icon + ''; + } else { + starsHtml += '' + icon + ''; + } + } + + return starsHtml; + }, + icon = ''; + + if ( 'star_fontawesome' === settings.star_style ) { + if ( 'outline' === settings.unmarked_star_style ) { + icon = ''; + } + } else if ( 'star_unicode' === settings.star_style ) { + icon = '★'; + + if ( 'outline' === settings.unmarked_star_style ) { + icon = '☆'; + } + } + + view.addRenderAttribute( 'iconWrapper', 'class', 'elementor-star-rating' ); + view.addRenderAttribute( 'iconWrapper', 'itemtype', 'http://schema.org/Rating' ); + view.addRenderAttribute( 'iconWrapper', 'title', textualRating ); + view.addRenderAttribute( 'iconWrapper', 'itemscope', '' ); + view.addRenderAttribute( 'iconWrapper', 'itemprop', 'reviewRating' ); + + var stars = renderStars( icon ); + #> +
+ <# if ( ! _.isEmpty( settings.title ) ) { #> +
{{ settings.title }}
+ <# } #> +
+ {{{ stars }}} + {{ textualRating }} +
+
+ startControlsSection( + 'section_tabs', + [ + 'label' => __('Tabs'), + ] + ); + + $repeater = new Repeater(); + + $repeater->addControl( + 'tab_title', + [ + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'default' => __('Tab Title'), + 'placeholder' => __('Tab Title'), + 'label_block' => true, + ] + ); + + $repeater->addControl( + 'tab_content', + [ + 'label' => __('Content'), + 'default' => __('Tab Content'), + 'placeholder' => __('Tab Content'), + 'type' => ControlsManager::WYSIWYG, + 'show_label' => false, + ] + ); + + $this->addControl( + 'tabs', + [ + 'label' => __('Tabs Items'), + 'type' => ControlsManager::REPEATER, + 'fields' => $repeater->getControls(), + 'default' => [ + [ + 'tab_title' => __('Tab #1'), + 'tab_content' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + ], + [ + 'tab_title' => __('Tab #2'), + 'tab_content' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + ], + ], + 'title_field' => '{{{ tab_title }}}', + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->addControl( + 'type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'default' => 'horizontal', + 'options' => [ + 'horizontal' => __('Horizontal'), + 'vertical' => __('Vertical'), + ], + 'prefix_class' => 'elementor-tabs-view-', + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_tabs_style', + [ + 'label' => __('Tabs'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'navigation_width', + [ + 'label' => __('Navigation Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => '%', + ], + 'range' => [ + '%' => [ + 'min' => 10, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-tabs-wrapper' => 'width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'type' => 'vertical', + ], + ] + ); + + $this->addControl( + 'border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 1, + ], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title, {{WRAPPER}} .elementor-tab-title:before, {{WRAPPER}} .elementor-tab-title:after, {{WRAPPER}} .elementor-tab-content, {{WRAPPER}} .elementor-tabs-content-wrapper' => 'border-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-mobile-title, {{WRAPPER}} .elementor-tab-desktop-title.elementor-active, {{WRAPPER}} .elementor-tab-title:before, {{WRAPPER}} .elementor-tab-title:after, {{WRAPPER}} .elementor-tab-content, {{WRAPPER}} .elementor-tabs-content-wrapper' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-desktop-title.elementor-active' => 'background-color: {{VALUE}};', + '{{WRAPPER}} .elementor-tabs-content-wrapper' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'heading_title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'tab_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + ] + ); + + $this->addControl( + 'tab_active_color', + [ + 'label' => __('Active Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title.elementor-active' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'tab_typography', + 'selector' => '{{WRAPPER}} .elementor-tab-title', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-tab-title', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'title_shadow', + 'selector' => '{{WRAPPER}} .elementor-tab-title', + ] + ); + + $this->addControl( + 'heading_content', + [ + 'label' => __('Content'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'content_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-content' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'content_typography', + 'selector' => '{{WRAPPER}} .elementor-tab-content', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'content_shadow', + 'selector' => '{{WRAPPER}} .elementor-tab-content', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render tabs widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $tabs = $this->getSettingsForDisplay('tabs'); + + $id_int = \Tools::substr($this->getIdInt(), 0, 3); + ?> +
+
+ $item) : + $tab_count = $index + 1; + + $tab_title_key = $this->getRepeaterSettingKey('tab_title', 'tabs', $index); + + $this->addRenderAttribute($tab_title_key, [ + 'id' => 'elementor-tab-title-' . $id_int . $tab_count, + 'class' => ['elementor-tab-title', 'elementor-tab-desktop-title'], + 'data-tab' => $tab_count, + 'role' => 'tab', + 'aria-controls' => 'elementor-tab-content-' . $id_int . $tab_count, + ]); + ?> +
getRenderAttributeString($tab_title_key) ?>> + +
+ +
+
+ $item) : + $tab_count = $index + 1; + + $tab_content_key = $this->getRepeaterSettingKey('tab_content', 'tabs', $index); + + $tab_title_mobile_key = $this->getRepeaterSettingKey('tab_title_mobile', 'tabs', $tab_count); + + $this->addRenderAttribute($tab_content_key, [ + 'id' => 'elementor-tab-content-' . $id_int . $tab_count, + 'class' => ['elementor-tab-content', 'elementor-clearfix'], + 'data-tab' => $tab_count, + 'role' => 'tabpanel', + 'aria-labelledby' => 'elementor-tab-title-' . $id_int . $tab_count, + ]); + + $this->addRenderAttribute($tab_title_mobile_key, [ + 'class' => ['elementor-tab-title', 'elementor-tab-mobile-title'], + 'data-tab' => $tab_count, + 'role' => 'tab', + ]); + + $this->addInlineEditingAttributes($tab_content_key, 'advanced'); + ?> +
getRenderAttributeString($tab_title_mobile_key) ?>>
+
getRenderAttributeString($tab_content_key) ?>> + parseTextEditor($item['tab_content']) ?> +
+ +
+
+ +
+ <# if ( settings.tabs ) { + var tabindex = view.getIDInt().toString().substr( 0, 3 ); + #> +
+ <# _.each( settings.tabs, function( item, index ) { + var tabCount = index + 1; + #> + + <# } ); #> +
+
+ <# _.each( settings.tabs, function( item, index ) { + var tabCount = index + 1, + tabContentKey = view.getRepeaterSettingKey( 'tab_content', 'tabs',index ); + + view.addRenderAttribute( tabContentKey, { + 'id': 'elementor-tab-content-' + tabindex + tabCount, + 'class': [ 'elementor-tab-content', 'elementor-clearfix', 'elementor-repeater-item-' + item._id ], + 'data-tab': tabCount, + 'role' : 'tabpanel', + 'aria-labelledby' : 'elementor-tab-title-' + tabindex + tabCount + } ); + + view.addInlineEditingAttributes( tabContentKey, 'advanced' ); + #> + +
{{{ item.tab_content }}}
+ <# } ); #> +
+ <# } #> +
+ startControlsSection( + 'section_testimonials', + [ + 'label' => __('Testimonials'), + ] + ); + + $sample = [ + 'content' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + 'image' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + 'name' => 'John Doe', + 'title' => 'Designer', + ]; + + $this->addControl( + 'slides', + [ + 'type' => ControlsManager::REPEATER, + 'default' => [$sample, $sample, $sample], + 'fields' => [ + [ + 'name' => 'content', + 'label' => __('Content'), + 'type' => ControlsManager::TEXTAREA, + 'rows' => '8', + 'default' => __('List Item'), + ], + [ + 'name' => 'image', + 'label' => __('Add Image'), + 'type' => ControlsManager::MEDIA, + 'seo' => 'true', + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ], + [ + 'name' => 'name', + 'label' => __('Name'), + 'type' => ControlsManager::TEXT, + 'default' => 'John Doe', + ], + [ + 'name' => 'title', + 'label' => __('Job'), + 'type' => ControlsManager::TEXT, + 'default' => 'Designer', + ], + [ + 'name' => 'link', + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('https://your-link.com'), + ], + ], + 'title_field' => '<# if (image.url) { #>' . + '<# } #>' . + '{{{ name || title || image.title || image.alt || image.url.split("/").pop() }}}', + ] + ); + + $this->addControl( + 'layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'default' => 'image_inline', + 'options' => [ + 'image_inline' => __('Image Inline'), + 'image_stacked' => __('Image Stacked'), + 'image_above' => __('Image Above'), + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'alignment', + [ + 'label' => __('Alignment'), + 'label_block' => false, + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'separator' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-wrapper' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->registerCarouselSection([ + 'default_slides_count' => 1, + ]); + + $this->startControlsSection( + 'section_style_testimonials', + [ + 'label' => __('Testimonials'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px'], + 'selectors' => [ + '{{WRAPPER}} .slick-list' => 'margin-left: -{{SIZE}}{{UNIT}}; -webkit-clip-path: inset(0 0 0 {{SIZE}}{{UNIT}}); clip-path: inset(0 0 0 {{SIZE}}{{UNIT}});', + '{{WRAPPER}} .slick-slider .slick-slide-inner' => 'margin-left: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'slide_min_height', + [ + 'label' => __('Min Height'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'vh'], + 'range' => [ + 'px' => [ + 'min' => 100, + 'max' => 1000, + ], + 'vh' => [ + 'min' => 10, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .slick-slider .slick-slide-inner' => 'min-height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'slide_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .slick-slider .slick-slide-inner' => 'background: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'slide_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .slick-slider .slick-slide-inner' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'slide_border_size', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .slick-slider .slick-slide-inner' => 'border-style: solid; border-width: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;', + ], + ] + ); + + $this->addControl( + 'slide_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'separator' => '', + 'selectors' => [ + '{{WRAPPER}} .slick-slider .slick-slide-inner' => 'border-color: {{VALUE}};', + ], + 'condition' => [ + 'slide_border_size[top]!' => '', + ], + ] + ); + + $this->addControl( + 'slide_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'separator' => '', + 'selectors' => [ + '{{WRAPPER}} .slick-slider .slick-slide-inner' => 'border-radius: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_content', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->startControlsTabs('tabs_style_content'); + + $this->startControlsTab( + 'tab_style_content', + [ + 'label' => __('Content'), + ] + ); + + $this->addResponsiveControl( + 'content_gap', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px'], + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-content' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'content_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-content' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'content_typography', + 'label' => __('Typography'), + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} .elementor-testimonial-content', + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-testimonial-content', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_style_name', + [ + 'label' => __('Name'), + ] + ); + + $this->addControl( + 'name_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-name' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'name_typography', + 'label' => __('Typography'), + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-testimonial-name', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_style_title', + [ + 'label' => __('Job'), + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-job' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'label' => __('Typography'), + 'scheme' => SchemeTypography::TYPOGRAPHY_2, + 'selector' => '{{WRAPPER}} .elementor-testimonial-job', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_image', + [ + 'label' => __('Image'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'image_gap', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'layout!' => 'image_inline', + ], + ] + ); + + $this->addResponsiveControl( + 'image_size', + [ + 'label' => __('Image Size'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px'], + 'range' => [ + 'px' => [ + 'min' => 20, + 'max' => 200, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'image_border', + [ + 'label' => __('Border'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Yes'), + 'label_off' => __('No'), + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'border-style: solid;', + ], + ] + ); + + $this->addControl( + 'image_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'border-color: {{VALUE}};', + ], + 'condition' => [ + 'image_border!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'image_border_size', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 20, + ], + ], + 'separator' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'border-width: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'image_border!' => '', + ], + ] + ); + + $this->addControl( + 'image_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px'], + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'border-radius: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->registerNavigationStyleSection(); + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $layout_class = 'elementor-testimonial-image-position-' . ('image_inline' == $settings['layout'] ? 'aside' : 'top'); + $slides = []; + + foreach ($settings['slides'] as &$slide) { + $has_link = !empty($slide['link']['url']); + + if ($has_link) { + $this->setRenderAttribute('link', [ + 'href' => $slide['link']['url'], + 'target' => $slide['link']['is_external'] ? '_blank' : null, + 'rel' => !empty($slide['link']['nofollow']) ? 'nofollow' : null, + ]); + } + ob_start(); + ?> +
+
+ + + + +
+ + +
+
+ renderCarousel($settings, $slides); + } +} diff --git a/modules/creativeelements/includes/widgets/testimonial.php b/modules/creativeelements/includes/widgets/testimonial.php new file mode 100644 index 00000000..8934b2ba --- /dev/null +++ b/modules/creativeelements/includes/widgets/testimonial.php @@ -0,0 +1,610 @@ +startControlsSection( + 'section_testimonial', + [ + 'label' => __('Testimonial'), + ] + ); + + $this->addControl( + 'testimonial_content', + [ + 'label' => __('Content'), + 'type' => ControlsManager::TEXTAREA, + 'dynamic' => [ + 'active' => true, + ], + 'rows' => '10', + 'default' => 'Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', + ] + ); + + $this->addControl( + 'testimonial_image', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'seo' => true, + 'dynamic' => [ + 'active' => true, + ], + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + ] + ); + + $this->addControl( + 'testimonial_name', + [ + 'label' => __('Name'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => 'John Doe', + ] + ); + + $this->addControl( + 'testimonial_job', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXT, + 'dynamic' => [ + 'active' => true, + ], + 'default' => 'Designer', + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('https://your-link.com'), + ] + ); + + $this->addControl( + 'testimonial_image_position', + [ + 'label' => __('Image Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'aside', + 'options' => [ + 'aside' => __('Aside'), + 'top' => __('Top'), + ], + 'condition' => [ + 'testimonial_image[url]!' => '', + ], + 'separator' => 'before', + 'style_transfer' => true, + ] + ); + + $this->addControl( + 'testimonial_alignment', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'default' => 'center', + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'label_block' => false, + 'style_transfer' => true, + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->endControlsSection(); + + // Content. + $this->startControlsSection( + 'section_style_testimonial_content', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'content_content_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-content' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'content_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} .elementor-testimonial-content', + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-testimonial-content', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'content_shadow', + 'selector' => '{{WRAPPER}} .elementor-testimonial-content', + ] + ); + + $this->endControlsSection(); + + // Image. + $this->startControlsSection( + 'section_style_testimonial_image', + [ + 'label' => __('Image'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'testimonial_image[url]!' => '', + ], + ] + ); + + $this->addControl( + 'image_size', + [ + 'label' => __('Image Size'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px'], + 'range' => [ + 'px' => [ + 'min' => 20, + 'max' => 200, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'width: {{SIZE}}{{UNIT}};height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'image_border', + 'selector' => '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'image_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + // Name. + $this->startControlsSection( + 'section_style_testimonial_name', + [ + 'label' => __('Name'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'name_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-name' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'name_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .elementor-testimonial-name', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'name_shadow', + 'selector' => '{{WRAPPER}} .elementor-testimonial-name', + ] + ); + + $this->endControlsSection(); + + // Job. + $this->startControlsSection( + 'section_style_testimonial_job', + [ + 'label' => __('Title'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'job_text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_2, + ], + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-testimonial-job' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'job_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_2, + 'selector' => '{{WRAPPER}} .elementor-testimonial-job', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'job_shadow', + 'selector' => '{{WRAPPER}} .elementor-testimonial-job', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render testimonial widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $this->addRenderAttribute('wrapper', 'class', 'elementor-testimonial-wrapper'); + + if ($settings['testimonial_alignment']) { + $this->addRenderAttribute('wrapper', 'class', 'elementor-testimonial-text-align-' . $settings['testimonial_alignment']); + } + + $this->addRenderAttribute('meta', 'class', 'elementor-testimonial-meta'); + + if ($settings['testimonial_image']['url']) { + $this->addRenderAttribute('meta', 'class', 'elementor-has-image'); + } + + if ($settings['testimonial_image_position']) { + $this->addRenderAttribute('meta', 'class', 'elementor-testimonial-image-position-' . $settings['testimonial_image_position']); + } + + $has_content = !!$settings['testimonial_content']; + $has_image = !!$settings['testimonial_image']['url']; + $has_name = !!$settings['testimonial_name']; + $has_job = !!$settings['testimonial_job']; + + if (!$has_content && !$has_image && !$has_name && !$has_job) { + return; + } + + if (!empty($settings['link']['url'])) { + $this->addRenderAttribute('link', 'href', $settings['link']['url']); + + if ($settings['link']['is_external']) { + $this->addRenderAttribute('link', 'target', '_blank'); + } + + if (!empty($settings['link']['nofollow'])) { + $this->addRenderAttribute('link', 'rel', 'nofollow'); + } + } + ?> +
getRenderAttributeString('wrapper') ?>> + addRenderAttribute('testimonial_content', 'class', 'elementor-testimonial-content'); + + $this->addInlineEditingAttributes('testimonial_content'); + ?> +
getRenderAttributeString('testimonial_content') ?>> + +
+ + + +
getRenderAttributeString('meta') ?>> +
+ +
+ getRenderAttributeString('link') . '>' . $image_html . ''; + endif; + echo $image_html; + ?> +
+ + + +
+ addRenderAttribute('testimonial_name', 'class', 'elementor-testimonial-name'); + + $this->addInlineEditingAttributes('testimonial_name', 'none'); + + $testimonial_name_html = $settings['testimonial_name']; + + if (!empty($settings['link']['url'])) { + $testimonial_name_html = + 'getRenderAttributeString('link') . '>' . $testimonial_name_html . ''; + } + ?> +
getRenderAttributeString('testimonial_name') ?>> + +
+ + addRenderAttribute('testimonial_job', 'class', 'elementor-testimonial-job'); + + $this->addInlineEditingAttributes('testimonial_job', 'none'); + + $testimonial_job_html = $settings['testimonial_job']; + + if (!empty($settings['link']['url'])) { + $testimonial_job_html = + 'getRenderAttributeString('link') . '>' . $testimonial_job_html . ''; + } + ?> +
getRenderAttributeString('testimonial_job') ?>> + +
+ +
+ +
+
+ +
+ + <# + var imageUrl = false, + hasImage = false; + + if ( '' !== settings.testimonial_image.url ) { + imageUrl = elementor.imagesManager.getImageUrl( settings.testimonial_image ); + hasImage = ' elementor-has-image'; + + var imageHtml = 'testimonial'; + if ( settings.link.url ) { + imageHtml = '' + imageHtml + ''; + } + } + + var testimonial_alignment = settings.testimonial_alignment ? + ' elementor-testimonial-text-align-' + settings.testimonial_alignment : ''; + var testimonial_image_position = settings.testimonial_image_position ? + ' elementor-testimonial-image-position-' + settings.testimonial_image_position : ''; + #> +
+ <# if ( '' !== settings.testimonial_content ) { + view.addRenderAttribute( 'testimonial_content', 'class', 'elementor-testimonial-content' ); + + view.addInlineEditingAttributes( 'testimonial_content' ); + #> +
+ {{{ settings.testimonial_content }}} +
+ <# } #> +
+
+ <# if ( imageUrl ) { #> +
{{{ imageHtml }}}
+ <# } #> + +
+ <# if ( '' !== settings.testimonial_name ) { + view.addRenderAttribute( 'testimonial_name', 'class', 'elementor-testimonial-name' ); + + view.addInlineEditingAttributes( 'testimonial_name', 'none' ); + + var testimonialNameHtml = settings.testimonial_name; + if ( settings.link.url ) { + testimonialNameHtml = '' + testimonialNameHtml + ''; + } + #> +
+ {{{ testimonialNameHtml }}} +
+ <# } #> + + <# if ( '' !== settings.testimonial_job ) { + view.addRenderAttribute( 'testimonial_job', 'class', 'elementor-testimonial-job' ); + + view.addInlineEditingAttributes( 'testimonial_job', 'none' ); + + var testimonialJobHtml = settings.testimonial_job; + if ( settings.link.url ) { + testimonialJobHtml = '' + testimonialJobHtml + ''; + } + #> +
{{{ testimonialJobHtml }}}
+ <# } #> +
+
+
+
+ startControlsSection( + 'section_editor', + [ + 'label' => __('Text Editor'), + ] + ); + + $this->addControl( + 'editor', + [ + 'label' => '', + 'type' => ControlsManager::WYSIWYG, + 'dynamic' => [ + 'active' => true, + ], + 'default' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + ] + ); + + $this->addControl( + 'drop_cap', + [ + 'label' => __('Drop Cap'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Off'), + 'label_on' => __('On'), + 'prefix_class' => 'elementor-drop-cap-', + 'frontend_available' => true, + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style', + [ + 'label' => __('Text Editor'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-text-editor' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}}' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'text_shadow', + 'selector' => '{{WRAPPER}}', + ] + ); + + $text_columns = range(1, 10); + $text_columns = array_combine($text_columns, $text_columns); + $text_columns[''] = __('Default'); + + $this->addResponsiveControl( + 'text_columns', + [ + 'label' => __('Columns'), + 'type' => ControlsManager::SELECT, + 'separator' => 'before', + 'options' => &$text_columns, + 'selectors' => [ + '{{WRAPPER}} .elementor-text-editor' => 'columns: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'column_gap', + [ + 'label' => __('Columns Gap'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%', 'em', 'vw'], + 'range' => [ + 'px' => [ + 'max' => 100, + ], + '%' => [ + 'max' => 10, + 'step' => 0.1, + ], + 'vw' => [ + 'max' => 10, + 'step' => 0.1, + ], + 'em' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-text-editor' => 'column-gap: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_drop_cap', + [ + 'label' => __('Drop Cap'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'drop_cap' => 'yes', + ], + ] + ); + + $this->addControl( + 'drop_cap_view', + [ + 'label' => __('View'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + 'stacked' => __('Stacked'), + 'framed' => __('Framed'), + ], + 'default' => 'default', + 'prefix_class' => 'elementor-drop-cap-view-', + 'condition' => [ + 'drop_cap' => 'yes', + ], + ] + ); + + $this->addControl( + 'drop_cap_primary_color', + [ + 'label' => __('Primary Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}.elementor-drop-cap-view-stacked .elementor-drop-cap' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-drop-cap-view-framed .elementor-drop-cap, {{WRAPPER}}.elementor-drop-cap-view-default .elementor-drop-cap' => 'color: {{VALUE}}; border-color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'condition' => [ + 'drop_cap' => 'yes', + ], + ] + ); + + $this->addControl( + 'drop_cap_secondary_color', + [ + 'label' => __('Secondary Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}.elementor-drop-cap-view-framed .elementor-drop-cap' => 'background-color: {{VALUE}};', + '{{WRAPPER}}.elementor-drop-cap-view-stacked .elementor-drop-cap' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'drop_cap_view!' => 'default', + ], + ] + ); + + $this->addControl( + 'drop_cap_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 5, + ], + 'range' => [ + 'px' => [ + 'max' => 30, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-drop-cap' => 'padding: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'drop_cap_view!' => 'default', + ], + ] + ); + + $this->addControl( + 'drop_cap_space', + [ + 'label' => __('Space'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .elementor-drop-cap' => 'margin-right: {{SIZE}}{{UNIT}};', + 'body.lang-rtl {{WRAPPER}} .elementor-drop-cap' => 'margin-left: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'drop_cap_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%', 'px'], + 'default' => [ + 'unit' => '%', + ], + 'range' => [ + '%' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-drop-cap' => 'border-radius: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'drop_cap_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .elementor-drop-cap' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'condition' => [ + 'drop_cap_view' => 'framed', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'drop_cap_typography', + 'selector' => '{{WRAPPER}} .elementor-drop-cap-letter', + 'exclude' => [ + 'letter_spacing', + ], + 'condition' => [ + 'drop_cap' => 'yes', + ], + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'drop_cap_shadow', + 'selector' => '{{WRAPPER}} .elementor-drop-cap-letter', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render text editor widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $editor_content = $this->getSettingsForDisplay('editor'); + + $editor_content = $this->parseTextEditor($editor_content); + + $this->addRenderAttribute('editor', 'class', ['elementor-text-editor', 'elementor-clearfix']); + + $this->addInlineEditingAttributes('editor', 'advanced'); + ?> +
getRenderAttributeString('editor') ?>>
+ getSettings('editor'); + } + + /** + * Render text editor widget output in the editor. + * + * Written as a Backbone JavaScript template and used to generate the live preview. + * + * @since 1.0.0 + * @access protected + */ + protected function _contentTemplate() + { + ?> + <# + view.addRenderAttribute( 'editor', 'class', [ 'elementor-text-editor', 'elementor-clearfix' ] ); + + view.addInlineEditingAttributes( 'editor', 'advanced' ); + #> +
{{{ settings.editor }}}
+ [ + 'svg' => ['width' => 250.5, 'height' => 125.25, 'viewBox' => '0 0 250.5 125.25'], + 'path' => ['d' => 'M.25,125.25a125,125,0,0,1,250,0'], + ], + 'circle' => [ + 'svg' => ['width' => 250.5, 'height' => 250.5, 'viewBox' => '0 0 250.5 250.5'], + 'path' => ['d' => 'M.25,125.25a125,125,0,1,1,125,125,125,125,0,0,1-125-125'], + ], + 'line' => [ + 'svg' => ['width' => 250, 'height' => 22, 'viewBox' => '0 0 250 22'], + 'path' => ['d' => 'M 0 27 l 250 -22'], + ], + 'oval' => [ + 'svg' => ['width' => 250.5, 'height' => 125.75, 'viewBox' => '0 0 250.5 125.75'], + 'path' => ['d' => 'M.25,62.875C.25,28.2882,56.2144.25,125.25.25s125,28.0382,125,62.625-55.9644,62.625-125,62.625S.25,97.4619.25,62.875'], + ], + 'spiral' => [ + 'svg' => ['width' => 250.435, 'height' => 239.445, 'viewBox' => '0 0 250.435 239.445'], + 'path' => ['d' => 'M.185,49.022a149.349,149.349,0,0,1,210.982-9.824,119.48,119.48,0,0,1,7.861,168.79A95.583,95.583,0,0,1,84,214.27a76.467,76.467,0,0,1-5.031-108.023'], + ], + 'wave' => [ + 'svg' => ['width' => 250, 'height' => 42.5, 'viewBox' => '0 0 250 42.5'], + 'path' => ['d' => 'M0,42.25C62.5,42.25,62.5.25,125,.25s62.5,42,125,42'], + ], + ]; + + /** + * Get widget name. + * + * Retrieve Text Path widget name. + * + * @return string Widget name. + * @access public + */ + public function getName() + { + return 'text-path'; + } + + /** + * Get widget title. + * + * Retrieve Text Path widget title. + * + * @return string Widget title. + * @access public + */ + public function getTitle() + { + return __('Text Path'); + } + + /** + * Get widget icon. + * + * Retrieve Text Path widget icon. + * + * @return string Widget icon. + * @access public + */ + public function getIcon() + { + return 'eicon-wordart'; + } + + /** + * Get widget keywords. + * + * Retrieve the list of keywords the widget belongs to. + * + * @return array Widget keywords. + * @access public + */ + public function getKeywords() + { + return ['text path', 'word path', 'text on path', 'wordart', 'word art']; + } + + /** + * Register content controls under content tab. + */ + protected function registerContentTab() + { + $this->startControlsSection( + 'section_content_text_path', + [ + 'label' => __('Text Path'), + 'tab' => ControlsManager::TAB_CONTENT, + ] + ); + + $this->addControl( + 'text', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'label_block' => true, + 'default' => __('Add Your Curvy Text Here'), + 'dynamic' => [ + 'active' => true, + ], + ] + ); + + $this->addControl( + 'path', + [ + 'label' => __('Path Type'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'wave' => __('Wave'), + 'arc' => __('Arc'), + 'circle' => __('Circle'), + 'line' => __('Line'), + 'oval' => __('Oval'), + 'spiral' => __('Spiral'), + 'custom' => __('Custom'), + ], + 'default' => 'wave', + ] + ); + + $this->addControl( + 'custom_path_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::NUMBER, + 'min' => 0, + 'default' => 250, + 'condition' => [ + 'path' => 'custom', + ], + ] + ); + + $this->addControl( + 'custom_path_height', + [ + 'label' => __('Height'), + 'type' => ControlsManager::NUMBER, + 'min' => 0, + 'default' => 42.5, + 'condition' => [ + 'path' => 'custom', + ], + ] + ); + + $this->addControl( + 'custom_path_data', + [ + 'label' => __('Path'), + 'type' => ControlsManager::TEXTAREA, + 'default' => "M 0,42.25\nC 62.5,42.25 62.5,0.25 125,0.25\ns 62.5,42 125,42", + 'description' => __('Want to create custom text paths?') . sprintf( + ' %s', + __('Learn More') + ), + 'condition' => [ + 'path' => 'custom', + ], + ] + ); + + $this->addControl( + 'link', + [ + 'label' => __('Link'), + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'active' => true, + ], + 'placeholder' => __('Paste URL or type'), + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'default' => '', + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => '--alignment: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'text_path_direction', + [ + 'label' => __('Text Direction'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Default'), + 'rtl' => __('RTL'), + 'ltr' => __('LTR'), + ], + 'selectors' => [ + '{{WRAPPER}}' => '--direction: {{VALUE}}', + ], + 'render_type' => 'template', + ] + ); + + $this->addControl( + 'show_path', + [ + 'label' => __('Show Path'), + 'type' => ControlsManager::SWITCHER, + 'return_value' => self::DEFAULT_PATH_FILL, + 'selectors' => [ + '{{WRAPPER}}' => '--path-stroke: {{VALUE}}; --path-fill: transparent;', + ], + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + } + + /** + * Register style controls under style tab. + */ + protected function registerStyleTab() + { + /** + * Text Path styling section. + */ + $this->startControlsSection( + 'section_style_text_path', + [ + 'label' => __('Text Path'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%', 'px'], + 'range' => [ + 'px' => [ + 'max' => 800, + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => '--width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'rotation', + [ + 'label' => __('Rotate'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['deg'], + 'default' => [ + 'unit' => 'deg', + ], + 'tablet_default' => [ + 'unit' => 'deg', + ], + 'mobile_default' => [ + 'unit' => 'deg', + ], + 'selectors' => [ + '{{WRAPPER}}' => '--rotate: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'text_heading', + [ + 'label' => __('Text'), + 'type' => ControlsManager::HEADING, + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'text_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'exclude' => ['line_height'], + 'fields_options' => [ + 'font_size' => [ + 'size_units' => ['px'], + ], + // Text decoration isn't an inherited property, so it's required to explicitly + // target the specific `textPath` element. + 'text_decoration' => [ + 'selectors' => [ + '{{WRAPPER}} textPath' => 'text-decoration: {{VALUE}}', + ], + ], + ], + 'selector' => '{{WRAPPER}}', + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} textPath', + ] + ); + + $this->addResponsiveControl( + 'word_spacing', + [ + 'label' => __('Word Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -20, + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => '--word-spacing: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'start_point', + [ + 'label' => __('Starting Point'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['%'], + 'default' => [ + 'unit' => '%', + ], + ] + ); + + $this->startControlsTabs('text_style'); + + /** + * Normal tab. + */ + $this->startControlsTab( + 'text_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'text_color_normal', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}' => '--text-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + /** + * Hover tab. + */ + $this->startControlsTab( + 'text_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'text_color_hover', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}' => '--text-color-hover: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->addControl( + 'hover_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['s'], + 'range' => [ + 's' => [ + 'min' => 0, + 'max' => 3, + 'step' => 0.1, + ], + ], + 'default' => [ + 'unit' => 's', + ], + 'selectors' => [ + '{{WRAPPER}}' => '--transition: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + + /** + * Path styling section. + */ + $this->startControlsSection( + 'section_style_path', + [ + 'label' => __('Path'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'show_path!' => '', + ], + ] + ); + + $this->startControlsTabs('path_style'); + + /** + * Normal tab. + */ + $this->startControlsTab( + 'path_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'path_fill_normal', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}' => '--path-fill: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'stroke_heading_normal', + [ + 'label' => __('Stroke'), + 'type' => ControlsManager::HEADING, + ] + ); + + $this->addControl( + 'stroke_color_normal', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => self::DEFAULT_PATH_FILL, + 'selectors' => [ + '{{WRAPPER}}' => '--stroke-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'stroke_width_normal', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => '--stroke-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + /** + * Hover tab. + */ + $this->startControlsTab( + 'path_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'path_fill_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}' => '--path-fill-hover: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'stroke_heading_hover', + [ + 'label' => __('Stroke'), + 'type' => ControlsManager::HEADING, + ] + ); + + $this->addControl( + 'stroke_color_hover', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}' => '--stroke-color-hover: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'stroke_width_hover', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => '--stroke-width-hover: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'stroke_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['s'], + 'range' => [ + 's' => [ + 'min' => 0, + 'max' => 3, + 'step' => 0.1, + ], + ], + 'default' => [ + 'unit' => 's', + ], + 'selectors' => [ + '{{WRAPPER}}' => '--stroke-transition: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + } + + /** + * Register Text Path widget controls. + * + * Adds different input fields to allow the user to change and customize the widget settings. + * + * @access protected + */ + protected function _registerControls() + { + $this->registerContentTab(); + $this->registerStyleTab(); + } + + /** + * Render Text Path widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $path_id = 'e-path-' . $this->getId(); + $is_rtl = $settings['text_path_direction'] ? 'rtl' === $settings['text_path_direction'] : is_rtl(); + $start_offset = $is_rtl ? 100 - (int) $settings['start_point']['size'] : (int) $settings['start_point']['size']; + $text = esc_html($settings['text']); + + $this->addRenderAttribute('svg', 'class', 'ce-text-path'); + $this->addRenderAttribute('path', 'id', $path_id); + $this->addRenderAttribute('custom' !== $settings['path'] ? self::SVG_PATHS[$settings['path']] : [ + 'svg' => [ + 'width' => $settings['custom_path_width'], + 'height' => $settings['custom_path_height'], + 'viewBox' => "0 0 {$settings['custom_path_width']} {$settings['custom_path_height']}", + ], + 'path' => ['d' => $settings['custom_path_data']], + ]); + + if ($has_link = !empty($settings['link']['url'])) { + $this->addRenderAttribute('link', 'href', $settings['link']['url']); + + empty($settings['link']['is_external']) or $this->addRenderAttribute('link', 'target', '_blank'); + empty($settings['link']['nofollow']) or $this->addRenderAttribute('link', 'rel', 'nofollow'); + } + if ($settings['hover_animation']) { + $this->addRenderAttribute('svg', 'class', 'elementor-animation-' . $settings['hover_animation']); + } + ?> + getRenderAttributeString('svg') ?>> + getRenderAttributeString('path') ?>/> + + + getRenderAttributeString('link')}>$text" : $text ?> + + + + + <# + var SVG_PATHS = , + pathId = 'e-path-' + view.getID(), + isRtl = settings.text_path_direction ? 'rtl' === settings.text_path_direction : , + startOffset = isRtl ? 100 - settings.start_point.size : settings.start_point.size; + + view.addRenderAttribute('svg', 'class', 'ce-text-path'); + view.addRenderAttribute('path', 'id', pathId); + view.addRenderAttribute('custom' !== settings.path ? SVG_PATHS[settings.path] : { + svg: { + width: settings.custom_path_width, + height: settings.custom_path_height, + viewBox: '0 0 ' + settings.custom_path_width + ' ' + settings.custom_path_height + }, + path: {d: settings.custom_path_data} + }); + + if (settings.hover_animation) { + view.addRenderAttribute('svg', 'class', 'elementor-animation-' + settings.hover_animation); + } + #> + + + + + <# if (settings.link.url) { #> + {{ settings.text }} + <# } else print(_.escape(settings.text)) #> + + + + startControlsSection( + 'section_toggle', + [ + 'label' => __('Toggle'), + ] + ); + + $repeater = new Repeater(); + + $repeater->addControl( + 'tab_title', + [ + 'label' => __('Title & Description'), + 'type' => ControlsManager::TEXT, + 'default' => __('Toggle Title'), + 'label_block' => true, + ] + ); + + $repeater->addControl( + 'tab_content', + [ + 'label' => __('Content'), + 'type' => ControlsManager::WYSIWYG, + 'default' => __('Toggle Content'), + 'show_label' => false, + ] + ); + + $this->addControl( + 'tabs', + [ + 'label' => __('Toggle Items'), + 'type' => ControlsManager::REPEATER, + 'fields' => $repeater->getControls(), + 'default' => [ + [ + 'tab_title' => __('Toggle #1'), + 'tab_content' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + ], + [ + 'tab_title' => __('Toggle #2'), + 'tab_content' => __('Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), + ], + ], + 'title_field' => '{{{ tab_title }}}', + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'traditional', + ] + ); + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => is_rtl() ? 'fa fa-caret-left' : 'fa fa-caret-right', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'icon_active', + [ + 'label' => __('Active Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-caret-up', + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'title_html_tag', + [ + 'label' => __('Title HTML Tag'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'h1' => 'H1', + 'h2' => 'H2', + 'h3' => 'H3', + 'h4' => 'H4', + 'h5' => 'H5', + 'h6' => 'H6', + 'div' => 'div', + ], + 'default' => 'div', + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_toggle_style', + [ + 'label' => __('Toggle'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title' => 'border-width: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} .elementor-tab-content' => 'border-width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-content' => 'border-bottom-color: {{VALUE}};', + '{{WRAPPER}} .elementor-tab-title' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-toggle-item:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow', + 'selector' => '{{WRAPPER}} .elementor-toggle-item', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_toggle_style_title', + [ + 'label' => __('Title'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'title_background', + [ + 'label' => __('Background'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'title_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + ] + ); + + $this->addControl( + 'tab_active_color', + [ + 'label' => __('Active Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title.elementor-active' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_4, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'title_typography', + 'selector' => '{{WRAPPER}} .elementor-tab-title', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + ] + ); + + $this->addGroupControl( + GroupControlTextStroke::getType(), + [ + 'name' => 'text_stroke', + 'selector' => '{{WRAPPER}} .elementor-tab-title', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'title_shadow', + 'selector' => '{{WRAPPER}} .elementor-tab-title', + ] + ); + + $this->addResponsiveControl( + 'title_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_toggle_style_icon', + [ + 'label' => __('Icon'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'icon_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Start'), + 'icon' => 'eicon-h-align-left', + ], + 'right' => [ + 'title' => __('End'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'default' => is_rtl() ? 'right' : 'left', + 'toggle' => false, + 'label_block' => false, + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'icon_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title .elementor-toggle-icon .fa:before' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addControl( + 'icon_active_color', + [ + 'label' => __('Active Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-title.elementor-active .elementor-toggle-icon .fa:before' => 'color: {{VALUE}};', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'icon_space', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-toggle-icon.elementor-toggle-icon-left' => 'margin-right: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} .elementor-toggle-icon.elementor-toggle-icon-right' => 'margin-left: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'icon!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_toggle_style_content', + [ + 'label' => __('Content'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'content_background_color', + [ + 'label' => __('Background'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-content' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'content_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-content' => 'color: {{VALUE}};', + ], + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'content_typography', + 'selector' => '{{WRAPPER}} .elementor-tab-content', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'content_shadow', + 'selector' => '{{WRAPPER}} .elementor-tab-content', + ] + ); + + $this->addResponsiveControl( + 'content_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-tab-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * Render toggle widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $id_int = \Tools::substr($this->getIdInt(), 0, 3); + + empty($settings['icon']) or $this->addRenderAttribute('toggle_icon', [ + 'class' => 'elementor-toggle-icon elementor-toggle-icon-' . $settings['icon_align'], + 'aria-hidden' => 'true', + ]); + ?> +
+ $item) : + $tab_count = $index + 1; + + $tab_title_key = $this->getRepeaterSettingKey('tab_title', 'tabs', $index); + + $tab_content_key = $this->getRepeaterSettingKey('tab_content', 'tabs', $index); + + $this->addRenderAttribute($tab_title_key, [ + 'id' => 'elementor-tab-title-' . $id_int . $tab_count, + 'class' => ['elementor-tab-title'], + 'data-tab' => $tab_count, + 'role' => 'tab', + 'aria-controls' => 'elementor-tab-content-' . $id_int . $tab_count, + ]); + + $this->addRenderAttribute($tab_content_key, [ + 'id' => 'elementor-tab-content-' . $id_int . $tab_count, + 'class' => ['elementor-tab-content', 'elementor-clearfix'], + 'data-tab' => $tab_count, + 'role' => 'tabpanel', + 'aria-labelledby' => 'elementor-tab-title-' . $id_int . $tab_count, + ]); + + $this->addInlineEditingAttributes($tab_content_key, 'advanced'); + ?> +
+ < getRenderAttributeString($tab_title_key) ?>> + + getRenderAttributeString('toggle_icon') ?>> + + + + + + > +
getRenderAttributeString($tab_content_key) ?>> + parseTextEditor($item['tab_content']) ?> +
+
+ +
+ +
+ <# + if ( ! settings.tabs ) { + return; + } + var tabindex = view.getIDInt().toString().substr( 0, 3 ), + iconAlign = settings.icon_align; + + _.each( settings.tabs, function( item, index ) { + var tabCount = index + 1, + tabTitleKey = view.getRepeaterSettingKey( 'tab_title', 'tabs', index ), + tabContentKey = view.getRepeaterSettingKey( 'tab_content', 'tabs', index ); + + view.addRenderAttribute( tabTitleKey, { + 'id': 'elementor-tab-title-' + tabindex + tabCount, + 'class': [ 'elementor-tab-title' ], + 'data-tab': tabCount, + 'role': 'tab', + 'aria-controls': 'elementor-tab-content-' + tabindex + tabCount + } ); + + view.addRenderAttribute( tabContentKey, { + 'id': 'elementor-tab-content-' + tabindex + tabCount, + 'class': [ 'elementor-tab-content', 'elementor-clearfix' ], + 'data-tab': tabCount, + 'role': 'tabpanel', + 'aria-labelledby': 'elementor-tab-title-' + tabindex + tabCount + } ); + + view.addInlineEditingAttributes( tabContentKey, 'advanced' ); + #> +
+ <{{{ settings.title_html_tag }}} {{{ view.getRenderAttributeString( tabTitleKey ) }}}> + <# if ( settings.icon ) { #> + + <# } #> + {{{ item.tab_title }}} + +
{{{ item.tab_content }}}
+
+ <# + } ); #> +
+ startControlsSection( + 'section_product_carousel', + [ + 'label' => __('TrustedShops Reviews'), + ] + ); + + $this->addControl( + 'ts_id', + [ + 'label' => __('TrustedShops Id'), + 'label_block' => true, + 'type' => ControlsManager::TEXT, + 'description' => __('You received your personal TS ID when you registered with Trusted Shops.'), + ] + ); + + $show_from = __('Show from %d Stars'); + + $this->addControl( + 'min_rating', + [ + 'label' => __('Filter Reviews'), + 'type' => ControlsManager::SELECT, + 'default' => '1', + 'options' => [ + '1' => __('Show All'), + '2' => sprintf($show_from, 2), + '3' => sprintf($show_from, 3), + '4' => sprintf($show_from, 4), + '5' => sprintf($show_from, 5), + ], + ] + ); + + $this->endControlsSection(); + + $this->registerCarouselSection([ + 'default_slides_count' => 4, + ]); + + $this->startControlsSection( + 'section_style_reviews', + [ + 'label' => __('Reviews'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'reviews_min_height', + [ + 'label' => __('Min Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 100, + 'max' => 1000, + ], + 'vh' => [ + 'min' => 10, + 'max' => 100, + ], + ], + 'size_units' => ['px', 'vh'], + 'selectors' => [ + '{{WRAPPER}} .slick-slide .slick-slide-inner' => 'min-height: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'reviews_vertical_alignment', + [ + 'label' => __('Vertical Alignment'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'top' => __('Top'), + 'middle' => __('Middle'), + 'bottom' => __('Bottom'), + ], + 'default' => 'middle', + 'selectors' => [ + '{{WRAPPER}} .slick-slide' => 'vertical-align: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'reviews_spacing', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + '{{WRAPPER}} .slick-list' => 'margin-left: -{{SIZE}}{{UNIT}}; -webkit-clip-path: inset(0 0 0 {{SIZE}}{{UNIT}}); clip-path: inset(0 0 0 {{SIZE}}{{UNIT}});', + '{{WRAPPER}} .slick-slide .slick-slide-inner' => 'padding-left: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'slides_to_show!' => '1', + ], + ] + ); + + $this->addControl( + 'reviews_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#ffffff', + 'selectors' => [ + '{{WRAPPER}} .slick-slide .slick-slide-inner' => 'background: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'reviews_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-header' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + '{{WRAPPER}} .elementor-trustedshops-reviews-comment' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'reviews_border', + 'selector' => '{{WRAPPER}} .elementor-image-carousel-wrapper .elementor-image-carousel .slick-slide-inner', + ] + ); + + $this->addControl( + 'reviews_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .elementor-image-carousel-wrapper .elementor-image-carousel .slick-slide-inner' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'heading_style_header', + [ + 'label' => __('Heading'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'header_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-header' => 'background: {{VALUE}};', + ], + ] + ); + + $this->addResponsiveControl( + 'header_gap', + [ + 'label' => __('Gap'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-header' => 'padding-bottom: calc({{SIZE}}{{UNIT}} / 2);', + '{{WRAPPER}} .elementor-trustedshops-reviews-comment' => 'padding-top: calc({{SIZE}}{{UNIT}} / 2);', + ], + ] + ); + + $this->addControl( + 'header_separator', + [ + 'label' => __('Separator'), + 'type' => ControlsManager::SWITCHER, + 'default' => '', + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'return_value' => 'solid', + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-header' => 'border-bottom-style: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'header_separator_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-header' => 'border-bottom-color: {{VALUE}};', + ], + 'condition' => [ + 'header_separator!' => '', + ], + ] + ); + + $this->addControl( + 'header_separator_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-header' => 'border-bottom-width: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'header_separator!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_text', + [ + 'label' => __('Text'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'heading_style_date', + [ + 'label' => __('Date'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'date_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-date' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'date_typography', + 'label' => __('Typography'), + 'scheme' => SchemeTypography::TYPOGRAPHY_2, + 'selector' => '{{WRAPPER}} .elementor-trustedshops-reviews-date', + ] + ); + + $this->addControl( + 'heading_style_comment', + [ + 'label' => __('Comment'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'comment_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-comment' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'comment_typography', + 'label' => __('Typography'), + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} .elementor-trustedshops-reviews-comment', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_rating', + [ + 'label' => __('Rating'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'rating_icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Font Awesome'), + 'unicode' => __('Unicode'), + ], + ] + ); + + $this->addControl( + 'rating_unmarked_style', + [ + 'label' => __('Unmarked Style'), + 'label_block' => false, + 'type' => ControlsManager::CHOOSE, + 'default' => 'star', + 'options' => [ + 'star' => [ + 'title' => __('Solid'), + 'icon' => 'fa fa-star', + ], + 'star-o' => [ + 'title' => __('Outline'), + 'icon' => 'fa fa-star-o', + ], + ], + ] + ); + + $this->addControl( + 'rating_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-stars' => 'font-size: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'rating_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-stars' => 'letter-spacing: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'rating_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#f0ad4e', + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-stars' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'rating_unmarked_color', + [ + 'label' => __('Unmarked Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#ccd6df', + 'selectors' => [ + '{{WRAPPER}} .elementor-trustedshops-reviews-stars .elementor-unmarked-star' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->registerNavigationStyleSection(); + } + + protected function getReviews($tsId) + { + if (\Tools::strlen($tsId) != 33) { + return false; + } + + $reviews = get_transient('ts_' . $tsId); + + if (false === $reviews) { + $result = \Tools::file_get_contents("http://api.trustedshops.com/rest/public/v2/shops/$tsId/reviews.json"); + + if (empty($result)) { + return false; + } + + $result = json_decode($result, true); + + if (empty($result['response']['data']['shop']['reviews'])) { + return false; + } + + $reviews = &$result['response']['data']['shop']['reviews']; + + set_transient('ts_' . $tsId, $reviews, 24 * 3600); + } + return $reviews; + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $reviews = $this->getReviews($settings['ts_id']); + + if (empty($reviews)) { + return; + } + + $date_format = \Context::getContext()->language->date_format_lite; + $star = ''; + $unstar = ''; + $slides = []; + + foreach ($reviews as &$review) { + $rating = round($review['mark']); + + if ($rating >= (int) $settings['min_rating']) { + ob_start(); + ?> +
+
+
+
+ +
+
+ +
+
+
+
+
+ addRenderAttribute('carousel', 'class', 'elementor-trustedshops-reviews'); + + if (!empty($settings['rating_icon'])) { + $this->addRenderAttribute('carousel', 'class', 'elementor-icon-unicode'); + } + + $this->renderCarousel($settings, $slides); + } +} diff --git a/modules/creativeelements/includes/widgets/video.php b/modules/creativeelements/includes/widgets/video.php new file mode 100644 index 00000000..45d64439 --- /dev/null +++ b/modules/creativeelements/includes/widgets/video.php @@ -0,0 +1,1103 @@ +startControlsSection( + 'section_video', + [ + 'label' => __('Video'), + ] + ); + + $this->addControl( + 'video_type', + [ + 'label' => __('Source'), + 'type' => ControlsManager::SELECT, + 'default' => 'youtube', + 'options' => [ + 'youtube' => __('YouTube'), + 'vimeo' => __('Vimeo'), + 'dailymotion' => __('Dailymotion'), + 'hosted' => __('Self Hosted'), + ], + ] + ); + + $this->addControl( + 'youtube_url', + [ + 'label' => __('Link'), + 'type' => ControlsManager::TEXT, + // 'dynamic' => [ + // 'active' => true, + // 'categories' => [ + // TagsModule::POST_META_CATEGORY, + // TagsModule::URL_CATEGORY, + // ], + // ], + 'placeholder' => __('Enter your URL') . ' (YouTube)', + 'default' => 'https://www.youtube.com/watch?v=XHOmBV4js_E', + 'label_block' => true, + 'condition' => [ + 'video_type' => 'youtube', + ], + ] + ); + + $this->addControl( + 'vimeo_url', + [ + 'label' => __('Link'), + 'type' => ControlsManager::TEXT, + // 'dynamic' => [ + // 'active' => true, + // 'categories' => [ + // TagsModule::POST_META_CATEGORY, + // TagsModule::URL_CATEGORY, + // ], + // ], + 'placeholder' => __('Enter your URL') . ' (Vimeo)', + 'default' => 'https://vimeo.com/235215203', + 'label_block' => true, + 'condition' => [ + 'video_type' => 'vimeo', + ], + ] + ); + + $this->addControl( + 'dailymotion_url', + [ + 'label' => __('Link'), + 'type' => ControlsManager::TEXT, + // 'dynamic' => [ + // 'active' => true, + // 'categories' => [ + // TagsModule::POST_META_CATEGORY, + // TagsModule::URL_CATEGORY, + // ], + // ], + 'placeholder' => __('Enter your URL') . ' (Dailymotion)', + 'default' => 'https://www.dailymotion.com/video/x6tqhqb', + 'label_block' => true, + 'condition' => [ + 'video_type' => 'dailymotion', + ], + ] + ); + + $this->addControl( + 'insert_url', + [ + // 'label' => __('External URL'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'yes', + 'condition' => [ + 'video_type' => 'hosted', + ], + ] + ); + + $this->addControl( + 'hosted_url', + [ + // 'label' => __('Choose File'), + 'type' => ControlsManager::HIDDEN, + // 'dynamic' => [ + // 'active' => true, + // 'categories' => [ + // TagsModule::MEDIA_CATEGORY, + // ], + // ], + // 'media_type' => 'video', + 'condition' => [ + 'video_type' => 'hosted', + 'insert_url' => '', + ], + ] + ); + + $this->addControl( + 'external_url', + [ + 'label' => __('URL'), + 'type' => ControlsManager::URL, + 'autocomplete' => false, + 'show_external' => false, + 'label_block' => true, + 'show_label' => false, + // 'dynamic' => [ + // 'active' => true, + // 'categories' => [ + // TagsModule::POST_META_CATEGORY, + // TagsModule::URL_CATEGORY, + // ], + // ], + 'media_type' => 'video', + 'placeholder' => __('Enter your URL'), + 'condition' => [ + 'video_type' => 'hosted', + 'insert_url' => 'yes', + ], + ] + ); + + $this->addControl( + 'start', + [ + 'label' => __('Start Time'), + 'type' => ControlsManager::NUMBER, + 'description' => __('Specify a start time (in seconds)'), + 'condition' => [ + 'loop' => '', + ], + ] + ); + + $this->addControl( + 'end', + [ + 'label' => __('End Time'), + 'type' => ControlsManager::NUMBER, + 'description' => __('Specify an end time (in seconds)'), + 'condition' => [ + 'loop' => '', + 'video_type' => ['youtube', 'hosted'], + ], + ] + ); + + $this->addControl( + 'video_options', + [ + 'label' => __('Video Options'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'autoplay', + [ + 'label' => __('Autoplay'), + 'type' => ControlsManager::SWITCHER, + ] + ); + + $this->addControl( + 'mute', + [ + 'label' => __('Mute'), + 'type' => ControlsManager::SWITCHER, + ] + ); + + $this->addControl( + 'loop', + [ + 'label' => __('Loop'), + 'type' => ControlsManager::SWITCHER, + 'condition' => [ + 'video_type!' => 'dailymotion', + ], + ] + ); + + $this->addControl( + 'controls', + [ + 'label' => __('Player Controls'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'default' => 'yes', + 'condition' => [ + 'video_type!' => 'vimeo', + ], + ] + ); + + $this->addControl( + 'showinfo', + [ + 'label' => __('Video Info'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'default' => 'yes', + 'condition' => [ + 'video_type' => ['dailymotion'], + ], + ] + ); + + $this->addControl( + 'modestbranding', + [ + 'label' => __('Modest Branding'), + 'type' => ControlsManager::SWITCHER, + 'condition' => [ + 'video_type' => ['youtube'], + 'controls' => 'yes', + ], + ] + ); + + $this->addControl( + 'logo', + [ + 'label' => __('Logo'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'default' => 'yes', + 'condition' => [ + 'video_type' => ['dailymotion'], + ], + ] + ); + + $this->addControl( + 'color', + [ + 'label' => __('Controls Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'condition' => [ + 'video_type' => ['vimeo', 'dailymotion'], + ], + ] + ); + + // YouTube. + $this->addControl( + 'yt_privacy', + [ + 'label' => __('Privacy Mode'), + 'type' => ControlsManager::SWITCHER, + 'description' => __('When you turn on privacy mode, YouTube won\'t store information about visitors on your website unless they play the video.'), + 'condition' => [ + 'video_type' => 'youtube', + ], + ] + ); + + $this->addControl( + 'rel', + [ + 'label' => __('Suggested Videos'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Current Video Channel'), + 'yes' => __('Any Video'), + ], + 'condition' => [ + 'video_type' => 'youtube', + ], + ] + ); + + // Vimeo. + $this->addControl( + 'vimeo_title', + [ + 'label' => __('Intro Title'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'default' => 'yes', + 'condition' => [ + 'video_type' => 'vimeo', + ], + ] + ); + + $this->addControl( + 'vimeo_portrait', + [ + 'label' => __('Intro Portrait'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'default' => 'yes', + 'condition' => [ + 'video_type' => 'vimeo', + ], + ] + ); + + $this->addControl( + 'vimeo_byline', + [ + 'label' => __('Intro Byline'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'default' => 'yes', + 'condition' => [ + 'video_type' => 'vimeo', + ], + ] + ); + + $this->addControl( + 'download_button', + [ + 'label' => __('Download Button'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'condition' => [ + 'video_type' => 'hosted', + ], + ] + ); + + $this->addControl( + 'poster', + [ + 'label' => __('Poster'), + 'type' => ControlsManager::MEDIA, + 'condition' => [ + 'video_type' => 'hosted', + ], + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::HIDDEN, + 'default' => 'youtube', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_image_overlay', + [ + 'label' => __('Image Overlay'), + ] + ); + + $this->addControl( + 'show_image_overlay', + [ + 'label' => __('Image Overlay'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + ] + ); + + $this->addControl( + 'image_overlay', + [ + 'label' => __('Choose Image'), + 'type' => ControlsManager::MEDIA, + 'seo' => true, + 'default' => [ + 'url' => Utils::getPlaceholderImageSrc(), + ], + 'dynamic' => [ + 'active' => true, + ], + 'condition' => [ + 'show_image_overlay' => 'yes', + ], + ] + ); + + $this->addControl( + 'lazy_load', + [ + 'label' => __('Lazy Load'), + 'type' => ControlsManager::SWITCHER, + 'condition' => [ + 'show_image_overlay' => 'yes', + 'video_type!' => 'hosted', + ], + ] + ); + + $this->addControl( + 'show_play_icon', + [ + 'label' => __('Play Icon'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'condition' => [ + 'show_image_overlay' => 'yes', + 'image_overlay[url]!' => '', + ], + ] + ); + + $this->addControl( + 'lightbox', + [ + 'label' => __('Lightbox'), + 'type' => ControlsManager::SWITCHER, + 'frontend_available' => true, + 'label_off' => __('Off'), + 'label_on' => __('On'), + 'condition' => [ + 'show_image_overlay' => 'yes', + 'image_overlay[url]!' => '', + ], + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_video_style', + [ + 'label' => __('Video'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'aspect_ratio', + [ + 'label' => __('Aspect Ratio'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '169' => '16:9', + '219' => '21:9', + '43' => '4:3', + '32' => '3:2', + '11' => '1:1', + '916' => '9:16', + ], + 'default' => '169', + 'prefix_class' => 'elementor-aspect-ratio-', + 'frontend_available' => true, + ] + ); + + $this->addGroupControl( + GroupControlCssFilter::getType(), + [ + 'name' => 'css_filters', + 'selector' => '{{WRAPPER}} .elementor-wrapper', + ] + ); + + $this->addControl( + 'play_icon_title', + [ + 'label' => __('Play Icon'), + 'type' => ControlsManager::HEADING, + 'condition' => [ + 'show_image_overlay' => 'yes', + 'show_play_icon' => 'yes', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'play_icon_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-custom-embed-play i' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_image_overlay' => 'yes', + 'show_play_icon' => 'yes', + ], + ] + ); + + $this->addResponsiveControl( + 'play_icon_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 10, + 'max' => 300, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-custom-embed-play i' => 'font-size: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'show_image_overlay' => 'yes', + 'show_play_icon' => 'yes', + ], + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'play_icon_text_shadow', + 'selector' => '{{WRAPPER}} .elementor-custom-embed-play i', + 'fields_options' => [ + 'text_shadow_type' => [ + 'label' => _x('Shadow', 'Text Shadow Control'), + ], + ], + 'condition' => [ + 'show_image_overlay' => 'yes', + 'show_play_icon' => 'yes', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_lightbox_style', + [ + 'label' => __('Lightbox'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'show_image_overlay' => 'yes', + 'image_overlay[url]!' => '', + 'lightbox' => 'yes', + ], + ] + ); + + $this->addControl( + 'lightbox_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '#elementor-lightbox-{{ID}}' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'lightbox_ui_color', + [ + 'label' => __('UI Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '#elementor-lightbox-{{ID}} .dialog-lightbox-close-button' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'lightbox_ui_color_hover', + [ + 'label' => __('UI Hover Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '#elementor-lightbox-{{ID}} .dialog-lightbox-close-button:hover' => 'color: {{VALUE}}', + ], + 'separator' => 'after', + ] + ); + + $this->addControl( + 'lightbox_video_width', + [ + 'label' => __('Content Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'unit' => '%', + ], + 'range' => [ + '%' => [ + 'min' => 50, + ], + ], + 'selectors' => [ + '(desktop+)#elementor-lightbox-{{ID}} .elementor-video-container' => 'width: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'lightbox_content_position', + [ + 'label' => __('Content Position'), + 'type' => ControlsManager::SELECT, + 'frontend_available' => true, + 'options' => [ + '' => __('Center'), + 'top' => __('Top'), + ], + 'selectors' => [ + '#elementor-lightbox-{{ID}} .elementor-video-container' => '{{VALUE}}; transform: translateX(-50%);', + ], + 'selectors_dictionary' => [ + 'top' => 'top: 60px', + ], + ] + ); + + $this->addResponsiveControl( + 'lightbox_content_animation', + [ + 'label' => __('Entrance Animation'), + 'type' => ControlsManager::ANIMATION, + 'frontend_available' => true, + ] + ); + + $this->endControlsSection(); + } + + /** + * Render video widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 1.0.0 + * @access protected + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + $video_url = $settings[$settings['video_type'] . '_url']; + + if ('hosted' === $settings['video_type']) { + $video_url = $this->getHostedVideoUrl(); + } + + if (empty($video_url)) { + return; + } + + if ('hosted' === $settings['video_type']) { + ob_start(); + + $this->renderHostedVideo(); + + $video_html = ob_get_clean(); + } else { + $embed_params = $this->getEmbedParams(); + + $embed_options = $this->getEmbedOptions(); + + $video_html = Embed::getEmbedHtml($video_url, $embed_params, $embed_options); + } + + if (empty($video_html)) { + echo esc_url($video_url); + + return; + } + + $this->addRenderAttribute('video-wrapper', 'class', 'elementor-wrapper'); + + if (!$settings['lightbox']) { + $this->addRenderAttribute('video-wrapper', 'class', 'elementor-fit-aspect-ratio'); + } + + $this->addRenderAttribute('video-wrapper', [ + 'class' => 'elementor-open-' . ($settings['lightbox'] ? 'lightbox' : 'inline'), + ]); + ?> +
getRenderAttributeString('video-wrapper') ?>> + hasImageOverlay()) : + $this->addRenderAttribute('image-overlay', 'class', 'elementor-custom-embed-image-overlay'); + + if ($settings['lightbox']) { + if ('hosted' === $settings['video_type']) { + $lightbox_url = $video_url; + } else { + $lightbox_url = Embed::getEmbedUrl($video_url, $embed_params, $embed_options); + } + + $lightbox_options = [ + 'type' => 'video', + 'videoType' => $settings['video_type'], + 'url' => $lightbox_url, + 'modalOptions' => [ + 'id' => 'elementor-lightbox-' . $this->getId(), + 'entranceAnimation' => $settings['lightbox_content_animation'], + 'entranceAnimation_tablet' => $settings['lightbox_content_animation_tablet'], + 'entranceAnimation_mobile' => $settings['lightbox_content_animation_mobile'], + 'videoAspectRatio' => $settings['aspect_ratio'], + ], + ]; + + if ('hosted' === $settings['video_type']) { + $lightbox_options['videoParams'] = $this->getHostedParams(); + } + + $this->addRenderAttribute('image-overlay', [ + 'data-elementor-open-lightbox' => 'yes', + 'data-elementor-lightbox' => json_encode($lightbox_options), + ]); + + if (Plugin::$instance->editor->isEditMode()) { + $this->addRenderAttribute('image-overlay', [ + 'class' => 'elementor-clickable', + ]); + } + } + ?> +
getRenderAttributeString('image-overlay') ?>> + + +
+ + +
+ +
+ +
+ getSettingsForDisplay(); + + if ('hosted' !== $settings['video_type']) { + $url = $settings[$settings['video_type'] . '_url']; + } else { + $url = $this->getHostedVideoUrl(); + } + + echo esc_url($url); + } + + /** + * Get embed params. + * + * Retrieve video widget embed parameters. + * + * @since 1.5.0 + * @access public + * + * @return array Video embed parameters. + */ + public function getEmbedParams() + { + $settings = $this->getSettingsForDisplay(); + + $params = []; + + if ($settings['autoplay'] && !$this->hasImageOverlay()) { + $params['autoplay'] = '1'; + } + + $params_dictionary = []; + + if ('youtube' === $settings['video_type']) { + $params_dictionary = [ + 'loop', + 'controls', + 'mute', + 'rel', + 'modestbranding', + ]; + + if ($settings['loop']) { + $video_properties = Embed::getVideoProperties($settings['youtube_url']); + + $params['playlist'] = $video_properties['video_id']; + } + + $params['start'] = $settings['start']; + + $params['end'] = $settings['end']; + + $params['wmode'] = 'opaque'; + } elseif ('vimeo' === $settings['video_type']) { + $params_dictionary = [ + 'loop', + 'mute' => 'muted', + 'vimeo_title' => 'title', + 'vimeo_portrait' => 'portrait', + 'vimeo_byline' => 'byline', + ]; + + $params['color'] = str_replace('#', '', $settings['color']); + + $params['autopause'] = '0'; + } elseif ('dailymotion' === $settings['video_type']) { + $params_dictionary = [ + 'controls', + 'mute', + 'showinfo' => 'ui-start-screen-info', + 'logo' => 'ui-logo', + ]; + + $params['ui-highlight'] = str_replace('#', '', $settings['color']); + + $params['start'] = $settings['start']; + + $params['endscreen-enable'] = '0'; + } + + foreach ($params_dictionary as $key => $param_name) { + $setting_name = $param_name; + + if (is_string($key)) { + $setting_name = $key; + } + + $setting_value = $settings[$setting_name] ? '1' : '0'; + + $params[$param_name] = $setting_value; + } + + return $params; + } + + /** + * Whether the video widget has an overlay image or not. + * + * Used to determine whether an overlay image was set for the video. + * + * @since 1.0.0 + * @access protected + * + * @return bool Whether an image overlay was set for the video. + */ + protected function hasImageOverlay() + { + $settings = $this->getSettingsForDisplay(); + + return !empty($settings['image_overlay']['url']) && 'yes' === $settings['show_image_overlay']; + } + + /** + * @since 2.1.0 + * @access private + */ + private function getEmbedOptions() + { + $settings = $this->getSettingsForDisplay(); + + $embed_options = []; + + if ('youtube' === $settings['video_type']) { + $embed_options['privacy'] = $settings['yt_privacy']; + } elseif ('vimeo' === $settings['video_type']) { + $embed_options['start'] = $settings['start']; + } + + $embed_options['lazy_load'] = !empty($settings['lazy_load']); + + return $embed_options; + } + + /** + * @since 2.1.0 + * @access private + */ + private function getHostedParams() + { + $settings = $this->getSettingsForDisplay(); + + $video_params = []; + + foreach (['autoplay', 'loop', 'controls'] as $option_name) { + if ($settings[$option_name]) { + $video_params[$option_name] = ''; + } + } + + if ($settings['mute']) { + $video_params['muted'] = 'muted'; + } + + if (!$settings['download_button']) { + $video_params['controlsList'] = 'nodownload'; + } + + if ($settings['poster']['url']) { + $video_params['poster'] = $settings['poster']['url']; + } + + return $video_params; + } + + /** + * @param bool $from_media + * + * @return string + * @since 2.1.0 + * @access private + */ + private function getHostedVideoUrl() + { + $settings = $this->getSettingsForDisplay(); + + if (!empty($settings['insert_url'])) { + $video_url = $settings['external_url']['url']; + } else { + $video_url = $settings['hosted_url']['url']; + } + + if (empty($video_url)) { + return ''; + } + + if ($settings['start'] || $settings['end']) { + $video_url .= '#t='; + } + + if ($settings['start']) { + $video_url .= $settings['start']; + } + + if ($settings['end']) { + $video_url .= ',' . $settings['end']; + } + + return $video_url; + } + + /** + * + * @since 2.1.0 + * @access private + */ + private function renderHostedVideo() + { + $video_url = $this->getHostedVideoUrl(); + + if (empty($video_url)) { + return; + } + + $video_params = $this->getHostedParams(); + ?> + + py?UPdzwd|V{oluN-@olVuj~9>%a{9(p}sa3yAV4a9UT|;vWD@|i1_ug zG8}yw1Na7yhSL;H3yKNJiQ2U9aYq6F5oMug z2*8lYcz}Wo9P9v zfdU?#$T+$>B5_Via3#E=Js9T*hk&7q@(N&k1Of_ng4^Tp3J5p^21Wd_^KX0vT2UT> z)4y~oG0Ea>}6_gMP>VLRcq89~6bin`d?Rw<PmDZ`FfrIm7#wwtbr%H`rsY4$Rq;b?+_zh|HZwA zItH!;gQ{yGl+=%;BhWB3R7)Ns2Uk>rz%}4Xz~5ZQe+k=fF6RH`${vZ4{Z$|Tr(XVS z9TnlP>3^#KXz`!^!4r>~hJ4f=p~_DZ>FBt%uo`GnzlkAB9qKtVe$>r8ul0kS?$Xea z0pMU^J}VQwh|6~nNa!RB(sQQI<+6M%r8r50w@8jf_kLpLi@pkzIFJjILp11x_H8Yu zeQ)0l?~e6qucm{Wm0wn!Ik{t1Dzk5{n&nJ52anjeUu8T|QgmyA_#t3zZP$dfuH4Y* z=T%EwFAHb6IV6AyOFy|}7FauZT#fF>$OTEdoqF2dM@CS)AV9nZ*hfF=+%R8NC8k2# zO}YptUbPxi{L>NNApzefOdp!ct5!^7rL@5ljrf*J>NHxoGYl*&vp?KQ%vo!Bx$vKKXqCX35}|T z8Mkx!=OsUMSiREOOm3(eG5Gmi=lbY{~z7oIu`>U?vReF z1nm|$gDd)y0y;oIUE?@{X8ZFW;)^aT{uP^XZQb2wZmnEZdjTBCbquW1R@(urRZux? z{zb|AbGYpcDdOi^2W55=W1!=L&jW4p8}Q$#md@yl0T#!p$)=qRu^w~Fha3sCK3b~V zFh4)aDunOm1I?t!$7_Nw-YqTbCsMzcto1oJVF$e{BM_b3+Xkr$ODuilm%Q@3KiAtg zM!FhEX&edd`mG0Tn068G*7W%_u9Ip;>(8{fj3H|^wERrL9^wmT#9c*ZZu!=}5IU{! z$^ItLoISfcO0p?<$9mjl%vohmu$HKV$ zP8XmngqSxH`{_{;Z?hN_a&r#1&PI*pM{YBBZF9k5m9=|NI$E%->&v;4-Oq+&>8Q zEx7RnxEb^DtUG27)X)jlcG7+TY%4G@up-wXe%&f3F%A)e!CQUC8f&c~Otnk%O^R}>(rn(vZ=V0%zIO)kOg3L#z{_@MQpof8s|Pu$WsIc`#2!u?6k zqnPTgr`LN%%egkUHj`m>| zrB(p~uSA)t0bfdsn`A`&@p*^J)3p1b6iYfsj;<1r_;87S73bT|SMmvLBCf3ty+WEA z?-!Ov+n_}`;V#OhtSs{8$^~U$E(SGeu;9DJo{XDskThEM25kE}dM_*wnP_xoL-4^U zvn@I9S#}tzGHW&2wRq`OsvV(3YM0Fp>SHMe?0TBMpd9V!&2nAuIi7N@u$Ptq@p^fR zzA?UJ%@SYv)|MQam?QkKJRN@Fqej$hWNCHS?eB7gVToFMGjiu(yo9g>S6Q?5sSnZ2 zxeUr&drdZzVNV1fHuW~!Z8t9oEM<$NpRJF3`FFr?V@*yx5srkQzr_HsiSZ z_DL4i<=Z+VRc8WAPLV>BS9lhA6gRkwm6~n}>JT_lNIfq+FvXd< zkJG5_+GGI8q)uHW+{We7`+40&-KHs7y)k9y9ib5(J>kH$r^{%nw)pW*_;_+sy(uzJ z-Ia3wVJb+%A{mipWWNwG$T-^e(CDD90=gKdBA8#(mwKr1CMx$NAHmi1raXeDG)vGJ z9ce%nveVTcw)RLo4?Nyde?p&sZM?KC31KNvTbU5MT*%EMpf0yS6`-wJ2n{28MlwK6 zjjMKi6?$7~(ocu6SrEQMV?ugl#XB*Ej9Mm>TX$kB`ah~D#SHHuyB^*c&KHRe^D7%g0U1{{$hQ_En4?-^?pN3iKv_$pH`m`4 zYH!R)e`2UiN5vhhog^A>lf*vIg4;~R2rQ4;<8N2 zL_Z06fBGKJdz+pVCZfYQ_FZx$L;F|z^Xyz43&Dt7Xb1~x+d8Mb5aUt1`^@QG-iAx6 zxh%$P@TC`qzq?@b>|QE>=i)YxgfOa(?qh0Sg*-pA@s=qeqy(2{TAJUd!sIy_&D43> zB=6i6jjSPnFO6#8@sTR*Xwz8Ui}D3DbphOP4jL!L*(Y}FSw43_;u9X~VI zH5}B9xRNQ^r6!+-8SLt5@Bp&OhKI^WY*&msA>d5RA6N`U=9y$9dX+T`suWhAVl)Hj zYyIr(BDG!@Znu9Iq4ykOM;((PVkYRKZ`5(|ovywd6VU&F;QT)}4ayaT7fnDOdWS801Vz8Sugx{`lJS&{a+y`al zkJBB2Sj=i>N_39-WZ!K#Ib*lXS+gjsDswgx)@hL@&d+IZdpY0DylLja#c#nEqr$?9 zGPefR7EYcC^R46~km~{lzC+zvvrQ--tG3%VYX+58`qnxcd_TpFi_SUDHl%YFPPt zX1L%kYuNFZpNwXaI&8;2L^`b2O{ZFLBdxyJ*X@_zI}M9cHM&zI~=2~8826r83 z{_5xnqB0nqxr~x57R}0E)aMeAkZi61a{u*;8$P_7(yZwWe!j*lHf+;4OP^61_@n<%>0q^`AVlp88tiqAIqzVqL6nyg7Tw$h$TGR{BvlQRpkc26lnK3Qe7t^2x zvr3H6{#^-b`}vR?T75$Wp>GcaQAKw|BX)TPUn)2i5`eLh<>Aguc{Kvy5Gfma#FhCN zlkCCzEz`vDHcnMa4AqRb=RcmcZP3fa$^RuqIwoFC>1Lv*adt6GXAF5&rUB4<+pR>L zq|v8X_-v2!+i45*g@}5H(Iy4l9YU55l05qelKxHHYf)YrcI-l4^Tp`7YQ>Cf66h4e zk80OO{c;oOdl|y@Cq?bWbbcyuRqV z_Pj0b$y1`wYjKut9B;Sn;eEd2jpHv&uq-l`3Cmh);3+&UdTSxy@%}>%!LsZtp0xTa zs2eXV(yE@mP6ji+RBh(DlXQ%mBoJbPa*mzqDiecAc|3e!yHC8(z$V@I>8seGTEE#| zr{f$GW4GoSUj#rmOysP+^=RJ?mRFAJ?yYV+do@h@im7a^ z?jB4xX4q0v%~g2T%lI+srv?t;RL`!WHn!w2aOID4+}0h;_JDKq!sm0_l*^jX{`_P2 z+V&PYYLp`$O|$vl+Bd|fire@G?s^3d#JqV_mg^y#cm7njxzRO3+XIrK8D6)k{w0 z9}Q6jw!-mv?JunN{Ll2lZoUA`_wR)K8p%)-VriNH0RI2}FiV?v|3hNua|bB6y;|&- zfujAB1%*5m49N>vefuCJa*ejkZCKimvh*ED5)ke5G_U?8p}D&%wS#Q+J!$BfNln2c zfBO!nd@dJP_m=<_4xnb{=VR)K7ZGg4_2I0SRP_30nrQ<`1tjdVDbR#EXr!Z!M?J&) z&t>)rhDpta^}w4z)R)dNWdV~;`h3s@>TA&AHu~@}VS720yqS-6@_~Zs_y7LT zkLPfG^QYgtsH@2h7mHlMSFUn{*ag6ngnJDS=KfVL-NiBAuKcQByGjsU$Dcps|LcDu zzUmk*T%&<)%|=m-x=Yy2&)1Pz0}glJCVe%U@Y;UREcyPb_v3jL2gZK>mC%|(wDE71 z3HN$Q2I3JbSrh6n$if51R*Kt`ngAg-hso2{ow*Qk6_3+oLeF*1@!~x%!7kOUqx#Rb z30PkmB{e>fpZXv7!%{7ygrh)q3JKZ1ry|4D= zlm0t?X(PyLu>D%1{dueBfqpZDAru^)1JlN;$xSr}#HHTfI284;NJV&3N;%?0;B)7X z)6q2Utu&539F9dlH=lPai3-s5ZW46qkU1A^Hf>+nG0bb$7fGU;nVK>MDd@m@mzi#JUqI?R7U-q#@sn*h-APH}M6X@tm< Y`dG#Q0{n+jRc~fjY$1l}C603d0JXlfbN~PV literal 0 HcmV?d00001 diff --git a/modules/creativeelements/modifications.txt b/modules/creativeelements/modifications.txt new file mode 100644 index 00000000..e8a4c0c6 --- /dev/null +++ b/modules/creativeelements/modifications.txt @@ -0,0 +1,15 @@ +1. ############ disabled code because of unability to import templates automatically + +file: /core/base/document.php + +461: //if (!$this->isEditableByCurrentUser()) { +462: // return false; +463: //} + + +2. ########### change export file name + +file: /includes/template-library/sources/local.php + +794: 'name' => $post->post_title. '.json', + diff --git a/modules/creativeelements/modules/catalog/controls/index.php b/modules/creativeelements/modules/catalog/controls/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/modules/catalog/controls/index.php @@ -0,0 +1,8 @@ +language->id; + + foreach (\Category::getSimpleCategories($id_lang) as &$category) { + self::$_categories[$category['id_category']] = "#{$category['id_category']} {$category['name']}"; + } + } + return self::$_categories; + } + + protected function getDefaultSettings() + { + return [ + 'options' => self::getCategories(), + 'multiple' => false, + 'select2options' => [], + 'extend' => [], + ]; + } + + public function contentTemplate() + { + echo '<# $.extend( data.options, data.extend ) #>'; + + parent::contentTemplate(); + } +} diff --git a/modules/creativeelements/modules/catalog/controls/select-manufacturer.php b/modules/creativeelements/modules/catalog/controls/select-manufacturer.php new file mode 100644 index 00000000..e846ff8b --- /dev/null +++ b/modules/creativeelements/modules/catalog/controls/select-manufacturer.php @@ -0,0 +1,54 @@ +language->id; + + foreach (\Manufacturer::getLiteManufacturersList($id_lang) as &$manufacturer) { + self::$_manufacturers[$manufacturer['id']] = "#{$manufacturer['id']} {$manufacturer['name']}"; + } + } + return self::$_manufacturers ?: []; + } + + protected function getDefaultSettings() + { + return [ + 'options' => self::getManufacturers(), + 'multiple' => false, + 'select2options' => [], + 'extend' => [], + ]; + } + + public function contentTemplate() + { + echo '<# $.extend( data.options, data.extend ) #>'; + + parent::contentTemplate(); + } +} diff --git a/modules/creativeelements/modules/catalog/controls/select-supplier.php b/modules/creativeelements/modules/catalog/controls/select-supplier.php new file mode 100644 index 00000000..bcdc7c09 --- /dev/null +++ b/modules/creativeelements/modules/catalog/controls/select-supplier.php @@ -0,0 +1,54 @@ +language->id; + + foreach (\Supplier::getLiteSuppliersList($id_lang) as &$supplier) { + self::$_suppliers[$supplier['id']] = "#{$supplier['id']} {$supplier['name']}"; + } + } + return self::$_suppliers ?: []; + } + + protected function getDefaultSettings() + { + return [ + 'options' => self::getSuppliers(), + 'multiple' => false, + 'select2options' => [], + 'extend' => [], + ]; + } + + public function contentTemplate() + { + echo '<# $.extend( data.options, data.extend ) #>'; + + parent::contentTemplate(); + } +} diff --git a/modules/creativeelements/modules/catalog/files/css/index.php b/modules/creativeelements/modules/catalog/files/css/index.php new file mode 100644 index 00000000..3c7ee38b --- /dev/null +++ b/modules/creativeelements/modules/catalog/files/css/index.php @@ -0,0 +1,8 @@ +forceInline = $forceInline; + + parent::__construct($post_id); + } + + public function enqueue() + { + Base::enqueue(); + + if ($this->forceInline) { + $this->printCss(); + } + } + + public function getMeta($property = null) + { + if (!$this->forceInline) { + return parent::getMeta($property); + } + + // Parse CSS first, to get the fonts list. + $css = $this->getContent(); + + $meta = [ + 'status' => self::CSS_STATUS_INLINE, + 'fonts' => $this->getFonts(), + 'css' => $css, + ]; + + if ($property) { + return isset($meta[$property]) ? $meta[$property] : null; + } + + return $meta; + } + + protected function parseContent() + { + if (!class_exists('CE\WidgetProductMiniatureName')) { + $catalog = Plugin::$instance->modules_manager->getModules('catalog'); + + $catalog->initWidgets(Plugin::$instance->widgets_manager, 'miniature'); + } + + return parent::parseContent(); + } +} diff --git a/modules/creativeelements/modules/catalog/files/index.php b/modules/creativeelements/modules/catalog/files/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/modules/catalog/files/index.php @@ -0,0 +1,8 @@ +unregisterWidgetType('product-description'); + $manager->unregisterWidgetType('product-description-short'); + $manager->unregisterWidgetType('product-quantity'); + $manager->unregisterWidgetType('product-box'); + $manager->unregisterWidgetType('product-grid'); + $manager->unregisterWidgetType('product-carousel'); + }); + + \CreativeElements::renderTheme( + new UId($id_ce_theme, UId::THEME, $context->language->id, $context->shop->id) + ); + } + } + + public function registerControls($controls_manager) + { + $controls_manager->registerControl(SelectCategory::CONTROL_TYPE, new SelectCategory()); + $controls_manager->registerControl(SelectManufacturer::CONTROL_TYPE, new SelectManufacturer()); + $controls_manager->registerControl(SelectSupplier::CONTROL_TYPE, new SelectSupplier()); + } + + public function getProductWidgets() + { + return [ + 'product-name', + 'product-badges', + 'product-images', + 'product-image', + 'product-price', + 'product-rating', + 'product-meta', + 'product-description-short', + 'product-variants', + 'product-stock', + 'product-quantity', + 'product-add-to-cart', + 'product-description', + 'product-add-to-wishlist', + 'product-features', + 'product-attachments', + 'product-sale-countdown', + 'manufacturer-image', + 'product-brand-image', + 'product-share', + 'product-block', + ]; + } + + public function getProductMiniatureWidgets() + { + Plugin::$instance->widgets_manager->unregisterWidgetType('product-box'); + Plugin::$instance->widgets_manager->unregisterWidgetType('product-grid'); + Plugin::$instance->widgets_manager->unregisterWidgetType('product-carousel'); + + add_action('elementor/element/common/_section_transform/after_section_end', function (ControlsStack $element) { + $element->updateControl( + '_transform_trigger_hover', + [ + 'options' => [ + '' => __('Widget'), + 'column' => __('Column'), + 'section' => __('Section'), + 'miniature' => __('Miniature'), + ], + ] + ); + }); + + return [ + 'product-miniature-name', + 'product-badges', + 'product-miniature-image', + 'product-miniature-price', + 'product-miniature-rating', + 'product-sale-countdown', + 'manufacturer-image', + 'product-meta', + 'product-description-short', + 'product-miniature-variants', + 'product-stock', + 'product-miniature-add-to-cart', + 'product-features', + 'product-add-to-wishlist', + 'product-share', + 'product-miniature-box', + ]; + } + + public function initWidgets($widgets_manager, $force = false) + { + if (!$this->shouldRegister() && !$force) { + return; + } + + if ('all' === $force) { + $widgets = array_merge($this->getProductWidgets(), $this->getProductMiniatureWidgets()); + } else { + $widgets = 'miniature' === $force || $this->document && $this->document->getTemplateType() === 'product-miniature' + ? $this->getProductMiniatureWidgets() + : $this->getProductWidgets() + ; + } + + foreach ($widgets as &$widget) { + $class_name = str_replace('-', '', $widget); + $class_name = __NAMESPACE__ . '\Widget' . $class_name; + + if (class_exists($class_name)) { + continue; + } + + include dirname(__FILE__) . "/widgets/$widget.php"; + + $widgets_manager->registerWidgetType(new $class_name()); + } + } + + public function registerTags() + { + $dynamic_tags = Plugin::$instance->dynamic_tags; + $dynamic_tags->registerTag('CE\ModulesXCatalogXTagsXProductAddToCart'); + $dynamic_tags->registerTag('CE\ModulesXCatalogXTagsXProductBuyNow'); + $dynamic_tags->registerTag('CE\ModulesXCatalogXTagsXProductQuickView'); + $dynamic_tags->registerTag('CE\ModulesXCatalogXTagsXCartRuleDateTime'); + $dynamic_tags->registerTag('CE\ModulesXCatalogXTagsXSpecificPriceRuleDateTime'); + + if (!$this->shouldRegister()) { + return; + } + + $tags = [ + 'ProductName', + 'ProductUrl', + 'ProductImage', + // 'ProductGallery', + 'ProductPrice', + 'ProductRating', + 'ProductMeta', + // 'ProductStock', + // 'ProductTerms', + 'ProductDescriptionShort', + 'ProductAvailabilityDateTime', + // 'CategoryImage', + 'CategoryName', + 'CategoryUrl', + 'ManufacturerName', + 'ManufacturerUrl', + 'ManufacturerImage', + ]; + + foreach ($tags as $tag) { + $dynamic_tags->registerTag('CE\ModulesXCatalogXTagsX' . $tag); + } + + if ($this->document && $this->document->getTemplateType() === 'product-miniature') { + $dynamic_tags->unregisterTag('shortcode'); + } + } + + private function shouldRegister() + { + static $should_register; + + if (null === $should_register) { + if (!$uid = \CreativeElements::getPreviewUId(false) ?: get_the_ID()) { + return $should_register = false; + } + $should_register = \Tools::getIsset('submitOptionsce_template') || + UId::PRODUCT === $uid->id_type && \Configuration::get('CE_PRODUCT') || + UId::CONTENT === $uid->id_type && \Configuration::get('CE_PRODUCT') && \Tools::getValue('footerProduct') || + in_array($uid->id_type, [UId::THEME, UId::TEMPLATE]) && ( + $this->document = Plugin::$instance->documents->get($uid) + ) instanceof ProductDocument; + } + return $should_register; + } + + public function refreshProduct($content) + { + if (UId::$_ID->id_type !== UId::THEME) { + return $content; + } + + $context = \Context::getContext(); + $id_product = (int) \Tools::getValue('id_product'); + $groups = \Tools::getValue('group'); + $getIPA = version_compare(_PS_VERSION_, '1.7.3.1', '<') + ? 'getIdProductAttributesByIdAttributes' + : 'getIdProductAttributeByIdAttributes'; + $ipa = $groups ? (int) call_user_func("Product::$getIPA", $id_product, $groups, true) : null; + $product = new \Product($id_product, false, $context->language->id, $context->shop->id); + $product_url = $context->link->getProductLink($product, null, null, null, null, null, $ipa, false, false, true); + $args = ${'_GET'}; + unset( + $args['controller'], + $args['id_product'], + $args['id_product_attribute'], + $args['rewrite'], + $args['isolang'], + $args['id_lang'] + ); + $getProductMinimalQuantity = new \ReflectionMethod($context->controller, 'getProductMinimalQuantity'); + $getProductMinimalQuantity->setAccessible(true); + + wp_send_json([ + 'product_content' => $content, + 'product_url' => !$args ? $product_url : str_replace( + '#', + (strrpos('?', $product_url) === false ? '?' : '&') . http_build_query($args) . '#', + $product_url + ), + 'product_minimal_quantity' => (int) $getProductMinimalQuantity->invoke($context->controller, [ + 'id_product_attribute' => $ipa, + ]), + 'id_product_attribute' => $ipa, + 'product_title' => $product->name, + 'is_quick_view' => \Tools::getValue('quickview'), + ]); + } + + public function handleProductQuickView() + { + add_filter('template_include', function () { + return _CE_TEMPLATES_ . 'front/theme/layouts/layout-canvas.tpl'; + }, 12); + + add_action('wp_footer', function () { + ?> + + + + \w+)*(\s+nofilter)?|' . + '(hook|widget|include)(\s+\w+\s*=\s*("(\\\\.|[^"])*"|\'(\\\\.|[^\'])*\'|\$\w+(\.\w+)*|\w+))+' . + ')\s*}$/s', + $match[0] + ) ? $match[0] : str_replace('{', '{', $match[0]); + } + + private static function filterElementsData(array &$data) + { + foreach ($data as &$value) { + if (!$value) { + continue; + } elseif (is_array($value)) { + self::filterElementsData($value); + } elseif (is_string($value) && strrpos($value, '}') !== false) { + $value = preg_replace_callback('/{\S[^}]*}?/', [__CLASS__, 'filterSmartyCallback'], $value); + } + } + } + + public function afterSaveDocument($document, array $data) + { + if ('publish' === $data['settings']['post_status'] && + 'product-miniature' === $document->getTemplateType() && + UID::THEME === get_the_ID()->id_type + ) { + $elements_data = $data['elements']; + self::filterElementsData($elements_data); + + $orig_id = $document->getMainId(); + $uid = UId::parse($orig_id); + $main_id = &\Closure::bind(function &() { + return ${'this'}->main_id; + }, $document, 'CE\CoreXBaseXDocument')->__invoke(); + + add_action('elementor/element/after_add_attributes', function ($element) { + $settings = $element->getRenderAttributes('_wrapper', 'data-settings'); + + if ($settings && strrpos($settings[0], '}') !== false) { + $element->setRenderAttribute('_wrapper', 'data-settings', "{literal}$settings[0]{/literal}"); + } + }); + \Closure::bind(function () { + WidgetBase::$render_method = 'renderSmarty'; + }, null, 'CE\WidgetBase')->__invoke(); + \Closure::bind(function () { + CoreXDynamicTagsXTag::$render_method = 'renderSmarty'; + }, null, 'CE\CoreXDynamicTagsXTag')->__invoke(); + \Closure::bind(function () { + CoreXDynamicTagsXDataTag::$getter_method = 'getSmartyValue'; + }, null, 'CE\CoreXDynamicTagsXDataTag')->__invoke(); + + foreach (\Shop::getContextListShopID() as $id_shop) { + $uid->id_shop = $id_shop; + $main_id = (string) $uid; + + ob_start(); + $document->printSmartyElementsWithWrapper($elements_data); + file_put_contents( + _CE_TEMPLATES_ . "front/theme/catalog/_partials/miniatures/product-$main_id.tpl", + ob_get_clean() + ); + $post_css = new PostCSS($uid); + $post_css->update(); + } + $main_id = $orig_id; + } + return $data; + } + + public function __construct() + { + is_admin() or add_action('template_redirect', [$this, 'init'], 1); + + add_action('elementor/controls/controls_registered', [$this, 'registerControls']); + add_action('elementor/widgets/widgets_registered', [$this, 'initWidgets']); + add_action('elementor/dynamic_tags/register_tags', [$this, 'registerTags']); + add_action('ce/css-file/global/before_render', function () { + $widgets_manager = Plugin::$instance->widgets_manager; + // init widgets if needed + $widgets_manager->getWidgetTypes(); + + ${'this'}->initWidgets($widgets_manager, 'all'); + }); + + if (\Tools::getValue('refresh') === 'product' && + \Context::getContext()->controller instanceof \ProductController + ) { + add_filter('the_content', [$this, 'refreshProduct'], 999999); + } + + if (Utils::isAjax()) { + add_action('elementor/document/after_save', [$this, 'afterSaveDocument']); + } + } +} diff --git a/modules/creativeelements/modules/catalog/tags/cart-rule-date-time.php b/modules/creativeelements/modules/catalog/tags/cart-rule-date-time.php new file mode 100644 index 00000000..37d08b28 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/cart-rule-date-time.php @@ -0,0 +1,106 @@ +language->id; + $inner_join_shop = \Shop::addSqlAssociation('cart_rule', 'a'); + $rows = \Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(" + SELECT a.`id_cart_rule`, b.`name` FROM `$table` a $inner_join_shop + LEFT JOIN `{$table}_lang` b ON b.`id_cart_rule` = a.`id_cart_rule` AND b.`id_lang` = $id_lang + WHERE a.`active` = 1 + "); + if ($rows) { + foreach ($rows as &$row) { + $opts[$row['id_cart_rule']] = "#{$row['id_cart_rule']} {$row['name']}"; + } + } + return $opts; + } + + protected function _registerControls() + { + $this->addControl( + 'id_cart_rule', + [ + 'label' => __('Cart Rule'), + 'type' => ControlsManager::SELECT2, + 'label_block' => true, + 'select2options' => [ + 'placeholder' => __('Select...'), + ], + 'options' => is_admin() ? $this->getCartRuleOptions() : [], + ] + ); + + $this->addControl( + 'date', + [ + 'label' => __('Date'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'from' => __('From'), + 'to' => __('To'), + ], + 'default' => 'to', + ] + ); + } + + public function getValue(array $options = []) + { + $settings = $this->getSettings(); + $cr = new \CartRule($settings['id_cart_rule'], \Context::getContext()->language->id); + + return $cr->{"date_{$settings['date']}"}; + } + + protected function getSmartyValue(array $options = []) + { + $settings = $this->getSettings(); + + return "{\$cr = ce_new(CartRule, {$settings['id_cart_rule']}, \$language.id)}{\$cr->date_{$settings['date']}}"; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/category-name.php b/modules/creativeelements/modules/catalog/tags/category-name.php new file mode 100644 index 00000000..ee676e53 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/category-name.php @@ -0,0 +1,50 @@ +smarty->tpl_vars['product']->value['category_name']; + } + + protected function renderSmarty() + { + echo '{$product.category_name}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/category-url.php b/modules/creativeelements/modules/catalog/tags/category-url.php new file mode 100644 index 00000000..0ef26fa3 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/category-url.php @@ -0,0 +1,53 @@ +smarty->tpl_vars['product']->value['id_category_default']; + + return $id_category ? $context->link->getCategoryLink(new \Category($id_category, $context->language->id)) : ''; + } + + protected function getSmartyValue(array $options = []) + { + return '{if $product.id_category_default}{url entity=category id=$product.id_category_default}{/if}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/index.php b/modules/creativeelements/modules/catalog/tags/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/index.php @@ -0,0 +1,8 @@ +addControl( + 'image_size', + [ + 'label' => __('Image Size'), + 'type' => ControlsManager::SELECT, + 'options' => GroupControlImageSize::getAllImageSizes('manufacturers', true), + ] + ); + } + + public function getValue(array $options = []) + { + $context = \Context::getContext(); + $vars = $context->smarty->tpl_vars; + $id_manufacturer = isset($vars['product']) ? $vars['product']->value['id_manufacturer'] : ( + isset($vars['manufacturer']) ? $vars['manufacturer']->value->id : 0 + ); + + return [ + 'id' => '', + 'url' => $id_manufacturer + ? $context->link->getManufacturerImageLink($id_manufacturer, $this->getSettings('image_size')) + : '', + 'alt' => __('Brand'), + ]; + } + + protected function getSmartyValue(array $options = []) + { + $image_size = $this->getSettings('image_size') ?: 'null'; + + return [ + 'id' => '', + // tmp fix: Absolute URLs need to be marked with {*://*} + 'url' => '{*://*}' . + '{if $product.id_manufacturer}' . + "{call_user_func([\$link, getManufacturerImageLink], \$product.id_manufacturer, $image_size)}" . + '{else}' . + 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGhlaWdodD0nMCcvPg' . + '{/if}', + 'alt' => __('Brand'), + ]; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/manufacturer-name.php b/modules/creativeelements/modules/catalog/tags/manufacturer-name.php new file mode 100644 index 00000000..b650ca0b --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/manufacturer-name.php @@ -0,0 +1,58 @@ +smarty->tpl_vars; + + echo isset($vars['product_manufacturer']) ? $vars['product_manufacturer']->value->name : ( + isset($vars['manufacturer']) ? $vars['manufacturer']->value->name : '' + ); + } + + protected function renderSmarty() + { + echo + '{if $product.id_manufacturer}' . + '{$ce_brand = ce_new(Manufacturer, $product.id_manufacturer, $language.id)}' . + '{$ce_brand->name}' . + '{/if}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/manufacturer-url.php b/modules/creativeelements/modules/catalog/tags/manufacturer-url.php new file mode 100644 index 00000000..7dddf87d --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/manufacturer-url.php @@ -0,0 +1,57 @@ +smarty->tpl_vars; + + return isset($vars['product_brand_url']) ? $vars['product_brand_url']->value : ''; + } + + protected function getSmartyValue(array $options = []) + { + return + '{if $product.id_manufacturer}' . + '{call_user_func([$link, getManufacturerLink], $product.id_manufacturer)}' . + '{else}' . + 'javascript:;' . + '{/if}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-add-to-cart.php b/modules/creativeelements/modules/catalog/tags/product-add-to-cart.php new file mode 100644 index 00000000..7e3c221d --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-add-to-cart.php @@ -0,0 +1,69 @@ +addControl( + 'id_product', + [ + 'label' => __('Product'), + 'type' => ControlsManager::SELECT2, + 'label_block' => true, + 'select2options' => [ + 'placeholder' => __('Current Product'), + 'product' => true, + 'ajax' => [ + 'url' => Helper::getAjaxProductsListLink(), + ], + ], + ] + ); + } + + public function getValue(array $options = []) + { + $settings = $this->getSettings(); + + if (!$settings['id_product']) { + unset($settings['id_product']); + } + return Module::createActionUrl(static::ACTION, $settings); + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-availability-date-time.php b/modules/creativeelements/modules/catalog/tags/product-availability-date-time.php new file mode 100644 index 00000000..d18f12c8 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-availability-date-time.php @@ -0,0 +1,52 @@ +smarty->tpl_vars['product']->value; + + return $product['availability_date']; + } + + protected function getSmartyValue(array $options = []) + { + return '{$product.availability_date}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-buy-now.php b/modules/creativeelements/modules/catalog/tags/product-buy-now.php new file mode 100644 index 00000000..65bb93e5 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-buy-now.php @@ -0,0 +1,29 @@ +smarty->tpl_vars['product']->value['description_short']); + } + + protected function renderSmarty() + { + echo '{$product.description_short|strip_tags:0}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-image.php b/modules/creativeelements/modules/catalog/tags/product-image.php new file mode 100644 index 00000000..ad405983 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-image.php @@ -0,0 +1,107 @@ +addControl( + 'image_size', + [ + 'label' => __('Image Size'), + 'type' => ControlsManager::SELECT, + 'options' => &$image_size_options, + 'default' => key($image_size_options), + ] + ); + } + + protected function registerAdvancedSection() + { + $this->startControlsSection( + 'advanced', + [ + 'label' => __('Advanced'), + ] + ); + + $this->addControl( + 'fallback_image', + [ + 'label' => __('Fallback'), + 'type' => ControlsManager::MEDIA, + ] + ); + + $this->endControlsSection(); + } + + public function getValue(array $options = []) + { + $product = \Context::getContext()->smarty->tpl_vars['product']->value; + + return empty($product['cover']) ? $this->getSettings('fallback_image') : [ + 'id' => '', + 'url' => $product['cover']['bySize'][$this->getSettings('image_size')]['url'], + 'alt' => $product['cover']['legend'], + ]; + } + + protected function getSmartyValue(array $options = []) + { + $image_size = $this->getSettings('image_size'); + $fallback = $this->getSettings('fallback_image'); + + return [ + 'id' => '', + // tmp fix: Absolute URLs need to be marked with {*://*} + 'url' => '{*://*}' . + '{if product.cover}' . + "{\$product.cover.bySize.$image_size.url}" . + (empty($fallback['url']) ? '' : '{else}' . + // Generate absolute URL for fallback image + '//{Tools::getMediaServer($product.id_product)}{$smarty.const.__PS_BASE_URI__}' . + $fallback['url'] + ) . + '{/if}', + 'alt' => '{if $product.cover}{$product.cover.legend}{/if}', + ]; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-meta.php b/modules/creativeelements/modules/catalog/tags/product-meta.php new file mode 100644 index 00000000..af11e479 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-meta.php @@ -0,0 +1,162 @@ +addControl( + 'type', + [ + 'label' => __('Field'), + 'type' => ControlsManager::SELECT, + 'groups' => [ + 'category' => __('Category'), + 'manufacturer' => __('Brand'), + // 'tags' => __('Tags'), + 'delivery' => __('Delivery Time'), + 'quantity' => __('Quantity'), + 'availability_date' => __('Availability Date'), + 'condition' => __('Condition'), + 'references' => [ + 'label' => __('References'), + 'options' => [ + 'reference' => __('SKU'), + 'isbn' => __('ISBN'), + 'ean13' => __('EAN-13'), + 'upc' => __('UPC'), + 'mpn' => __('MPN'), + ], + ], + ], + 'default' => 'reference', + ] + ); + } + + public function render() + { + $context = \Context::getContext(); + $vars = &$context->smarty->tpl_vars; + $product = &$vars['product']->value; + $type = $this->getSettings('type'); + + switch ($type) { + case 'delivery': + if (1 == $product['additional_delivery_times']) { + echo $product['delivery_information']; + } elseif (2 == $product['additional_delivery_times']) { + if ($product['quantity'] > 0) { + echo $product['delivery_in_stock']; + } elseif ($product['add_to_cart_url']) { + echo $product['delivery_out_stock']; + } + } + break; + case 'quantity': + if (!empty($product['show_quantities'])) { + echo esc_html(max(0, $product['quantity']) . " {$product['quantity_label']}"); + } + break; + case 'condition': + empty($product['condition']) or print esc_html($product['condition']['label']); + break; + case 'reference': + empty($product['reference_to_display']) or print esc_html($product['reference_to_display']); + break; + case 'availability_date': + empty($product[$type]) or print esc_html($product[$type]); + break; + case 'isbn': + case 'ean13': + case 'upc': + case 'npm': + if (!empty($product['attributes'][1][$type])) { + echo esc_html($product['attributes'][1][$type]); + } elseif (!empty($product[$type])) { + echo esc_html($product[$type]); + } + break; + } + } + + protected function renderSmarty() + { + $type = $this->getSettings('type'); + + switch ($type) { + case 'delivery': + echo + '{if 1 == $product.additional_delivery_times}', + '{$product.delivery_information}', + '{elseif 2 == $product.additional_delivery_times}', + '{if $product.quantity > 0}', + '{$product.delivery_in_stock}', + '{elseif $product.add_to_cart_url}', + '{$product.delivery_out_stock}', + '{/if}', + '{/if}'; + break; + case 'quantity': + echo '{if !empty($product.show_quantities)}{max(0, $product.quantity)} {$product.quantity_label}{/if}'; + break; + case 'condition': + echo '{if !empty($product.condition)}{$product.condition.label}{/if}'; + break; + case 'reference': + echo '{if !empty($product.reference_to_display)}{$product.reference_to_display}{/if}'; + case 'availability_date': + echo "{if !empty(\$product.$type)}{\$product.$type}{/if}"; + break; + case 'isbn': + case 'ean13': + case 'upc': + case 'npm': + echo + "{if !empty(\$product.attributes[1].$type)}", + "{\$product.attributes[1].$type}", + "{elseif !empty(\$product.$type)}{\$product.$type}{/if}"; + break; + } + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-name.php b/modules/creativeelements/modules/catalog/tags/product-name.php new file mode 100644 index 00000000..84481f8c --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-name.php @@ -0,0 +1,50 @@ +smarty->tpl_vars['product']->value['name']; + } + + protected function renderSmarty() + { + echo '{$product.name}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-price.php b/modules/creativeelements/modules/catalog/tags/product-price.php new file mode 100644 index 00000000..da03026f --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-price.php @@ -0,0 +1,144 @@ +addControl( + 'type', + [ + 'label' => __('Field'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'currency' => __('Currency'), + 'price' => __('Price'), + 'price_amount' => __('Price Amount'), + 'price_integer' => __('Price Integer'), + 'price_decimals' => __('Price Decimals'), + 'regular_price' => __('Regular'), + 'regular_price_amount' => __('Regular Amount'), + 'discount' => __('Discount'), + 'unit_price' => __('Unit Price'), + ], + 'default' => 'price', + ] + ); + } + + public function render() + { + $vars = &\Context::getContext()->smarty->tpl_vars; + $product = &$vars['product']->value; + + if (!$product['show_price']) { + return; + } + $type = $this->getSettings('type'); + + switch ($type) { + case 'currency': + echo $vars['currency']->value['sign']; + break; + case 'price': + case 'price_amount': + case 'unit_price': + echo $product[$type]; + break; + case 'price_integer': + echo (int) $product['price_amount']; + break; + case 'price_decimals': + echo str_pad((int) (100 * ($product['price_amount'] - (int) $product['price_amount'])), 2, '0', 0); + break; + case 'regular_price': + case 'regular_price_amount': + empty($product['has_discount']) or print $product[$type]; + break; + case 'discount': + empty($product['has_discount']) or print $product[ + 'percentage' === $product['discount_type'] ? 'discount_percentage_absolute' : 'discount_to_display' + ]; + break; + } + } + + protected function renderSmarty() + { + $type = $this->getSettings('type'); + + echo '{if $product.show_price}'; + + switch ($type) { + case 'currency': + echo '{$currency.sign}'; + break; + case 'price': + case 'price_amount': + case 'unit_price': + echo "{\$product.$type}"; + break; + case 'price_integer': + echo '{$product.price_amount|intval}'; + break; + case 'price_decimals': + echo '{str_pad(intval(100 * ($product.price_amount - $product.price_amount|intval)), 2, 0, 0)}'; + break; + case 'regular_price': + case 'regular_price_amount': + echo "{if \$product.has_discount}{\$product.$type}{/if}"; + break; + case 'discount': + echo + '{if $product.has_discount}' . + '{if percentage === $product.discount_type}' . + '{$product.discount_percentage_absolute}' . + '{else}' . + '{$product.discount_to_display}' . + '{/if}' . + '{/if}'; + break; + } + echo '{/if}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-quick-view.php b/modules/creativeelements/modules/catalog/tags/product-quick-view.php new file mode 100644 index 00000000..b3b690fc --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-quick-view.php @@ -0,0 +1,62 @@ +addControl( + 'id_product', + [ + 'label' => __('Product'), + 'type' => ControlsManager::SELECT2, + 'label_block' => true, + 'select2options' => [ + 'placeholder' => __('Current Product'), + 'product' => true, + 'ajax' => [ + 'url' => Helper::getAjaxProductsListLink(), + ], + ], + ] + ); + } + + public function getValue(array $options = []) + { + return Module::createActionUrl('quickview', $this->getSettings()); + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-rating.php b/modules/creativeelements/modules/catalog/tags/product-rating.php new file mode 100644 index 00000000..f32ae8c7 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-rating.php @@ -0,0 +1,95 @@ +addControl( + 'type', + [ + 'label' => __('Field'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'average_grade' => __('Average Grade'), + 'nb_comments' => __('Comments Number'), + ], + 'default' => 'average_grade', + ] + ); + } + + public function render() + { + $productcomments = \Module::getInstanceByName('productcomments'); + + if (empty($productcomments->active) || $productcomments->author !== 'PrestaShop') { + return; + } + $product = &\Context::getContext()->smarty->tpl_vars['product']->value; + $vars = $productcomments->getWidgetVariables('displayCE', [ + 'id_product' => (int) $product['id_product'], + ]); + $type = $this->getSettings('type'); + + switch ($type) { + case 'average_grade': + echo \Tools::ps_round($vars[$type], 1); + break; + case 'nb_comments': + echo (int) $vars[$type]; + break; + } + } + + protected function renderSmarty() + { + echo + '{$cb = Context::getContext()->controller->getContainer()}', + '{if $cb->has(product_comment_repository)}{$pcr = $cb->get(product_comment_repository)}', + $this->getSettings('type') === 'average_grade' + ? '{Tools::ps_round($pcr->getAverageGrade($product.id, Configuration::get("PRODUCT_COMMENTS_MODERATE")),1)}' + : '{$pcr->getCommentsNumber($product.id, Configuration::get("PRODUCT_COMMENTS_MODERATE"))}', + '{/if}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/product-url.php b/modules/creativeelements/modules/catalog/tags/product-url.php new file mode 100644 index 00000000..021b3838 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/product-url.php @@ -0,0 +1,50 @@ +smarty->tpl_vars['product']->value['url']; + } + + protected function getSmartyValue(array $options = []) + { + return '{$product.url}'; + } +} diff --git a/modules/creativeelements/modules/catalog/tags/specific-price-rule-date-time.php b/modules/creativeelements/modules/catalog/tags/specific-price-rule-date-time.php new file mode 100644 index 00000000..e1ebc3a2 --- /dev/null +++ b/modules/creativeelements/modules/catalog/tags/specific-price-rule-date-time.php @@ -0,0 +1,104 @@ +executeS(" + SELECT `id_specific_price_rule`, `name` FROM `$table` + WHERE `id_shop` IN ($ctx_ids) + "); + if ($rows) { + foreach ($rows as &$row) { + $opts[$row['id_specific_price_rule']] = "#{$row['id_specific_price_rule']} {$row['name']}"; + } + } + return $opts; + } + + protected function _registerControls() + { + $this->addControl( + 'id_specific_price_rule', + [ + 'label' => __('Catalog Price Rule'), + 'type' => ControlsManager::SELECT2, + 'label_block' => true, + 'select2options' => [ + 'placeholder' => __('Select...'), + ], + 'options' => is_admin() ? $this->getSpecificPriceRuleOptions() : [], + ] + ); + + $this->addControl( + 'date', + [ + 'label' => __('Date'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'from' => __('From'), + 'to' => __('To'), + ], + 'default' => 'to', + ] + ); + } + + public function getValue(array $options = []) + { + $settings = $this->getSettings(); + $spr = new \SpecificPriceRule($settings['id_specific_price_rule']); + + return $spr->{$settings['date']}; + } + + protected function getSmartyValue(array $options = []) + { + $settings = $this->getSettings(); + + return "{\$spr = ce_new(SpecificPriceRule, {$settings['id_specific_price_rule']}}{\$spr->{$settings['date']}}"; + } +} diff --git a/modules/creativeelements/modules/catalog/widgets/index.php b/modules/creativeelements/modules/catalog/widgets/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/modules/catalog/widgets/index.php @@ -0,0 +1,8 @@ +updateControl( + 'image', + [ + 'label' => '', + 'default' => [ + 'url' => '', + ], + 'dynamic' => [ + 'default' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'manufacturer-image'), + ], + ], + [ + 'recursive' => true, + ] + ); + + $this->addControl( + 'show_caption', + [ + 'label' => __('Caption'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + ], + [ + 'position' => ['of' => 'align'], + ] + ); + + $this->updateControl( + 'caption', + [ + 'label' => '', + 'dynamic' => [ + 'default' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'manufacturer-name'), + ], + 'condition' => [ + 'show_caption!' => '', + ], + ], + [ + 'recursive' => true, + ] + ); + + $this->updateControl( + 'link_to', + [ + 'options' => [ + 'none' => __('None'), + 'custom' => __('Brand'), + ], + 'default' => 'custom', + ] + ); + + $this->updateControl( + 'link', + [ + 'dynamic' => [ + 'default' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'manufacturer-url'), + ], + ], + [ + 'recursive' => true, + ] + ); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-' . parent::getName(); + } + + protected function render() + { + // Backward compatibility fix + $this->getSettings('__dynamic__') or $this->setSettings('__dynamic__', [ + 'image' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'manufacturer-image'), + 'caption' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'manufacturer-name'), + 'link' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'manufacturer-url'), + ]); + + parent::render(); + } + + protected function renderSmarty() + { + echo '{if $product.id_manufacturer}'; + + parent::render(); + + echo '{/if}'; + } + + protected function _contentTemplate() + { + ?> + <# settings.caption = settings.show_caption && settings.caption #> + updateControl( + 'button_type', + [ + 'options' => [ + 'add-to-cart' => __('Add to Cart'), + 'buy-now' => __('Buy Now'), + 'full-details' => __('View Full Details'), + ], + 'default' => 'add-to-cart', + 'render_type' => 'template', + ] + ); + + $this->updateControl( + 'link', + [ + 'type' => ControlsManager::HIDDEN, + 'default' => '', + ] + ); + + $this->updateControl( + 'text', + [ + 'default' => '', + 'placeholder' => 'Default', + ] + ); + + $icon_options = [ + 'fa fa-shopping-cart' => 'cart-fa', + 'fa fa-cart-plus' => 'cart-plus-fa', + 'ceicon-cart-light' => 'cart-light', + 'ceicon-cart-medium' => 'cart-medium', + 'ceicon-cart-solid' => 'cart-solid', + 'ceicon-trolley-light' => 'trolley-light', + 'ceicon-trolley-medium' => 'trolley-medium', + 'ceicon-trolley-solid' => 'trolley-solid', + 'ceicon-trolley-bold' => 'trolley-bold', + 'fa fa-shopping-basket' => 'basket-fa', + 'ceicon-basket-light' => 'basket-light', + 'ceicon-basket-medium' => 'basket-medium', + 'ceicon-basket-solid' => 'basket-solid', + 'fa fa-shopping-bag' => 'bag-fa', + 'ceicon-bag-light' => 'bag-light', + 'ceicon-bag-medium' => 'bag-medium', + 'ceicon-bag-solid' => 'bag-solid', + 'ceicon-bag-rounded-o' => 'bag-rounded-o', + 'ceicon-bag-rounded' => 'bag-rounded', + 'ceicon-bag-trapeze-o' => 'bag-trapeze-o', + 'ceicon-bag-trapeze' => 'bag-trapeze', + + 'ceicon-angle-right' => 'angle-right', + 'ceicon-arrow-right' => 'arrow-right', + 'fa fa-angle-right' => 'angle-right-fa', + 'fa fa-arrow-right' => 'arrow-right-fa', + 'fa fa-arrow-circle-right' => 'arrow-circle-right', + 'fa fa-arrow-circle-o-right' => 'arrow-circle-o-right', + 'fa fa-angle-double-right' => 'angle-double-right', + 'fa fa-caret-right' => 'caret-right', + 'fa fa-caret-square-o-right' => 'caret-square-o-right', + 'fa fa-chevron-right' => 'chevron-right', + 'fa fa-chevron-circle-right' => 'chevron-circle-right', + 'fa fa-long-arrow-right' => 'long-arrow-right', + 'fa fa-hand-o-right' => 'hand-o-right', + 'fa fa-toggle-right' => 'toggle-right', + 'ceicon-angle-left' => 'angle-left', + 'ceicon-arrow-left' => 'arrow-left', + 'fa fa-angle-left' => 'angle-left-fa', + 'fa fa-arrow-left' => 'arrow-left-fa', + 'fa fa-arrow-circle-left' => 'arrow-circle-left', + 'fa fa-arrow-circle-o-left' => 'arrow-circle-o-left', + 'fa fa-angle-double-left' => 'angle-double-left', + 'fa fa-caret-left' => 'caret-left', + 'fa fa-caret-square-o-left' => 'caret-square-o-left', + 'fa fa-chevron-left' => 'chevron-left', + 'fa fa-chevron-circle-left' => 'chevron-circle-left', + 'fa fa-long-arrow-left' => 'long-arrow-left', + 'fa fa-hand-o-left' => 'hand-o-left', + 'fa fa-toggle-left' => 'toggle-left', + ]; + + $this->updateControl( + 'icon', + [ + 'default' => 'ceicon-basket-solid', + 'options' => &$icon_options, + 'include' => array_keys($icon_options), + ] + ); + + $this->removeControl('button_css_id'); + + $this->startControlsSection( + 'section_disabled_style', + [ + 'label' => __('Disabled'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'button_type!' => 'full-details', + ], + ] + ); + + $this->addControl( + 'disabled_cursor', + [ + 'label' => __('Cursor'), + 'label_block' => false, + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'default' => [ + 'icon' => 'fa fa-mouse-pointer', + ], + 'not-allowed' => [ + 'icon' => 'fa fa-ban', + ], + ], + 'default' => 'not-allowed', + 'selectors' => [ + '{{WRAPPER}} a.elementor-button' => 'cursor: pointer;', + '{{WRAPPER}} a.elementor-button:not([href])' => 'cursor: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'disabled_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:not([href]):not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'disabled_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'default' => 'rgba(129,138,145,0.35)', + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:not([href])' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'disabled_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'condition' => [ + 'border_border!' => '', + ], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:not([href])' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-' . parent::getName(); + } + + protected function addInlineEditingAttributes($key, $toolbar = 'basic') + { + isset($this->preventInlineEditing) or parent::addInlineEditingAttributes($key, $toolbar); + } + + protected function render() + { + $context = \Context::getContext(); + $product = &$context->smarty->tpl_vars['product']->value; + $button_type = $this->getSettings('button_type'); + + if ('full-details' === $button_type) { + $this->addRenderAttribute('button', 'href', $product['url']); + } elseif ($product['add_to_cart_url']) { + $action = \Tools::toCamelCase($button_type); + $this->addRenderAttribute('button', 'href', "#ce-action=$action{}"); + } + + if (!$this->getSettings('text')) { + $this->preventInlineEditing = true; + $this->setSettings( + 'text', + 'add-to-cart' === $button_type ? __('Add to Cart') : ( + 'buy-now' === $button_type ? __('Buy Now') : __('View Full Details') + ) + ); + } + parent::render(); + } + + public function renderPlainContent() + { + } + + protected function _contentTemplate() + { + } +} diff --git a/modules/creativeelements/modules/catalog/widgets/product-add-to-wishlist.php b/modules/creativeelements/modules/catalog/widgets/product-add-to-wishlist.php new file mode 100644 index 00000000..4b8ab41c --- /dev/null +++ b/modules/creativeelements/modules/catalog/widgets/product-add-to-wishlist.php @@ -0,0 +1,159 @@ +updateControl('icon', [ + 'type' => ControlsManager::HIDDEN, + ]); + + $this->updateControl('link', [ + 'type' => ControlsManager::HIDDEN, + ]); + + $this->updateControl('primary_color', [ + 'scheme' => [], + ]); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-' . parent::getName(); + } + + protected function getProductsTagged() + { + static $tagged; + + if (null === $tagged) { + $tagged = []; + $context = \Context::getContext(); + + if ($context->customer->isLogged()) { + $js_def = &\Closure::bind(function &() { + return \Media::$js_def; + }, null, 'Media')->__invoke(); + + if (isset($js_def['productsAlreadyTagged'])) { + $tagged = $js_def['productsAlreadyTagged']; + } elseif (file_exists(_PS_MODULE_DIR_ . 'blockwishlist/classes/WishList.php')) { + require_once _PS_MODULE_DIR_ . 'blockwishlist/classes/WishList.php'; + + $tagged = call_user_func( + 'WishList::getAllProductByCustomer', + $context->customer->id, + $context->shop->id + ) ?: []; + } + } + } + return $tagged; + } + + protected function render() + { + $context = \Context::getContext(); + $product = &$context->smarty->tpl_vars['product']->value; + $checked = array_filter($this->getProductsTagged(), function ($tagged) use ($product) { + return $tagged['id_product'] == $product->id_product && + $tagged['id_product_attribute'] == $product->id_product_attribute; + }); + + $this->setSettings('icon', $checked ? 'fa fa-heart' : 'fa fa-heart-o'); + $this->setSettings('link', [ + 'url' => $context->link->getModuleLink('blockwishlist', 'action'), + ]); + + $this->addRenderAttribute('icon-wrapper', [ + 'class' => 'ce-add-to-wishlist', + 'data-product-id' => $product->id_product, + 'data-product-attribute-id' => $product->id_product_attribute, + ]); + + if ($checked) { + $this->addRenderAttribute('icon-wrapper', 'class', 'elementor-active'); + } + + parent::render(); + } + + protected function renderSmarty() + { + ?> + {$atw_class = 'ce-add-to-wishlist'} + {$atw_icon = 'fa fa-heart-o'} + {if !isset($js_custom_vars.productsAlreadyTagged)} + {$js_custom_vars.productsAlreadyTagged = []} + {$js_custom_vars.blockwishlistController = {url entity='module' name='blockwishlist' controller='action'}} + {/if} + {foreach $js_custom_vars.productsAlreadyTagged as $tagged} + {if $tagged.id_product == $product.id && $tagged.id_product_attribute == $product.id_product_attribute} + {$atw_icon = 'fa fa-heart'} + {$atw_class = 'ce-add-to-wishlist elementor-active'} + {break} + {/if} + {/foreach} + setSettings('icon', '{$atw_icon}'); + $this->setSettings('link', [ + 'url' => '{$js_custom_vars.blockwishlistController}', + ]); + + $this->addRenderAttribute('icon-wrapper', [ + 'class' => '{$atw_class}', + 'data-product-id' => '{$product.id}', + 'data-product-attribute-id' => '{$product.id_product_attribute}', + ]); + + parent::render(); + } + + public function renderPlainContent() + { + } + + protected function _contentTemplate() + { + } +} diff --git a/modules/creativeelements/modules/catalog/widgets/product-attachments.php b/modules/creativeelements/modules/catalog/widgets/product-attachments.php new file mode 100644 index 00000000..4cfe0ed0 --- /dev/null +++ b/modules/creativeelements/modules/catalog/widgets/product-attachments.php @@ -0,0 +1,267 @@ +startControlsSection('section_title'); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_title_style', + [ + 'label' => __('Title'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'title_text!' => '', + ] + ] + ); + + $this->addResponsiveControl( + 'heading_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-heading-title' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'heading_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + // Stronger selector to avoid section style from overwriting + '{{WRAPPER}}.elementor-widget-heading .elementor-heading-title' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'heading_typography', + 'selector' => '{{WRAPPER}} .elementor-heading-title', + ] + ); + + $this->addGroupControl( + GroupControlTextShadow::getType(), + [ + 'name' => 'heading_text_shadow', + 'selector' => '{{WRAPPER}} .elementor-heading-title', + ] + ); + + $this->addResponsiveControl( + 'heading_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 20, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-heading-title' => 'margin-bottom: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + + parent::_registerControls(); + + $this->updateControl( + 'section_icon', + [ + 'label' => __('Product Attachments'), + ] + ); + + $this->updateControl( + 'icon', + [ + 'default' => 'fa fa-download', + ] + ); + + $this->removeControl('section_title'); + $this->removeControl('title_text'); + $this->removeControl('description_text'); + $this->removeControl('link'); + $this->removeControl('position'); + + $this->startInjection([ + 'of' => 'icon', + 'at' => 'before', + ]); + + $this->addControl( + 'title_text', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Enter your title'), + 'label_block' => true, + ] + ); + + $this->endInjection(); + + $this->updateControl( + 'icon_size', + [ + 'default' => [ + 'size' => 20, + ], + ] + ); + + $this->updateControl( + 'heading_title', + [ + 'label' => __('Label'), + ] + ); + + $this->startInjection([ + 'of' => 'content_vertical_alignment', + ]); + + $this->addResponsiveControl( + 'space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-attachment:not(:last-child)' => 'margin-bottom: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endInjection(); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-heading elementor-widget-icon-box' . + ' elementor-position-' . (is_rtl() ? 'right' : 'left'); + } + + protected function render() + { + $product = &\Context::getContext()->smarty->tpl_vars['product']->value; + + if (!$product['attachments']) { + return; + } + $settings = $this->getSettingsForDisplay(); + + $this->addRenderAttribute('icon', 'class', [ + 'elementor-icon', + 'elementor-animation-' . $settings['hover_animation'], + ]); + + if ($settings['title_text']) { + $this->addRenderAttribute('title_text', 'class', 'elementor-heading-title'); + $this->addInlineEditingAttributes('title_text', 'none'); + ?> + < getRenderAttributeString('title_text') ?>> + + > + 'attachment', + 'params' => ['id_attachment' => $attachment['id_attachment']], + ]) ?> + + startControlsSection( + 'section_product_badges', + [ + 'label' => __('Product Badges'), + ] + ); + + $this->addControl( + 'layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'inline' => __('Inline'), + 'stacked' => __('Stacked'), + ], + 'default' => 'inline', + 'prefix_class' => 'ce-product-badges--', + ] + ); + + $this->addControl( + 'badges', + [ + 'label' => __('Badges'), + 'type' => ControlsManager::SELECT2, + 'options' => [ + 'sale' => __('Sale'), + 'new' => __('New'), + 'pack' => __('Pack'), + 'out' => __('Out-of-Stock'), + ], + 'default' => ['sale', 'new', 'pack', 'out'], + 'label_block' => true, + 'multiple' => true, + ] + ); + + $this->addControl( + 'heading_label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::HEADING, + 'condition' => [ + 'badges!' => [], + ], + ] + ); + + $this->addControl( + 'sale_text', + [ + 'label' => __('Sale'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'badges', + 'operator' => 'contains', + 'value' => 'sale', + ], + ], + ], + ] + ); + + $this->addControl( + 'new_text', + [ + 'label' => __('New'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'badges', + 'operator' => 'contains', + 'value' => 'new', + ], + ], + ], + ] + ); + + $this->addControl( + 'out_text', + [ + 'label' => __('Out-of-Stock'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + 'conditions' => [ + 'terms' => [ + [ + 'name' => 'badges', + 'operator' => 'contains', + 'value' => 'out', + ], + ], + ], + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-widget-container' => 'text-align: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_product_badges', + [ + 'label' => __('Product Badges'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'default' => [ + 'size' => 5, + 'unit' => 'px', + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-badge' => 'margin: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-badges' => 'margin: 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}} 0', + 'body.lang-rtl {{WRAPPER}} .ce-product-badge' => 'margin: 0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .ce-product-badges' => 'margin: 0 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'min_width', + [ + 'label' => __('Min Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 200, + ], + ], + 'size_units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge' => 'min-width: {{SIZE}}{{UNIT}};', + ], + 'default' => [ + 'unit' => 'px', + 'size' => 50, + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + 'selector' => '{{WRAPPER}} .ce-product-badge', + ] + ); + + $this->startControlsTabs('tabs_style_badges'); + + $this->startControlsTab( + 'tab_badge_sale', + [ + 'label' => __('Sale'), + ] + ); + + $this->addControl( + 'sale_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-sale' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'sale_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-sale' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'sale_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-sale' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_badge_new', + [ + 'label' => __('New'), + ] + ); + + $this->addControl( + 'new_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-new' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'new_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-new' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'new_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-new' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_badge_pack', + [ + 'label' => __('Pack'), + ] + ); + + $this->addControl( + 'pack_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-pack' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'pack_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-pack' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'pack_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-pack' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_badge_out', + [ + 'label' => __('Out'), + ] + ); + + $this->addControl( + 'out_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-out' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'out_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-out' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'out_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-out' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'separator' => 'before', + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge' => 'border-style: solid; border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + + $this->addControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'box_shadow', + 'selector' => '{{WRAPPER}} .ce-product-badge', + ] + ); + + $this->endControlsSection(); + } + + protected function shouldPrintEmpty() + { + return true; + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-overflow-hidden'; + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + + if (!$settings['badges']) { + return; + } + + $product = &\Context::getContext()->smarty->tpl_vars['product']->value; + $badges = []; + + if (!empty($product['has_discount']) && in_array('sale', $settings['badges'])) { + $badges['sale'] = $settings['sale_text'] ?: $product[ + 'percentage' === $product['discount_type'] ? 'discount_percentage' : 'discount_amount_to_display' + ]; + } + if (!empty($product['flags']['new']['label']) && in_array('new', $settings['badges'])) { + $badges['new'] = $settings['new_text'] ?: $product['flags']['new']['label']; + } + if (!empty($product['flags']['pack']['label']) && in_array('pack', $settings['badges'])) { + $badges['pack'] = $product['flags']['pack']['label']; + } + if (!empty($product['flags']['out_of_stock']['label']) && in_array('out', $settings['badges'])) { + $badges['out'] = $settings['out_text'] ?: $product['flags']['out_of_stock']['label']; + } + if (!$badges) { + return; + } + ?> +
+ $label) : ?> +
+ +
+ getSettingsForDisplay(); + + if (!$settings['badges']) { + return; + } + ?> +
+ + {if !empty($product.has_discount)} +
+ + + + {$product[_q_c_( + 'percentage' === $product.discount_type, 'discount_percentage', 'discount_amount_to_display' + )]} + +
+ {/if} + + + {if !empty($product.flags.new.label)} +
+ +
+ {/if} + + + {if !empty($product.flags.pack.label)} +
{$product.flags.pack.label}
+ {/if} + + + {if !empty($product.flags.out_of_stock.label)} +
+ +
+ {/if} + +
+ startControlsSection( + 'section_product_block', + [ + 'label' => __('Product Block'), + ] + ); + + $this->addControl( + 'block', + [ + 'label_block' => true, + 'type' => ControlsManager::SELECT, + 'groups' => [ + '' => __('Select...'), + 'ce_page_content' => __('Product Cover'), + 'ce_product_flags' => '   ' . __('Product Badges'), + 'ce_product_cover_thumbnails' => '   ' . __('Product Images'), + 'ce_product_prices' => __('Product Price'), + // 'ce_product-variants' => __('Product Variants'), + 'ce_product_customization' => __('Product Customization'), + 'ce_product_pack' => __('Product Pack'), + 'ce_product_discounts' => __('Volume Discounts'), + 'ce_product_actions' => __('Product Actions'), + 'ce_product_availability' => __('Product Availability'), + 'ce_product_minimal_quantity' => __('Minimum Quantity'), + 'ce_product_additional_info' => __('Additional Info'), + 'ce_hook_display_reassurance' => __('Reassurance'), + 'ce_product_tabs' => __('Product Tabs'), + 'product_details' => [ + 'label' => __('Product Details'), + 'options' => [ + 'ce_product_reference' => __('Reference'), + 'ce_product_quantities' => __('Quantities'), + 'ce_product_availability_date' => __('Availability Date'), + 'ce_product_out_of_stock' => __('Out-of-Stock'), + 'ce_product_features' => __('Product Features'), + 'ce_product_specific_references' => __('Specific References'), + 'ce_product_condition' => __('Condition'), + ], + ], + 'ce_product_accessories' => __('Product Accessories'), + 'ce_product_footer' => __('Product Footer'), + ], + ] + ); + + $this->endControlsSection(); + } + + protected function render() + { + $block = $this->getSettings('block'); + $smarty = \Context::getContext()->smarty; + $product = $smarty->tpl_vars['product']->value; + empty($smarty->tpl_vars['layout']) or $layout = $smarty->tpl_vars['layout']->value; + + $smarty->assign('layout', _CE_TEMPLATES_ . 'front/theme/layouts/layout-product-block.tpl'); + + \CESmarty::write(_CE_TEMPLATES_ . 'front/theme/catalog/_partials/product-block.tpl', $block); + + empty($layout) or $smarty->tpl_vars['layout']->value = $layout; + $smarty->tpl_vars['product']->value = $product; + } + + public function renderPlainContent() + { + } +} diff --git a/modules/creativeelements/modules/catalog/widgets/product-brand-image.php b/modules/creativeelements/modules/catalog/widgets/product-brand-image.php new file mode 100644 index 00000000..3390d1c7 --- /dev/null +++ b/modules/creativeelements/modules/catalog/widgets/product-brand-image.php @@ -0,0 +1,26 @@ +startControlsSection( + 'section_style', + [ + 'label' => __('Short Description'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'text_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'text_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .ce-product-description-short', + ] + ); + + $this->addControl( + 'text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-description-short' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + 'min_height', + [ + 'label' => __('Min Height'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 500, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-description-short' => 'min-height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addResponsiveControl( + 'line_clamp', + [ + 'label' => __('Max Lines'), + 'type' => ControlsManager::NUMBER, + 'min' => 1, + 'selectors' => [ + '{{WRAPPER}} .ce-product-description-short' => '-webkit-line-clamp: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-text-editor'; + } + + protected function render() + { + $document = Plugin::$instance->documents->getCurrent(); + $product = &\Context::getContext()->smarty->tpl_vars['product']->value; + + if ($document && $document->getTemplateType() === 'product-miniature') { + $product['description_short'] = strip_tags($product['description_short']); + } + ?> +
+ +
{$product.description_short|strip_tags:0}
+ startControlsSection( + 'section_style', + [ + 'label' => __('Style'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'text_align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-description' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'text_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .ce-product-description', + ] + ); + + $this->endControlsSection(); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-text-editor'; + } + + protected function render() + { + $context = \Context::getContext(); + $product = &$context->smarty->tpl_vars['product']->value; + + if (\Tools::getValue('render') === 'widget') { + UId::$_ID = new UId($product['id_product'], UId::PRODUCT, $context->language->id, $context->shop->id); + + $product['description'] = apply_filters('the_content', $product['description']); + } + ?> +
+ updateControl( + 'title', + [ + 'type' => ControlsManager::TEXT, + 'label_block' => true, + 'default' => '', + ] + ); + + $this->updateControl( + 'link', + [ + 'type' => ControlsManager::HIDDEN, + ] + ); + + $this->removeControl('blend_mode'); + + $this->startInjection([ + 'type' => 'section', + 'of' => 'section_title_style', + ]); + + $this->addResponsiveControl( + 'spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'em' => [ + 'max' => 5, + 'step' => 0.1, + ], + ], + 'default' => [ + 'unit' => 'px', + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-heading-title' => 'margin-bottom: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'title!' => '', + ], + ] + ); + + $this->endInjection(); + + if (is_admin()) { + $this->startControlsSection( + 'section_features', + [ + 'label' => __('Product Features'), + ] + ); + + $url = \Context::getContext()->link->getAdminLink('AdminFeatures'); + + $this->addControl( + 'configure', + [ + 'raw' => + '' . + ' ' . __('Configure') . + '', + 'type' => ControlsManager::RAW_HTML, + 'classes' => 'elementor-control-descriptor', + ] + ); + + $this->endControlsSection(); + } + + $this->startControlsSection( + 'section_features_style', + [ + 'label' => __('Product Features'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'border', + 'selector' => '{{WRAPPER}} table.ce-product-features', + ] + ); + + $this->startControlsTabs('tabs_style_rows'); + + $this->startControlsTab( + 'tab_row_odd', + [ + 'label' => __('Odd'), + ] + ); + + $this->addControl( + 'odd_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-features tr:nth-child(odd)' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_row_even', + [ + 'label' => __('Even'), + ] + ); + + $this->addControl( + 'even_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-features tr:nth-child(even)' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->startControlsTabs('tabs_style_columns'); + + $this->startControlsTab( + 'tab_column_label', + [ + 'label' => __('Label'), + ] + ); + + $this->addResponsiveControl( + 'label_align', + [ + 'label' => __('Alignment'), + 'label_block' => false, + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-features__label' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'label_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .ce-product-features__label', + ] + ); + + $this->addControl( + 'label_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-features__label' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'label_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-features__label' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + 'label_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 33, + 'unit' => '%', + ], + 'size_units' => ['px', '%'], + 'range' => [ + 'px' => [ + 'max' => 500, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-features__label' => 'width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'label_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-features__label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'label_border', + 'selector' => '{{WRAPPER}} .ce-product-features__label', + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_column_value', + [ + 'label' => __('Value'), + ] + ); + + $this->addResponsiveControl( + 'value_align', + [ + 'label' => __('Alignment'), + 'label_block' => false, + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-features__value' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'value_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .ce-product-features__value', + ] + ); + + $this->addControl( + 'value_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-features__value' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'value_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-features__value' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + 'value_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-features__value' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'value_border', + 'selector' => '{{WRAPPER}} .ce-product-features__value', + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + } + + protected function render() + { + $product = &\Context::getContext()->smarty->tpl_vars['product']->value; + + if (!$product['grouped_features']) { + return; + } + $settings = $this->getSettingsForDisplay(); + + if ($settings['title']) { + $this->addRenderAttribute('title', 'class', 'elementor-heading-title'); + + if (!empty($settings['size'])) { + $this->addRenderAttribute('title', 'class', 'elementor-size-' . $settings['size']); + } + printf( + '<%1$s %2$s>%3$s', + $settings['header_size'], + $this->getRenderAttributeString('title'), + $settings['title'] + ); + } + ?> + + + + + + + +
+ startInjection([ + 'type' => 'section', + 'at' => 'start', + 'of' => 'section_image', + ]); + + $index_options = range(0, 10); + $index_options = array_combine($index_options, $index_options); + $index_options[0] = __('Cover'); + + $this->addControl( + 'image_index', + [ + 'label' => __('Image'), + 'type' => ControlsManager::SELECT, + 'options' => $index_options, + 'default' => '0', + ] + ); + + $image_size_options = GroupControlImageSize::getAllImageSizes('products'); + + $this->addControl( + 'image_size', + [ + 'label' => __('Image Size'), + 'type' => ControlsManager::SELECT, + 'options' => &$image_size_options, + 'default' => key($image_size_options), + ] + ); + + $this->addControl( + 'show_no_image', + [ + 'label' => __('No Image'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'default' => 'yes', + 'condition' => [ + 'image_index' => '0', + ], + ] + ); + + $this->endInjection(); + + $this->startInjection([ + 'of' => 'align', + ]); + + $this->addControl( + 'show_caption', + [ + 'label' => __('Caption'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + ] + ); + + $this->endInjection(); + + $this->updateControl( + 'link_to', + [ + 'options' => [ + 'none' => __('None'), + 'file' => __('Lightbox'), + 'product' => __('Product'), + 'custom' => __('Custom URL'), + ], + 'default' => 'file', + ] + ); + + $this->removeControl('image'); + $this->removeControl('caption'); + $this->removeControl('open_lightbox'); + } + + public function onImport($widget) + { + $sizes = array_map(function ($size) { + return $size['name']; + }, \ImageType::getImagesTypes('products')); + + if (isset($widget['settings']['image_size']) && !in_array($widget['settings']['image_size'], $sizes)) { + $home = \ImageType::getFormattedName('home'); + + $widget['settings']['image_size'] = in_array($home, $sizes) ? $home : reset($sizes); + } + + return $widget; + } + + protected function shouldPrintEmpty() + { + return true; + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-image'; + } + + protected function render() + { + $context = \Context::getContext(); + $product = &$context->smarty->tpl_vars['product']->value; + $settings = $this->getSettingsForDisplay(); + $index = (int) (!$settings['image_index'] ? $product['cover']['position'] : $settings['image_index']) - 1; + + if (empty($product['images'][$index])) { + if (!$settings['show_no_image']) { + return; + } + $image = Helper::getNoImage(); + } else { + $image = $product['images'][$index]; + } + + $caption = $image['legend']; + $image_by_size = &$image['bySize'][$settings['image_size']]; + $srcset = ["{$image_by_size['url']} {$image_by_size['width']}w"]; + + foreach ($image['bySize'] as $size => &$img) { + if ($settings['image_size'] !== $size) { + $srcset[] = "{$img['url']} {$img['width']}w"; + } + } + $this->addRenderAttribute('image', [ + 'width' => $image_by_size['width'], + 'height' => $image_by_size['height'], + 'src' => $image_by_size['url'], + 'alt' => $caption, + 'srcset' => implode(', ', $srcset), + 'sizes' => "(max-width: {$image_by_size['width']}px) 100vw, {$image_by_size['width']}px", + ]); + + if ($settings['hover_animation']) { + $this->addRenderAttribute('image', 'class', 'elementor-animation-' . $settings['hover_animation']); + } + + $has_caption = $settings['show_caption'] && $caption; + $has_link = 'none' !== $settings['link_to']; + + switch ($settings['link_to']) { + case 'file': + empty($image['id_image']) or $this->addRenderAttribute('link', [ + 'href' => Helper::getProductImageLink($image), + 'data-elementor-lightbox-slideshow' => + "p-{$product['id_product']}-{$product['id_product_attribute']}", + ]); + break; + case 'product': + $this->addRenderAttribute('link', [ + 'href' => $product['url'], + ]); + break; + case 'custom': + $this->addRenderAttribute('link', [ + 'href' => $settings['link']['url'], + 'target' => $settings['link']['is_external'] ? '_blank' : '_self', + 'rel' => $settings['link']['nofollow'] ? 'nofollow' : '', + ]); + break; + } + ?> + + startControlsSection( + 'section_product_images', + [ + 'label' => __('Product Images'), + ] + ); + + $this->addControl( + 'skin', + [ + 'label' => __('Skin'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'slideshow' => __('Slideshow'), + 'carousel' => __('Carousel'), + ], + 'default' => 'slideshow', + 'prefix_class' => 'elementor-skin-', + 'render_type' => 'template', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'effect', + [ + 'type' => ControlsManager::SELECT, + 'label' => __('Effect'), + 'default' => 'slide', + 'options' => [ + 'slide' => __('Slide'), + 'fade' => __('Fade'), + 'cube' => __('Cube'), + 'flip' => __('Flip'), + 'coverflow' => __('Coverflow'), + ], + 'frontend_available' => true, + ] + ); + + $image_size_options = GroupControlImageSize::getAllImageSizes('products'); + + $this->addControl( + 'image_size', + [ + 'label' => __('Image Size'), + 'type' => ControlsManager::SELECT, + 'options' => &$image_size_options, + 'default' => key($image_size_options), + ] + ); + + $this->addControl( + 'zoom', + [ + 'type' => ControlsManager::SWITCHER, + 'label' => __('Zoom on Hover'), + 'condition' => [ + 'skin' => 'slideshow', + ], + ] + ); + + $this->addControl( + 'zoom_scale', + [ + 'label' => __('Scale'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'step' => 0.1, + 'min' => 1.1, + 'max' => 5, + ], + ], + 'default' => [ + 'size' => 2, + ], + 'condition' => [ + 'skin' => 'slideshow', + 'zoom!' => '', + ], + ] + ); + + $this->addControl( + 'centered_slides', + [ + 'label' => __('Centered Slides'), + 'type' => ControlsManager::SWITCHER, + 'frontend_available' => true, + 'condition' => [ + 'skin' => 'carousel', + ], + ] + ); + + $this->addControl( + 'heading_thumbs', + [ + 'label' => __('Thumbnails'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + 'condition' => [ + 'skin' => 'slideshow', + ], + ] + ); + + end($image_size_options); + + $this->addControl( + 'thumb_size', + [ + 'label' => __('Image Size'), + 'type' => ControlsManager::SELECT, + 'options' => &$image_size_options, + 'default' => key($image_size_options), + 'condition' => [ + 'skin' => 'slideshow', + ], + ] + ); + + $this->addControl( + 'position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'bottom' => __('Bottom'), + 'left' => __('Left'), + 'right' => __('Right'), + ], + 'default' => 'bottom', + 'prefix_class' => 'elementor-position-', + 'frontend_available' => true, + 'render_type' => 'template', + 'condition' => [ + 'skin' => 'slideshow', + ], + ] + ); + + $slides_per_view = range(1, 10); + $slides_per_view = array_combine($slides_per_view, $slides_per_view); + + $this->addResponsiveControl( + 'slides_per_view', + [ + 'type' => ControlsManager::SELECT, + 'label' => __('Slides Per View'), + 'options' => ['' => __('Default')] + $slides_per_view, + 'frontend_available' => true, + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'skin', + 'value' => 'slideshow', + ], + [ + 'name' => 'effect', + 'operator' => 'in', + 'value' => ['slide', 'coverflow'], + ], + ], + ], + ] + ); + + $this->addResponsiveControl( + 'slides_to_scroll', + [ + 'type' => ControlsManager::SELECT, + 'label' => __('Slides to Scroll'), + 'description' => __('Set how many slides are scrolled per swipe.'), + 'options' => ['' => __('Default')] + $slides_per_view, + 'frontend_available' => true, + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'skin', + 'value' => 'slideshow', + ], + [ + 'name' => 'effect', + 'operator' => 'in', + 'value' => ['slide', 'coverflow'], + ], + ], + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_additional_options', + [ + 'label' => __('Additional Options'), + ] + ); + + $this->addControl( + 'show_arrows', + [ + 'type' => ControlsManager::SWITCHER, + 'label' => __('Arrows'), + 'default' => 'yes', + 'label_off' => __('Hide'), + 'label_on' => __('Show'), + 'prefix_class' => 'elementor-arrows-', + 'render_type' => 'template', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'pagination', + [ + 'label' => __('Pagination'), + 'type' => ControlsManager::SELECT, + 'default' => 'bullets', + 'options' => [ + '' => __('None'), + 'bullets' => __('Dots'), + 'fraction' => __('Fraction'), + 'progressbar' => __('Progress'), + ], + 'prefix_class' => 'elementor-pagination-type-', + 'render_type' => 'template', + 'frontend_available' => true, + 'condition' => [ + 'skin' => 'carousel', + ], + ] + ); + + $this->addControl( + 'speed', + [ + 'label' => __('Transition Duration') . ' (ms)', + 'type' => ControlsManager::NUMBER, + 'default' => 500, + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'autoplay', + [ + 'label' => __('Autoplay'), + 'type' => ControlsManager::SWITCHER, + 'separator' => 'before', + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'autoplay_speed', + [ + 'label' => __('Autoplay Speed') . ' (ms)', + 'type' => ControlsManager::NUMBER, + 'default' => 5000, + 'condition' => [ + 'autoplay!' => '', + ], + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'pause_on_interaction', + [ + 'label' => __('Pause on Interaction'), + 'type' => ControlsManager::SWITCHER, + 'default' => 'yes', + 'condition' => [ + 'autoplay!' => '', + ], + 'frontend_available' => true, + ] + ); + + $this->addControl( + 'loop', + [ + 'label' => __('Infinite Loop'), + 'type' => ControlsManager::SWITCHER, + 'frontend_available' => true, + 'separator' => 'before', + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'skin', + 'value' => 'carousel', + ], + [ + 'name' => 'effect', + 'value' => 'fade', + ], + ], + ], + ] + ); + + $this->addControl( + 'overlay', + [ + 'label' => __('Overlay'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('None'), + 'text' => __('Caption'), + 'icon' => __('Icon'), + ], + 'separator' => 'before', + ] + ); + + $icon_options = [ + 'fa fa-search-plus' => 'search-plus', + 'fa fa-search' => 'search-fa', + 'ceicon-search-light' => 'search-light', + 'ceicon-search-medium' => 'search-medium', + 'ceicon-search-glint' => 'search-glint', + 'ceicon-search-minimal' => 'search-minimal', + 'ceicon-magnifier' => 'magnifier', + 'ceicon-loupe' => 'loupe', + 'fa fa-expand' => 'expand', + 'fa fa-arrows-alt' => 'arrows', + ]; + + $this->addControl( + 'icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'label_block' => false, + 'default' => 'fa fa-search', + 'options' => $icon_options, + 'include' => array_keys($icon_options), + 'condition' => [ + 'overlay' => 'icon', + ], + ] + ); + + $this->addControl( + 'overlay_animation', + [ + 'label' => __('Animation'), + 'type' => ControlsManager::SELECT, + 'default' => 'fade', + 'options' => [ + 'fade' => 'Fade', + 'slide-up' => 'Slide Up', + 'slide-down' => 'Slide Down', + 'slide-right' => 'Slide Right', + 'slide-left' => 'Slide Left', + 'zoom-in' => 'Zoom In', + ], + 'condition' => [ + 'overlay!' => '', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_product_images_style', + [ + 'label' => __('Product Images'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'desktop_default' => [ + 'size' => 10, + ], + 'tablet_default' => [ + 'size' => 10, + ], + 'mobile_default' => [ + 'size' => 10, + ], + 'frontend_available' => true, + 'condition' => [ + 'skin' => 'carousel', + 'effect' => ['slide', 'coverflow'], + ], + ] + ); + + $this->addResponsiveControl( + 'slideshow_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + '{{WRAPPER}}.elementor-position-bottom .elementor-thumbnails-swiper' => 'margin-top: {{SIZE}}{{UNIT}}', + '{{WRAPPER}}.elementor-position-left .elementor-thumbnails-swiper' => 'margin-right: {{SIZE}}{{UNIT}}', + '{{WRAPPER}}.elementor-position-right .elementor-thumbnails-swiper' => 'margin-left: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'skin' => 'slideshow', + ], + ] + ); + + $this->addResponsiveControl( + 'slideshow_width', + [ + 'type' => ControlsManager::SLIDER, + 'label' => __('Width'), + 'size_units' => ['px', '%'], + 'range' => [ + 'px' => [ + 'min' => 10, + 'max' => 500, + ], + ], + 'default' => [ + 'size' => '80', + 'unit' => '%', + ], + 'render_type' => 'template', + 'selectors' => [ + '{{WRAPPER}} .elementor-swiper:nth-child(1)' => 'width: {{SIZE}}{{UNIT}};', + '{{WRAPPER}} .elementor-swiper:nth-child(2)' => 'width: calc(100% - {{SIZE}}{{UNIT}});', + ], + 'condition' => [ + 'skin' => 'slideshow', + 'position!' => 'bottom', + ], + ] + ); + + $this->addResponsiveControl( + 'slideshow_height', + [ + 'type' => ControlsManager::SLIDER, + 'label' => __('Height'), + 'range' => [ + 'px' => [ + 'min' => 20, + 'max' => 1000, + ], + ], + 'render_type' => 'template', + 'selectors' => [ + '{{WRAPPER}} .elementor-main-swiper' => 'height: {{SIZE}}{{UNIT}};', + '{{WRAPPER}}:not(.elementor-position-bottom) .elementor-thumbnails-swiper' => 'height: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'slide_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-main-swiper .swiper-slide' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'slide_border_size', + [ + 'label' => __('Border Size'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-main-swiper .swiper-slide' => 'border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'slide_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'range' => [ + '%' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-main-swiper .swiper-slide' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_product_thumbs_style', + [ + 'label' => __('Thumbnails'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'skin' => 'slideshow', + ], + ] + ); + + $this->addResponsiveControl( + 'thumb_space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'desktop_default' => [ + 'size' => 10, + ], + 'tablet_default' => [ + 'size' => 10, + ], + 'mobile_default' => [ + 'size' => 10, + ], + 'frontend_available' => true, + ] + ); + + $this->startControlsTabs('tabs_style_thumbs'); + + $this->startControlsTab( + 'tab_thumb_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'thumb_overlay_color', + [ + 'label' => __('Overlay Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-thumbnails-swiper .swiper-slide:after' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'thumb_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-thumbnails-swiper .swiper-slide' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_thumb_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'thumb_overlay_color_hover', + [ + 'label' => __('Overlay Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-thumbnails-swiper .swiper-slide:hover:after' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'thumb_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-thumbnails-swiper .swiper-slide:hover' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_thumb_active', + [ + 'label' => __('Active'), + ] + ); + + $this->addControl( + 'thumb_overlay_color_active', + [ + 'label' => __('Overlay Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-thumbnails-swiper .swiper-slide.swiper-slide-active:after' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'thumb_border_color_active', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-thumbnails-swiper .swiper-slide.swiper-slide-active' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'thumb_border_size', + [ + 'label' => __('Border Size'), + 'type' => ControlsManager::SLIDER, + 'separator' => 'before', + 'selectors' => [ + '{{WRAPPER}} .elementor-thumbnails-swiper .swiper-slide' => 'border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'thumb_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'range' => [ + '%' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-thumbnails-swiper .swiper-slide' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_style_navigation', + [ + 'label' => __('Navigation'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'heading_style_arrows', + [ + 'label' => __('Arrows'), + 'type' => ControlsManager::HEADING, + 'condition' => [ + 'show_arrows!' => '', + ], + ] + ); + + $this->addControl( + 'arrows_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 20, + ], + 'range' => [ + 'px' => [ + 'min' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-swiper-button' => 'font-size: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'show_arrows!' => '', + ], + ] + ); + + $this->addControl( + 'arrows_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-swiper-button' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'show_arrows!' => '', + ], + ] + ); + + $this->addControl( + 'heading_pagination', + [ + 'label' => __('Pagination'), + 'type' => ControlsManager::HEADING, + 'condition' => [ + 'skin' => 'carousel', + 'pagination!' => '', + ], + ] + ); + + $this->addControl( + 'pagination_position', + [ + 'label' => __('Position'), + 'type' => ControlsManager::SELECT, + 'default' => 'outside', + 'options' => [ + 'outside' => __('Outside'), + 'inside' => __('Inside'), + ], + 'prefix_class' => 'elementor-pagination-position-', + 'condition' => [ + 'skin' => 'carousel', + 'pagination!' => '', + ], + ] + ); + + $this->addControl( + 'pagination_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 20, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .swiper-pagination-bullet' => 'height: {{SIZE}}{{UNIT}}; width: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .swiper-container-horizontal .swiper-pagination-progressbar' => 'height: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .swiper-pagination-fraction' => 'font-size: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'skin' => 'carousel', + 'pagination!' => '', + ], + ] + ); + + $this->addControl( + 'pagination_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .swiper-pagination-bullet-active, {{WRAPPER}} .swiper-pagination-progressbar-fill' => 'background-color: {{VALUE}}', + '{{WRAPPER}} .swiper-pagination-fraction' => 'color: {{VALUE}}', + ], + 'condition' => [ + 'skin' => 'carousel', + 'pagination!' => '', + ], + ] + ); + + $this->addControl( + 'heading_style_lightbox', + [ + 'label' => __('Lightbox'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + ] + ); + + $this->addControl( + 'lightbox_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '#elementor-lightbox-slideshow-{{ID}}' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'lightbox_ui_color', + [ + 'label' => __('UI Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '#elementor-lightbox-slideshow-{{ID}} .dialog-lightbox-close-button, #elementor-lightbox-slideshow-{{ID}} .elementor-swiper-button' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'lightbox_ui_hover_color', + [ + 'label' => __('UI Hover Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '#elementor-lightbox-slideshow-{{ID}} .dialog-lightbox-close-button:hover, #elementor-lightbox-slideshow-{{ID}} .elementor-swiper-button:hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_overlay', + [ + 'label' => __('Overlay'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'overlay!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'caption_typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_4, + 'selector' => '{{WRAPPER}} .elementor-carousel-image-overlay', + 'condition' => [ + 'overlay' => 'text', + ], + ] + ); + + $this->addControl( + 'icon_size', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .elementor-carousel-image-overlay i' => 'font-size: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'overlay' => 'icon', + ], + ] + ); + + $this->addControl( + 'overlay_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-carousel-image-overlay' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'overlay_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .elementor-carousel-image-overlay' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + } + + public function onImport($widget) + { + $sizes = array_map(function ($size) { + return $size['name']; + }, \ImageType::getImagesTypes('products')); + + if (isset($widget['settings']['image_size']) && !in_array($widget['settings']['image_size'], $sizes)) { + $home = \ImageType::getFormattedName('home'); + + $widget['settings']['image_size'] = in_array($home, $sizes) ? $home : reset($sizes); + } + + if (isset($widget['settings']['thumb_size']) && !in_array($widget['settings']['thumb_size'], $sizes)) { + $small = \ImageType::getFormattedName('small'); + + $widget['settings']['thumb_size'] = in_array($small, $sizes) ? $small : end($sizes); + } + + return $widget; + } + + /** + * Render product images widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.8 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $context = \Context::getContext(); + $id = $this->getId(); + $product = &$context->smarty->tpl_vars['product']->value; + $images = $product['images'] ?: [Helper::getNoImage()]; + $image_size = $settings['image_size']; + $thumb_size = $settings['thumb_size']; + + empty($settings['zoom']) or $this->addRenderAttribute('link', [ + 'class' => 'swiper-zoom-container', + 'data-swiper-zoom' => $settings['zoom_scale']['size'], + ]); + $this->addRenderAttribute('link', 'data-elementor-lightbox-slideshow', $id); + ?> +
+
+ + +
+ + +
+ + +
+
+ + +
+ +
+
+ +
+
+
+ $image) : ?> +
+ + <?= esc_attr($image['legend']) ?> + + + <?= esc_attr($image['legend']) ?> + + +
+ +
+
+
+ startControlsSection( + 'section_product_meta', + [ + 'label' => __('Product Meta'), + ] + ); + + $this->addControl( + 'layout', + [ + 'label' => __('Layout'), + 'label_block' => false, + 'type' => ControlsManager::SELECT, + 'options' => [ + 'inline' => __('Inline'), + 'stacked' => __('Stacked'), + 'table' => __('Table'), + ], + 'default' => 'inline', + 'prefix_class' => 'ce-product-meta--layout-', + ] + ); + + $repeater = new Repeater(); + + $repeater->addControl( + 'type', + [ + 'label' => __('Field'), + 'type' => ControlsManager::SELECT, + 'groups' => [ + 'category' => __('Category'), + 'manufacturer' => __('Brand'), + // 'tags' => __('Tags'), + 'delivery' => __('Delivery Time'), + 'quantity' => __('Quantity'), + 'availability_date' => __('Availability Date'), + 'condition' => __('Condition'), + 'references' => [ + 'label' => __('References'), + 'options' => [ + 'reference' => __('SKU'), + 'isbn' => __('ISBN'), + 'ean13' => __('EAN-13'), + 'upc' => __('UPC'), + 'mpn' => __('MPN'), + ], + ], + ], + 'default' => 'reference', + ] + ); + + $repeater->addControl( + 'label', + [ + 'label' => __('Label'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + ] + ); + + $this->addControl( + 'meta_list', + [ + 'label' => '', + 'type' => ControlsManager::REPEATER, + 'fields' => $repeater->getControls(), + 'default' => [ + ['type' => 'reference'], + ['type' => 'category'], + ['type' => 'manufacturer'], + ], + 'title_field' => '{{{ label.trim() || ' . + '(label = elementor.panel.currentView.currentPageView.model.get("settings").controls.' . + 'meta_list.fields.type.groups)[type] || label.references.options[type] }}}', + ] + ); + + $this->addControl( + 'show_colon', + [ + 'label' => __('Colon'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'selectors' => [ + '{{WRAPPER}} .ce-product-meta__label:after' => 'content: ":"', + ], + 'separator' => 'before', + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'prefix_class' => 'elementor%s-align-', + 'selectors_dictionary' => [ + 'left' => 'flex-start', + 'right' => 'flex-end', + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-meta' => 'justify-content: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_product_meta_style', + [ + 'label' => __('Product Meta'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + '{{WRAPPER}}.ce-product-meta--layout-inline .ce-product-meta' => 'margin: 0 calc(-{{SIZE}}{{UNIT}} / 2)', + '{{WRAPPER}}.ce-product-meta--layout-inline .ce-product-meta__detail' => 'padding: 0 calc({{SIZE}}{{UNIT}} / 2)', + '{{WRAPPER}}:not(.ce-product-meta--layout-inline) .ce-product-meta__detail:not(:first-child)' => 'padding-top: calc({{SIZE}}{{UNIT}} / 2)', + '{{WRAPPER}}:not(.ce-product-meta--layout-inline) .ce-product-meta__detail:not(:last-child)' => 'padding-bottom: calc({{SIZE}}{{UNIT}} / 2)', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'text_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}}', + ] + ); + + $this->addControl( + 'text_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}}' => 'color: {{VALUE}}', + ], + 'separator' => 'after', + ] + ); + + $this->startControlsTabs('tabs_style_columns'); + + $this->startControlsTab( + 'tab_column_label', + [ + 'label' => __('Label'), + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'label_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .ce-product-meta__label', + ] + ); + + $this->addControl( + 'label_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-meta__label' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + 'label_width', + [ + 'label' => __('Min Width'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'range' => [ + 'px' => [ + 'max' => 500, + ], + ], + 'selectors' => [ + '{{WRAPPER}}.ce-product-meta--layout-table .ce-product-meta__label' => 'min-width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'layout' => 'table', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_column_link', + [ + 'label' => __('Link'), + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'link_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .ce-product-meta__value a', + ] + ); + + $this->addControl( + 'link_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-meta__value a' => 'color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'show_divider', + [ + 'label' => '' . __('Divider') . '', + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'selectors' => [ + '{{WRAPPER}} .ce-product-meta__detail:not(:last-child):after' => 'content: ""; border-color: #ddd', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'divider_style', + [ + 'label' => __('Style'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'solid' => __('Solid'), + 'double' => __('Double'), + 'dotted' => __('Dotted'), + 'dashed' => __('Dashed'), + ], + 'default' => 'solid', + 'selectors' => [ + '{{WRAPPER}} .ce-product-meta__detail:not(:last-child):after' => 'border-style: {{VALUE}}', + ], + 'condition' => [ + 'show_divider!' => '', + ], + ] + ); + + $this->addControl( + 'divider_weight', + [ + 'label' => __('Weight'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 1, + ], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 10, + ], + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}}.ce-product-meta--layout-inline .ce-product-meta__detail:not(:last-child):after' => 'border-left-width: {{SIZE}}{{UNIT}}; margin-right: calc(-{{SIZE}}{{UNIT}} / 2)', + 'body.lang-rtl {{WRAPPER}}.ce-product-meta--layout-inline .ce-product-meta__detail:not(:last-child):after' => 'border-right-width: {{SIZE}}{{UNIT}}; margin-left: calc(-{{SIZE}}{{UNIT}} / 2)', + '{{WRAPPER}}:not(.ce-product-meta--layout-inline) .ce-product-meta__detail:not(:last-child):after' => 'border-top-width: {{SIZE}}{{UNIT}}; margin-bottom: calc(-{{SIZE}}{{UNIT}} / 2)', + ], + 'condition' => [ + 'show_divider!' => '', + ], + ] + ); + + $this->addControl( + 'divider_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_3, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-meta__detail:not(:last-child):after' => 'border-color: {{VALUE}}', + ], + 'condition' => [ + 'show_divider!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'divider_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'range' => [ + 'px' => [ + 'max' => 1000, + ], + ], + 'default' => [ + 'unit' => '%', + ], + 'tablet_default' => [ + 'unit' => '%', + ], + 'mobile_default' => [ + 'unit' => '%', + ], + 'selectors' => [ + '{{WRAPPER}}.ce-product-meta--layout-inline .ce-product-meta__detail:not(:last-child):after' => 'height: {{SIZE}}{{UNIT}}', + '{{WRAPPER}}:not(.ce-product-meta--layout-inline) .ce-product-meta__detail:not(:last-child):after' => 'width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'show_divider!' => '', + ], + ] + ); + + $this->endControlsSection(); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-overflow-hidden'; + } + + protected function render() + { + $context = \Context::getContext(); + $vars = &$context->smarty->tpl_vars; + $product = &$vars['product']->value; + $t = $context->getTranslator(); + + echo '
'; + + foreach ($this->getSettings('meta_list') as $meta) { + $label = $meta['label']; + $value = $attrs = ''; + + switch ($meta['type']) { + case 'category': + $label = $label ?: rtrim( + $t->trans('Category: %category_name%', ['%category_name%' => ''], 'Shop.Theme.Catalog'), + ': ' + ); + $value = sprintf( + '%s', + esc_attr($context->link->getCategoryLink( + new \Category($product['id_category_default'], $context->language->id) + )), + esc_html($product['category_name']) + ); + break; + case 'manufacturer': + if (empty($vars['product_manufacturer']->value->name)) { + continue 2; + } + $label = $label ?: $t->trans('Brand', [], 'Shop.Theme.Catalog'); + $value = sprintf( + '%s', + esc_attr($vars['product_brand_url']->value), + esc_html($vars['product_manufacturer']->value->name) + ); + break; + case 'delivery': + $label = $label ?: $t->trans('Delivery Time', [], 'Admin.Catalog.Feature'); + + if (1 == $product['additional_delivery_times']) { + $value = $product['delivery_information']; + } elseif (2 == $product['additional_delivery_times']) { + if ($product['quantity'] > 0) { + $value = $product['delivery_in_stock']; + } elseif ($product['add_to_cart_url']) { + $value = $product['delivery_out_stock']; + } + } + if (!$value) { + continue 2; + } + break; + case 'quantity': + if (empty($product['show_quantities'])) { + continue 2; + } + $label = $label ?: $t->trans('In stock', [], 'Shop.Theme.Catalog'); + $quantity = max(0, $product['quantity']); + $value = esc_html("$quantity {$product['quantity_label']}"); + break; + case 'availability_date': + if (empty($product['availability_date'])) { + continue 2; + } + $label = $label ?: rtrim($t->trans('Availability date:', [], 'Shop.Theme.Catalog'), ': '); + $value = esc_html($product['availability_date']); + break; + case 'condition': + if (empty($product['condition'])) { + continue 2; + } + $label = $label ?: $t->trans('Condition', [], 'Shop.Theme.Catalog'); + $value = sprintf( + '', + esc_attr($product['condition']['schema_url']) + ) . esc_html($product['condition']['label']); + break; + case 'reference': + if (empty($product['reference_to_display'])) { + continue 2; + } + $label = $label ?: $t->trans('Reference', [], 'Shop.Theme.Catalog'); + $attrs = 'itemprop="sku"'; + $value = esc_html($product['reference_to_display']); + break; + default: + // isbn, ean13, upc, npm + $type = $meta['type']; + $value = isset($product['attributes'][1][$type]) ? $product['attributes'][1][$type] : ( + isset($product[$type]) ? $product[$type] : '' + ); + if (!$value) { + continue 2; + } + $label = \Tools::strtoupper($type); + $value = esc_html($value); + break; + } + printf( + '' . + ' %s' . + ' %s' . + '', + esc_attr($meta['type']), + esc_html($label), + $attrs, + $value + ); + } + echo '
'; + } + + protected function renderSmarty() + { + ?> +
+ getSettings('meta_list') as $meta) : ?> + + + getTranslator()->trans( + 'Category: %category_name%', ['%category_name%' => ''], 'Shop.Theme.Catalog')|rtrim:': '}" + ?> + + {$product.category_name} + + + + {if $product.manufacturer_name} + + + + {$product.manufacturer_name} + + + {/if} + + {$delivery = ''} + {if 1 == $product.additional_delivery_times} + {$delivery = $product.delivery_information} + {elseif 2 == $product.additional_delivery_times} + {if $product.quantity > 0} + {$delivery = $product.delivery_in_stock} + {elseif $product.add_to_cart_url} + {$delivery = $product.delivery_out_stock} + {/if} + {/if} + {if $delivery} + + + {$delivery} + + {/if} + + {if !empty($product.show_quantities)} + + + + {max(0, $product.quantity)|cat:" {$product.quantity_label}"} + + + {/if} + + {if !empty($product.availability_date)} + + getTranslator()->trans( + 'Availability date:', [], 'Shop.Theme.Catalog')|rtrim:': '}" ?> + {$product.availability_date} + + {/if} + + {if !empty($product.condition)} + + + + + {$product.condition.label} + + + {/if} + + {if $product.reference} + + + {$product.reference} + + {/if} + + {$ref = } + {if !empty($product[$ref])} + + {$ref|upper} + {$product[$ref]} + + {/if} + + +
+ updateControl( + 'button_type', + [ + 'options' => [ + 'add-to-cart' => __('Add to Cart'), + 'buy-now' => __('Buy Now'), + ], + ] + ); + + $this->startControlsSection( + 'section_combinations', + [ + 'label' => __('Product with Combinations'), + ] + ); + + $this->addControl( + 'combinations_action', + [ + 'label' => __('Action'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Default'), + 'quickview' => __('Quick View'), + 'full-details' => __('View Full Details'), + ], + ] + ); + + $this->addControl( + 'combinations_text', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'placeholder' => 'Default', + 'condition' => [ + 'combinations_action!' => '', + ] + ] + ); + + $this->addControl( + 'combinations_icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-eye', + 'condition' => [ + 'combinations_action!' => '', + ] + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_combinations_style', + [ + 'label' => __('Product with Combinations'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'combinations_action!' => '', + ] + ] + ); + + $this->startControlsTabs('tabs_combinations_style'); + + $this->startControlsTab( + 'tab_combinations_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'combinations_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button-combinations:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'combinations_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button-combinations' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'combinations_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'condition' => [ + 'border_border!' => '', + ], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button-combinations' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_combinations_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'combinations_color_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button-combinations:not(#e):hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'combinations_background_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button-combinations:hover' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'combinations_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'condition' => [ + 'border_border!' => '', + ], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button-combinations:hover' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->endControlsSection(); + } + + protected function render() + { + $context = \Context::getContext(); + $product = &$context->smarty->tpl_vars['product']->value; + $settings = $this->getSettings(); + $action = \Tools::toCamelCase($settings['button_type']); + + $this->addRenderAttribute('button', 'href', "#ce-action=$action{}"); + + if ($settings['combinations_action'] && $product['attributes']) { + $this->preventInlineEditing = true; + $this->addRenderAttribute('button', 'class', 'elementor-button-combinations'); + + $href = 'quickview' === $settings['combinations_action'] ? '#ce-action=quickview{}' : $product['url']; + $this->setRenderAttribute('button', 'href', $href); + + $this->setSettings('icon', $settings['combinations_icon']); + $this->setSettings( + 'text', + $settings['combinations_text'] ?: ( + 'quickview' === $settings['combinations_action'] ? __('Quick View') : __('View Full Details') + ) + ); + } elseif (!$settings['text']) { + $this->preventInlineEditing = true; + $this->setSettings( + 'text', + 'add-to-cart' === $settings['button_type'] ? __('Add to Cart') : __('Buy Now') + ); + } + WidgetButton::render(); + } + + protected function renderSmarty() + { + $settings = $this->getSettings(); + $action = \Tools::toCamelCase($settings['button_type']); + + if ($settings['combinations_action']) { + $this->addRenderAttribute('button', [ + 'class' => '{if $product.attributes}elementor-button-combinations{/if}', + '{if $product.attributes}' . + 'href="' . ('quickview' === $settings['combinations_action'] + ? '#ce-action=quickview{}' + : '{$product.url}' + ) . '"' . + '{elseif $product.add_to_cart_url}' . + 'href="#ce-action=' . $action . '{}"' . + '{/if}' => null, + ]); + $this->setSettings( + 'icon', + '{if $product.attributes}' . $settings['combinations_icon'] . '{else}' . $settings['icon'] . '{/if}' + ); + $this->setSettings( + 'text', + '{if $product.attributes}' . + ($settings['combinations_text'] ?: + ('quickview' === $settings['combinations_action'] ? __('Quick View') : __('View Full Details')) + ) . + '{else}' . + ($settings['text'] ?: + ('add-to-cart' === $settings['button_type'] ? __('Add to Cart') : __('Buy Now')) + ) . + '{/if}' + ); + } else { + $this->addRenderAttribute('button', [ + '{if $product.add_to_cart_url}href="#ce-action=' . $action . '{}"{/if}' => null, + ]); + empty($settings['text']) && $this->setSettings( + 'text', + 'add-to-cart' === $settings['button_type'] ? __('Add to Cart') : __('Buy Now') + ); + } + WidgetButton::render(); + } +} diff --git a/modules/creativeelements/modules/catalog/widgets/product-miniature-box.php b/modules/creativeelements/modules/catalog/widgets/product-miniature-box.php new file mode 100644 index 00000000..0eef5f0a --- /dev/null +++ b/modules/creativeelements/modules/catalog/widgets/product-miniature-box.php @@ -0,0 +1,235 @@ + __('Custom'), + ]; + } + + protected function getDefaultProductId() + { + return ''; + } + + protected function _registerControls() + { + parent::_registerControls(); + + $this->updateControl( + 'skin', + [ + 'type' => ControlsManager::HIDDEN, + 'default' => 'custom', + ] + ); + + $this->updateControl( + 'product_id', + [ + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Current Product'), + 'classes' => 'ce-disabled', + 'separator' => '', + ] + ); + + $this->removeControl('description_length'); + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $product = &$this->context->smarty->tpl_vars['product']->value; + + echo '
' . $this->fetchMiniature($settings, $product) . '
'; + } + + protected function renderSmarty() + { + static $flags = [ + 'sale' => 'discount', + 'new' => 'new', + 'pack' => 'pack', + 'out' => 'out_of_stock', + ]; + $settings = $this->getSettingsForDisplay(); + + $image_size = !empty($settings['image_size']) ? $settings['image_size'] : $this->imageSize; + $image_size_tablet = !empty($settings['image_size_tablet']) && + $settings['image_size_tablet'] !== $image_size ? $settings['image_size_tablet'] : ''; + $image_size_mobile = !empty($settings['image_size_mobile']) && + $settings['image_size_mobile'] !== $image_size_tablet ? $settings['image_size_mobile'] : ''; + + $title_tag = $settings['title_tag']; + $show_atc = $this->show_prices && !empty($settings['show_atc']); + + $this->setRenderAttribute('cover', [ + 'src' => "{\$cover.bySize.$image_size.url}", + 'alt' => '{if !empty($cover.legend)}{$cover.legend}{else}{$product.name}{/if}', + 'width' => "{\$cover.bySize.$image_size.width}", + 'height' => "{\$cover.bySize.$image_size.height}", + ]); + empty($settings['show_second_image']) or $this->setRenderAttribute('image', [ + 'src' => "{\$image.bySize.$image_size.url}", + 'alt' => '{$image.legend}', + 'width' => "{\$image.bySize.$image_size.width}", + 'height' => "{\$image.bySize.$image_size.height}", + ]); + ?> + {if empty($urls.no_picture_image)} + {$urls.no_picture_image = call_user_func('CE\Helper::getNoImage')} + {/if} + {$cover = _q_c_($product.cover, $product.cover, $urls.no_picture_image)} + + updateControl('link_to', [ + 'type' => ControlsManager::HIDDEN, + 'default' => 'product', + ]); + } + + protected function shouldPrintEmpty() + { + return false; + } + + protected function renderSmarty() + { + $settings = $this->getSettingsForDisplay(); + + if (!$settings['image_index']) { + echo '{$index = $product.cover.position|intval - 1}'; + } else { + echo '{$index = ' . ((int) $settings['image_index'] - 1) . '}'; + } + ?> + {if isset($product.images[$index])} + {$image = $product.images[$index]} + + {else} + {$image = call_user_func('CE\Helper::getNoImage')} + {/if} + + {$caption = } + {$image_by_size = $image.bySize[]} + {$srcset = ["{$image_by_size.url} {$image_by_size.width}"]} + {foreach $image.bySize as $size => $img} + {if !== $size} + {$srcset[] = "{$img.url} {$img.width}w"} + {/if} + {/foreach} + + updateControl('link_to', [ + 'default' => 'custom', + ]); + + $this->updateControl('header_size', [ + 'default' => 'h3', + ]); + + $this->updateControl('title_multiline', [ + 'default' => '', + ]); + } + + protected function renderSmarty() + { + $link = $this->getSettings('link'); + + empty($link['url']) or $this->addRenderAttribute('url', [ + 'itemprop' => 'url', + 'content' => $link['url'], + ]); + + parent::render(); + } +} diff --git a/modules/creativeelements/modules/catalog/widgets/product-miniature-price.php b/modules/creativeelements/modules/catalog/widgets/product-miniature-price.php new file mode 100644 index 00000000..1b3b61f4 --- /dev/null +++ b/modules/creativeelements/modules/catalog/widgets/product-miniature-price.php @@ -0,0 +1,120 @@ +smarty->tpl_vars['product']->value; + + if (!$product['show_price']) { + return; + } + $currency = &$context->smarty->tpl_vars['currency']->value; + + $settings = $this->getSettingsForDisplay(); + $t = $context->getTranslator(); + ?> +
+ + $product, 'type' => 'old_price']) ?> +
+ + $product, 'type' => 'before_price']) ?> +
+ + + + + + + + trans('Save %percentage%', ['%percentage%' => $product['discount_percentage_absolute']], 'Shop.Theme.Catalog') ?> + + + + trans('Save %amount%', ['%amount%' => $product['discount_to_display']], 'Shop.Theme.Catalog') ?> + + + +
+ $product, 'type' => 'unit_price']) ?> + $product, 'type' => 'weight']) ?> +
+ getSettingsForDisplay(); + ?> + {if $product['show_price']} +
+ + {if $product['has_discount']} + {hook h='displayProductPriceBlock' product=$product type='old_price'} +
{$product['regular_price']}
+ {/if} + + {hook h='displayProductPriceBlock' product=$product type='before_price'} +
+ + + {$product['price']} + + + {if $product['has_discount']} + {if 'percentage' === $product['discount_type']} + + {l s='Save %percentage%' sprintf=['%percentage%' => $product['discount_percentage_absolute']] d='Shop.Theme.Catalog'} + + {else} + + {l s='Save %amount%' sprintf=['%amount%' => $product['discount_to_display']] d='Shop.Theme.Catalog'} + + {/if} + {/if} + +
+ {hook h='displayProductPriceBlock' product=$product type='unit_price'} + {hook h='displayProductPriceBlock' product=$product type='weight'} +
+ {/if} + updateControl('comments_number_icon', [ + 'default' => '', + ]); + + $this->updateControl('comments_number_before', [ + 'placeholder' => '', + 'default' => '(', + ]); + + $this->updateControl('comments_number_after', [ + 'default' => ')', + ]); + } + + protected function renderStars($icon) + { + if (!is_admin()) { + return parent::renderStars($icon); + } + ob_start(); + ?> + {$floored_rating = $average_grade|intval} + {for $stars=1 to 5} + {if $stars <= $floored_rating} + + {elseif $floored_rating + 1 === $stars} + + {else} + + {/if} + {/for} + getSettingsForDisplay(); + ?> + {$cb = Context::getContext()->controller->getContainer()} + {if $cb->has('product_comment_repository')} + {$pcr = $cb->get('product_comment_repository')} + {$pcm = Configuration::get('PRODUCT_COMMENTS_MODERATE')} + {$nb_comments = _q_c_($pcr, $pcr->getCommentsNumber($product.id, $pcm)|intval, 0)} + + {$average_grade = Tools::ps_round($pcr->getAverageGrade($product.id, $pcm), 1)} +
+ + {if $nb_comments} + + + + {$average_grade} + + + + + + + + + + + + + + + + {/if} +
+ + {/if} + startControlsSection( + 'section_variations_style', + [ + 'label' => __('Product Variations'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'limit', + [ + 'label' => __('Limit'), + 'type' => ControlsManager::NUMBER, + 'min' => 1, + 'default' => 5, + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'prefix_class' => 'elementor%s-align-', + 'selectors_dictionary' => [ + 'left' => 'flex-start', + 'right' => 'flex-end', + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__patterns' => 'justify-content: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_pattern_style', + [ + 'label' => __('Color/Texture Buttons'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'pattern_space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-variants__pattern' => 'margin: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-variants' => 'margin: 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}} 0', + 'body.lang-rtl {{WRAPPER}} .ce-product-variants__pattern' => 'margin: 0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .ce-product-variants' => 'margin: 0 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'count_typography', + 'exclude' => ['line_height'], + 'selector' => '{{WRAPPER}} .ce-product-variants__count', + ] + ); + + $this->addControl( + 'count_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__count' => 'color: {{VALUE}}', + ], + ] + ); + + $this->startControlsTabs('tabs_style_pattern'); + + $this->startControlsTab( + 'tab_pattern_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'pattern_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#818a91', + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'border-style: solid; border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'padding: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_pattern_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'pattern_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern:hover' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_width_hover', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern:hover' => 'border-style: solid; border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_radius_hover', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern:hover' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_padding_hover', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern:hover' => 'padding: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addResponsiveControl( + 'pattern_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 30, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'pattern_box_shadow', + 'selector' => '{{WRAPPER}} .ce-product-variants__pattern', + ] + ); + + $this->endControlsSection(); + } + + /** + * Render product variations widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.8 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $product = &\Context::getContext()->smarty->tpl_vars['product']->value; + + if (empty($product['main_variants'])) { + return; + } + $limit = (int) $this->getSettings('limit'); + ?> + + getSettings('limit'); + + echo '{if $product.main_variants}'; + ?> +
+ {foreach $product.main_variants as $i => $variant} + {if $i < } + + {else} + + +{$product.main_variants|count - } + + {break} + {/if} + {/foreach} +
+ updateControl( + 'title', + [ + 'dynamic' => [ + 'default' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'product-name'), + ], + ], + [ + 'recursive' => true, + ] + ); + + $this->addControl( + 'link_to', + [ + 'label' => __('Link'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('None'), + 'custom' => __('Product'), + ], + 'separator' => 'before', + ], + [ + 'position' => [ + 'of' => 'title', + ], + ] + ); + + $this->updateControl( + 'link', + [ + 'label' => '', + 'type' => ControlsManager::URL, + 'dynamic' => [ + 'default' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'product-url'), + ], + 'separator' => '', + 'condition' => [ + 'link_to!' => '', + ], + ], + [ + 'recursive' => true, + ] + ); + + $this->updateControl( + 'header_size', + [ + 'default' => 'h1', + ] + ); + + $this->addControl( + 'title_multiline', + [ + 'label' => __('Allow Multiline'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Yes'), + 'label_off' => __('No'), + 'default' => 'yes', + 'selectors' => [ + '{{WRAPPER}} .ce-product-name' => 'white-space: normal;', + ], + ], + [ + 'position' => [ + 'of' => 'title_color', + 'at' => 'before', + ], + ] + ); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-heading'; + } + + protected function render() + { + // Backward compatibility + $this->getSettings('__dynamic__') or $this->setSettings('__dynamic__', [ + 'title' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'product-name'), + 'link' => Plugin::$instance->dynamic_tags->tagDataToTagText(null, 'product-url'), + ]); + + $this->addRenderAttribute('title', [ + 'class' => 'ce-product-name', + 'itemprop' => 'name', + ]); + + parent::render(); + } + + protected function _contentTemplate() + { + ?> + <# settings.link.url = settings.link_to && settings.link.url #> + startControlsSection( + 'section_product_price', + [ + 'label' => __('Product Price'), + ] + ); + + $this->addControl( + 'layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'default' => 'stacked', + 'options' => [ + 'inline' => __('Inline'), + 'stacked' => __('Stacked'), + ], + 'prefix_class' => 'ce-product-prices--layout-', + ] + ); + + $this->addControl( + 'regular', + [ + 'label' => __('Regular Price'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'return_value' => 'show', + 'default' => 'show', + ] + ); + + $this->addControl( + 'discount', + [ + 'label' => __('Discount'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'return_value' => 'show', + 'default' => 'show', + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'prefix_class' => 'elementor%s-align-', + 'selectors_dictionary' => [ + 'left' => 'flex-start', + 'right' => 'flex-end', + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-prices' => 'justify-content: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_product_price_style', + [ + 'label' => __('Product Price'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_1, + 'selector' => '{{WRAPPER}} .ce-product-prices', + ] + ); + + $this->addControl( + 'price_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'scheme' => [ + 'type' => SchemeColor::getType(), + 'value' => SchemeColor::COLOR_1, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-prices' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addResponsiveControl( + 'space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + 'step' => 0.1, + ], + ], + 'default' => [ + 'size' => 10, + 'unit' => 'px', + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-prices > div' => 'margin: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-prices' => 'margin: 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}} 0', + 'body.lang-rtl {{WRAPPER}} .ce-product-prices > div' => 'margin: 0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .ce-product-prices' => 'margin: 0 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->startControlsTabs('tabs_style_prices'); + + $this->startControlsTab( + 'tab_regular', + [ + 'label' => __('Regular'), + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'regular_typography', + 'selector' => '{{WRAPPER}} .ce-product-price-regular', + ] + ); + + $this->addControl( + 'regular_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-price-regular' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_sale', + [ + 'label' => __('Sale'), + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'sale_typography', + 'selector' => '{{WRAPPER}} .ce-has-discount', + ] + ); + + $this->addControl( + 'sale_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-has-discount' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_unit', + [ + 'label' => __('Unit'), + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'unit_typography', + 'selector' => '{{WRAPPER}} .ce-product-price-unit', + ] + ); + + $this->addControl( + 'unit_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-price-unit' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + if ($this->getName() === 'product-price') { + $this->startControlsTabs('tabs_style_others'); + + $this->startControlsTab( + 'tab_tax_excl', + [ + 'label' => __('Tax excl.'), + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'tax_excl_typography', + 'selector' => '{{WRAPPER}} .ce-product-price-without-taxes', + ] + ); + + $this->addControl( + 'tax_excl_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-price-without-taxes' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_pack', + [ + 'label' => __('Pack'), + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'pack_typography', + 'selector' => '{{WRAPPER}} .ce-product-price-pack', + ] + ); + + $this->addControl( + 'pack_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-price-pack' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_tax', + [ + 'label' => __('Tax'), + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'tax_typography', + 'selector' => '{{WRAPPER}} .ce-tax-shipping-delivery-label', + ] + ); + + $this->addControl( + 'tax_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-tax-shipping-delivery-label' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'heading_ecotax', + [ + 'label' => __('Ecotax'), + 'type' => ControlsManager::HEADING, + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'ecotax_typography', + 'selector' => '{{WRAPPER}} .ce-product-price-ecotax', + ] + ); + + $this->addControl( + 'ecotax_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-price-ecotax' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + } + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_product_price_discount_style', + [ + 'label' => __('Discount'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'discount!' => '', + ], + ] + ); + + $this->addResponsiveControl( + 'discount_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'em' => [ + 'min' => 0, + 'max' => 5, + 'step' => 0.1, + ], + ], + 'default' => [ + 'size' => 10, + 'unit' => 'px', + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-badge-sale' => 'margin-left: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .ce-product-badge-sale' => 'margin-right: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'discount_typography', + 'selector' => '{{WRAPPER}} .ce-product-badge-sale', + ] + ); + + $this->addControl( + 'discount_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-sale' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'discount_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-sale' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'discount_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-sale' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'discount_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 10, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-sale' => 'border-style: solid; border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'discount_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 100, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-sale' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'discount_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .ce-product-badge-sale' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->endControlsSection(); + } + + /** + * Get HTML wrapper class. + * + * Retrieve the widget container class. + * + * @since 2.5.8 + * @access protected + */ + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-overflow-hidden'; + } + + /** + * Render product price widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.8 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $context = \Context::getContext(); + $vars = &$context->smarty->tpl_vars; + $product = &$vars['product']->value; + + if (!$product['show_price']) { + return; + } + $priceDisplay = &$vars['priceDisplay']->value; + $displayUnitPrice = &$vars['displayUnitPrice']->value; + $displayPackPrice = &$vars['displayPackPrice']->value; + $noPackPrice = &$vars['noPackPrice']->value; + $currency = &$vars['currency']->value; + $configuration = &$vars['configuration']->value; + + $settings = $this->getSettingsForDisplay(); + $t = $context->getTranslator(); + ?> +
+ + $product, 'type' => 'old_price']) ?> +
+ +
+ + + + + + + + + trans('Save %percentage%', ['%percentage%' => $product['discount_percentage_absolute']], 'Shop.Theme.Catalog') ?> + + + + trans('Save %amount%', ['%amount%' => $product['discount_to_display']], 'Shop.Theme.Catalog') ?> + + + +
+ +
+ trans('(%unit_price%)', ['%unit_price%' => $product['unit_price_full']], 'Shop.Theme.Catalog') ?> +
+ + +
+ trans('%price% tax excl.', ['%price%' => $product['price_tax_exc']], 'Shop.Theme.Catalog') ?> +
+ + +
+ trans('Instead of %price%', ['%price%' => $noPackPrice], 'Shop.Theme.Catalog') ?> +
+ + 0) : ?> +
+ trans('Including %amount% for ecotax', ['%amount%' => $product['ecotax']['value']], 'Shop.Theme.Catalog') ?> + + trans('(not impacted by the discount)', [], 'Shop.Theme.Catalog') ?> + +
+ + $product, 'type' => 'weight', 'hook_origin' => 'product_sheet']) ?> + + + trans('No tax', [], 'Shop.Theme.Catalog') ?> + + + + $product, 'type' => 'price']) ?> + $product, 'type' => 'after_price']) ?> + +
+ +
+ startControlsSection( + 'section_product_quantity', + [ + 'label' => __('Product Quantity'), + ] + ); + + $this->addControl( + 'view', + [ + 'label' => __('View'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + 'inline' => __('Inline'), + 'stacked' => __('Stacked'), + ], + 'default' => 'default', + 'prefix_class' => 'ce-product-quantity--view-', + ] + ); + + $this->addControl( + 'size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'default' => 'sm', + 'options' => [ + 'xs' => __('Extra Small'), + 'sm' => __('Small'), + 'md' => __('Medium'), + 'lg' => __('Large'), + 'xl' => __('Extra Large'), + ], + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + 'justify' => [ + 'title' => __('Justified'), + 'icon' => 'fa fa-align-justify', + ], + ], + 'prefix_class' => 'elementor%s-align-', + ] + ); + + $this->addControl( + 'heading_buttons', + [ + 'label' => __('Buttons'), + 'type' => ControlsManager::HEADING, + 'separator' => 'before', + 'condition' => [ + 'view!' => 'default', + ], + ] + ); + + $plus_options = [ + 'ceicon-plus' => 'plus', + 'fa fa-plus' => 'plus-bold', + 'fa fa-plus-square' => 'plus-square', + 'fa fa-plus-square-o' => 'plus-square-o', + 'ceicon-sort-up' => 'caret', + 'fa fa-caret-square-o-up' => 'caret-square', + 'fa fa-angle-up' => 'angle', + 'fa fa-angle-double-up' => 'angle-double', + 'fa fa-chevron-up' => 'chevron', + 'fa fa-chevron-circle-up' => 'chevron-circle', + 'fa fa-arrow-up' => 'arrow', + 'fa fa-arrow-circle-up' => 'arrow-circle', + 'fa fa-arrow-circle-o-up' => 'arrow-circle-o', + 'fa fa-long-arrow-up' => 'long-arrow', + ]; + $this->addControl( + 'plus', + [ + 'label' => __('Up'), + 'label_block' => false, + 'type' => ControlsManager::ICON, + 'default' => 'ceicon-sort-up', + 'options' => &$plus_options, + 'include' => array_keys($plus_options), + ] + ); + + $minus_options = [ + 'ceicon-minus' => 'minus', + 'fa fa-minus' => 'minus-bold', + 'fa fa-minus-square' => 'minus-square', + 'fa fa-minus-square-o' => 'minus-square-o', + 'ceicon-sort-down' => 'caret', + 'fa fa-caret-square-o-down' => 'caret-square', + 'fa fa-angle-down' => 'angle', + 'fa fa-angle-double-down' => 'angle-double', + 'fa fa-chevron-down' => 'chevron', + 'fa fa-chevron-circle-down' => 'chevron-circle', + 'fa fa-arrow-down' => 'arrow', + 'fa fa-arrow-circle-down' => 'arrow-circle', + 'fa fa-arrow-circle-o-down' => 'arrow-circle-o', + 'fa fa-long-arrow-down' => 'long-arrow', + ]; + $this->addControl( + 'minus', + [ + 'label' => __('Down'), + 'label_block' => false, + 'type' => ControlsManager::ICON, + 'default' => 'ceicon-sort-down', + 'options' => &$minus_options, + 'include' => array_keys($minus_options), + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_input_style', + [ + 'label' => __('Input'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 500, + ], + ], + 'size_units' => ['px', 'em'], + 'selectors' => [ + '{{WRAPPER}} input[type=number]' => 'width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'align!' => 'justify', + ], + 'device_args' => [ + ControlsStack::RESPONSIVE_TABLET => [ + 'condition' => [ + 'align_tablet!' => 'justify', + ], + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'condition' => [ + 'align_mobile!' => 'justify', + ], + ], + ], + ] + ); + + $this->addControl( + 'input_align', + [ + 'label' => __('Alignment'), + 'label_block' => false, + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}} input[type=number]' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'typography', + 'scheme' => SchemeTypography::TYPOGRAPHY_3, + 'selector' => '{{WRAPPER}} input[type=number]', + ] + ); + + $this->startControlsTabs('tabs_input_style'); + + $this->startControlsTab( + 'tab_input_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'text_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=number]' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=number]' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=number]' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_input_focus', + [ + 'label' => __('Focus'), + ] + ); + + $this->addControl( + 'text_color_focus', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=number]:focus' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'background_color_focus', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=number]:focus' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'border_color_focus', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input[type=number]:focus' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} input[type=number]' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + '{{WRAPPER}}.ce-product-quantity--view-stacked .ce-product-quantity__plus' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} 0 {{LEFT}}{{UNIT}}', + '{{WRAPPER}}.ce-product-quantity--view-stacked .ce-product-quantity__minus' => 'margin: 0 {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} input[type=number]' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'button_box_shadow', + 'selector' => '{{WRAPPER}} input[type=number]', + ] + ); + + $this->addResponsiveControl( + 'text_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} input[type=number]' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_buttons_style', + [ + 'label' => __('Buttons'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'view!' => 'default', + ], + ] + ); + + $this->addResponsiveControl( + 'buttons_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}}.ce-product-quantity--view-inline input[type=number]' => 'margin: 0 {{SIZE}}{{UNIT}}', + 'body:not(.lang-rtl) {{WRAPPER}}.ce-product-quantity--view-stacked .ce-product-quantity__btn' => 'right: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}}.ce-product-quantity--view-stacked .ce-product-quantity__btn' => 'left: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'buttons_margin', + [ + 'label' => __('Margin'), + 'type' => ControlsManager::SLIDER, + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__plus' => 'top: {{SIZE}}{{UNIT}}', + '{{WRAPPER}} .ce-product-quantity__minus' => 'bottom: {{SIZE}}{{UNIT}}', + ], + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'max' => 50, + ], + 'em' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + 'condition' => [ + 'view' => 'stacked', + ], + ] + ); + + $this->addControl( + 'buttons_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'max' => 50, + ], + 'em' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__btn' => 'width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'view' => 'stacked', + ], + ] + ); + + $this->addResponsiveControl( + 'buttons_size', + [ + 'label' => __('Icon Size'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} i.ce-product-quantity__btn' => 'font-size: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'buttons_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', 'em'], + 'range' => [ + 'px' => [ + 'max' => 50, + ], + 'em' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + 'default' => [ + 'size' => 8, + ], + 'selectors' => [ + '{{WRAPPER}} i.ce-product-quantity__btn' => 'padding: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'view' => 'inline', + ], + ] + ); + + $this->startControlsTabs('tabs_colors_style'); + + $this->startControlsTab( + 'tab_colors_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'buttons_color', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} i.ce-product-quantity__btn' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'buttons_background_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__btn' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'buttons_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__btn' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_colors_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'buttons_color_hover', + [ + 'label' => __('Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} i.ce-product-quantity__btn:hover' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'buttons_background_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__btn:hover' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'buttons_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__btn:hover' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->startControlsTabs( + 'tabs_border_style', + [ + 'condition' => [ + 'view' => 'stacked', + ], + ] + ); + + $this->startControlsTab( + 'tab_border_plus', + [ + 'label' => __('Up'), + ] + ); + + $this->addControl( + 'plus_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__plus' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'plus_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__plus' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_border_minus', + [ + 'label' => __('Down'), + ] + ); + + $this->addControl( + 'minus_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__minus' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'minus_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__minus' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'buttons_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__btn' => 'border-width: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + 'condition' => [ + 'view' => 'inline', + ], + ] + ); + + $this->addControl( + 'buttons_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .ce-product-quantity__btn' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + 'default' => [ + 'size' => 2, + ], + 'condition' => [ + 'view' => 'inline', + ], + ] + ); + + $this->endControlsSection(); + } + + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $product = &\Context::getContext()->smarty->tpl_vars['product']->value; + $min_qty = !empty($product['product_attribute_minimal_quantity']) + ? 'product_attribute_minimal_quantity' + : 'minimal_quantity' + ; + $this->addRenderAttribute('input', [ + 'class' => 'elementor-field elementor-field-textual elementor-size-' . $settings['size'], + 'type' => 'number', + 'form' => 'add-to-cart-or-refresh', + 'name' => 'qty', + 'value' => $product['quantity_wanted'], + 'min' => max(1, $product[$min_qty]), + 'inputmode' => 'decimal', + 'oninput' => '$(this.form.qty).val(this.value)', + ]); + ?> +
+ + getRenderAttributeString('input') ?>> + +
+ updateControl('rating_scale', ['type' => ControlsManager::HIDDEN]); + + $this->updateControl('rating', ['type' => ControlsManager::HIDDEN]); + + $this->updateControl('star_style', ['separator' => '']); + + $this->updateControl('title', ['separator' => '']); + + $this->startInjection([ + 'of' => 'title', + ]); + + $this->addControl( + 'hide_empty', + [ + 'label' => __('Hide Empty'), + 'type' => ControlsManager::SWITCHER, + ] + ); + + $this->addControl( + 'show_average_grade', + [ + 'label' => __('Average Grade'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + ] + ); + + $this->addControl( + 'show_comments_number', + [ + 'label' => '' . __('Comments Number') . '', + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'comments_number_icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-commenting', + 'condition' => [ + 'show_comments_number!' => '', + ], + ] + ); + + $this->addControl( + 'comments_number_before', + [ + 'label' => __('Before'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + 'condition' => [ + 'show_comments_number!' => '', + ], + ] + ); + + $this->addControl( + 'comments_number_after', + [ + 'label' => __('After'), + 'type' => ControlsManager::TEXT, + 'condition' => [ + 'show_comments_number!' => '', + ], + ] + ); + + if ($this->getName() === 'product-rating') { + $this->addControl( + 'show_post_comment', + [ + 'label' => '' . __('Post Comment') . '', + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'separator' => 'before', + ] + ); + + $this->addControl( + 'post_comment_icon', + [ + 'label' => __('Icon'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-pencil', + 'condition' => [ + 'show_post_comment!' => '', + ], + ] + ); + + $this->addControl( + 'post_comment', + [ + 'label' => __('Text'), + 'type' => ControlsManager::TEXT, + 'placeholder' => __('Default'), + 'condition' => [ + 'show_post_comment!' => '', + ], + ] + ); + } + + $this->endInjection(); + + $this->updateControl( + 'align', + [ + 'label_block' => false, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'separator' => 'before' + ] + ); + + $this->startControlsSection( + 'section_average_grade_style', + [ + 'label' => __('Average Grade'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'show_average_grade!' => '', + ], + ] + ); + + $this->addControl( + 'average_grade_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-rating__average-grade' => is_rtl() ? 'margin-right: {{SIZE}}{{UNIT}};' : 'margin-left: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'average_grade_typography', + 'selector' => '{{WRAPPER}} .ce-product-rating__average-grade', + ] + ); + + $this->addControl( + 'average_grade_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-rating__average-grade' => 'color: {{VALUE}};', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_comments_number_style', + [ + 'label' => __('Comments Number'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'show_comments_number!' => '', + ], + ] + ); + + $this->addControl( + 'comments_number_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-item' => is_rtl() ? 'margin-right: {{SIZE}}{{UNIT}};' : 'margin-left: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'comments_number_typography', + 'selector' => '{{WRAPPER}} .elementor-icon-list-item', + ] + ); + + $this->addControl( + 'comments_number_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-icon-list-item' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'comments_number_color_hover', + [ + 'label' => __('Hover'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} a.elementor-icon-list-item:hover' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'comments_number_indent', + [ + 'label' => __('Text Indent'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .elementor-icon-list-text' => is_rtl() ? 'padding-right: {{SIZE}}{{UNIT}};' : 'padding-left: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + 'comments_number_icon!' => '', + ], + ] + ); + + $this->endControlsSection(); + + if ($this->getName() === 'product-rating') { + $this->startControlsSection( + 'section_post_comment_style', + [ + 'label' => __('Post Comment'), + 'tab' => ControlsManager::TAB_STYLE, + 'condition' => [ + 'show_post_comment!' => '', + ], + ] + ); + + $this->addControl( + 'post_comment_layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'default' => 'inline', + 'options' => [ + 'inline' => __('Inline'), + 'stacked' => __('Stacked'), + ], + 'prefix_class' => 'ce-product-rating--layout-', + ] + ); + + $this->addControl( + 'post_comment_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + '{{WRAPPER}}.ce-product-rating--layout-inline .elementor-button' => is_rtl() ? 'margin-right: {{SIZE}}{{UNIT}};' : 'margin-left: {{SIZE}}{{UNIT}};', + '{{WRAPPER}}.ce-product-rating--layout-stacked .elementor-button' => 'margin-top: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'post_comment_typography', + 'selector' => '{{WRAPPER}} a.elementor-button', + ] + ); + + $this->startControlsTabs('tabs_button_style'); + + $this->startControlsTab( + 'tab_button_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'post_comment_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'default' => '', + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:not(#e)' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'post_comment_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_button_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'post_comment_color_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:not(#e):hover, {{WRAPPER}} a.elementor-button:not(#e):focus' => 'color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'post_comment_bg_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:hover, {{WRAPPER}} a.elementor-button:focus' => 'background-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'post_comment_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'condition' => [ + 'border_border!' => '', + ], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button:hover, {{WRAPPER}} a.elementor-button:focus' => 'border-color: {{VALUE}};', + ], + ] + ); + + $this->addControl( + 'post_comment_hover_animation', + [ + 'label' => __('Hover Animation'), + 'type' => ControlsManager::HOVER_ANIMATION, + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addGroupControl( + GroupControlBorder::getType(), + [ + 'name' => 'post_comment_border', + 'selector' => '{{WRAPPER}} .elementor-button', + 'separator' => 'before', + ] + ); + + $this->addControl( + 'post_comment_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'post_comment_box_shadow', + 'selector' => '{{WRAPPER}} .elementor-button', + ] + ); + + $this->addResponsiveControl( + 'post_comment_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'size_units' => ['px', 'em', '%'], + 'selectors' => [ + '{{WRAPPER}} a.elementor-button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + 'separator' => 'before', + ] + ); + + $this->endControlsSection(); + } + } + + /** + * Render product variations widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.8 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $productcomments = \Module::getInstanceByName('productcomments'); + + if (empty($productcomments->active) || $productcomments->author !== 'PrestaShop') { + return printf( + '', + __('Please install and enable the official "productcomments" module!') + ); + } + $context = \Context::getContext(); + $t = $context->getTranslator(); + $product = &$context->smarty->tpl_vars['product']->value; + $vars = $productcomments->getWidgetVariables('displayCE', [ + 'id_product' => (int) $product['id_product'], + ]); + + if (!$vars['nb_comments'] && $this->getSettings('hide_empty')) { + return; + } + $average_grade = \Tools::ps_round($vars['average_grade'], 1); + $this->setSettings('rating', $average_grade); + $settings = $this->getSettingsForDisplay(); + ?> + + + + + + + + + + trans('Write your review', [], 'Modules.Productcomments.Shop') ?> + + + updateControl( + 'due_date', + [ + 'type' => ControlsManager::HIDDEN, + 'default' => '', + ] + ); + } + + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-widget-' . parent::getName(); + } + + protected function render() + { + $product = &\Context::getContext()->smarty->tpl_vars['product']->value; + + if (!empty($product['specific_prices']['to']) && '0000-00-00 00:00:00' !== $product['specific_prices']['to']) { + $this->setSettings('due_date', $product['specific_prices']['to']); + + parent::render(); + } + } + + protected function renderSmarty() + { + $settings = $this->getSettingsForDisplay(); + ?> + {if !empty($product.specific_prices.to) && '0000-00-00 00:00:00' !== $product.specific_prices.to} +
getActions($settings))) ?>'> + getStrftime($settings) ?> +
+ +
+ + {/if} + addControl( + 'social', + [ + 'label' => __('Network'), + 'type' => ControlsManager::ICON, + 'label_block' => true, + 'default' => 'fa fa-tumblr', + 'include' => [ + 'fa fa-facebook', + 'fa fa-twitter', + 'fa fa-pinterest', + 'fa fa-tumblr', + ], + ] + ); + + $repeater->addControl( + 'link', + [ + 'type' => ControlsManager::URL, + 'classes' => 'elementor-hidden', + 'default' => [ + 'is_external' => 'true', + ], + ] + ); + + return $repeater->getControls(); + } + + protected function _registerControls() + { + parent::_registerControls(); + + $this->updateControl('section_social_icon', ['label' => __('Product Share')]); + } + + protected function render() + { + $context = \Context::getContext(); + + if ($context->controller instanceof \ProductController) { + $product = $context->controller->getProduct(); + $image_cover_id = $product->getCover($product->id); + + if (is_array($image_cover_id) && isset($image_cover_id['id_image'])) { + $image_cover_id = (int) $image_cover_id['id_image']; + } else { + $image_cover_id = 0; + } + $url = urlencode(addcslashes($context->link->getProductLink($product), "'")); + $name = urlencode(addcslashes($product->name, "'")); + $img = urlencode(addcslashes($context->link->getImageLink($product->link_rewrite, $image_cover_id), "'")); + } else { + $url = ''; + $name = ''; + $img = ''; + } + + $social_icon_list = $this->getSettings('social_icon_list'); + + foreach ($social_icon_list as &$item) { + $social = str_replace('fa fa-', '', $item['social']); + + switch ($social) { + case 'facebook': + $item['link']['url'] = "https://www.facebook.com/sharer.php?u=$url"; + break; + case 'twitter': + $item['link']['url'] = "https://twitter.com/intent/tweet?text=$name $url"; + break; + case 'pinterest': + $item['link']['url'] = "https://www.pinterest.com/pin/create/button/?media=$img&url=$url"; + break; + case 'tumblr': + $item['link']['url'] = "https://www.tumblr.com/share/link?url=$url"; + break; + } + } + $this->setSettings('social_icon_list', $social_icon_list); + + parent::render(); + } + + public function renderPlainContent() + { + } +} diff --git a/modules/creativeelements/modules/catalog/widgets/product-stock.php b/modules/creativeelements/modules/catalog/widgets/product-stock.php new file mode 100644 index 00000000..31e15cff --- /dev/null +++ b/modules/creativeelements/modules/catalog/widgets/product-stock.php @@ -0,0 +1,413 @@ +startControlsSection( + 'section_stock', + [ + 'label' => __('Product Stock'), + ] + ); + + $this->addControl( + 'heading_icon', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Icon'), + ] + ); + + $this->addControl( + 'in_stock_icon', + [ + 'label' => $this->translator->trans('In stock', [], 'Shop.Theme.Catalog'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-check', + ] + ); + + $this->addControl( + 'low_stock_level_icon', + [ + 'label' => $this->translator->trans('Low stock level', [], 'Admin.Catalog.Feature'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-exclamation', + ] + ); + + $this->addControl( + 'out_of_stock_icon', + [ + 'label' => $this->translator->trans('Out-of-Stock', [], 'Admin.Shopparameters.Feature'), + 'type' => ControlsManager::ICON, + 'default' => 'fa fa-times', + ] + ); + + if (is_admin()) { + $url = $this->context->link->getAdminLink('AdminPPreferences') . '#configuration_fieldset_stock'; + + $this->addControl( + 'configure', + [ + 'raw' => __('Global Settings') . '

' . + '' . + ' ' . __('Configure') . + '', + 'type' => ControlsManager::RAW_HTML, + 'classes' => 'elementor-control-descriptor', + 'separator' => 'before', + ] + ); + } + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_stock_style', + [ + 'label' => __('Product Stock'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'align', + [ + 'label' => __('Alignment'), + 'type' => ControlsManager::CHOOSE, + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'fa fa-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'fa fa-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'fa fa-align-right', + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => 'text-align: {{VALUE}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'text_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .ce-product-stock', + ] + ); + + $this->addControl( + 'heading_text_color', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Text Color'), + ] + ); + + $this->addControl( + 'in_stock_color', + [ + 'label' => $this->translator->trans('In stock', [], 'Shop.Theme.Catalog'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-stock--in-stock .ce-product-stock__availability' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'low_stock_level_color', + [ + 'label' => $this->translator->trans('Low stock level', [], 'Admin.Catalog.Feature'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-stock--low-stock-level .ce-product-stock__availability' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'out_of_stock_color', + [ + 'label' => $this->translator->trans('Out-of-Stock', [], 'Admin.Shopparameters.Feature'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-stock--out-of-stock .ce-product-stock__availability' => 'color: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_icon_style', + [ + 'label' => __('Icon'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'icon_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-stock__availability i' => 'margin-right: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .ce-product-stock__availability i' => 'margin-left: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'icon_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 16, + ], + 'range' => [ + 'px' => [ + 'min' => 6, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-stock__availability i' => 'font-size: {{SIZE}}{{UNIT}};', + ], + ] + ); + + $this->addControl( + 'heading_icon_color', + [ + 'type' => ControlsManager::HEADING, + 'label' => __('Color'), + ] + ); + + $this->addControl( + 'in_stock_icon_color', + [ + 'label' => $this->translator->trans('In stock', [], 'Shop.Theme.Catalog'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-stock--in-stock .ce-product-stock__availability i' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'low_stock_level_icon_color', + [ + 'label' => $this->translator->trans('Low stock level', [], 'Admin.Catalog.Feature'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-stock--low-stock-level .ce-product-stock__availability i' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'out_of_stock_icon_color', + [ + 'label' => $this->translator->trans('Out-of-Stock', [], 'Admin.Shopparameters.Feature'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-stock--out-of-stock .ce-product-stock__availability i' => 'color: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_min_quantity_style', + [ + 'label' => $this->translator->trans('Minimum quantity for sale', [], 'Admin.Catalog.Feature'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addResponsiveControl( + 'min_quantity_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'range' => [ + 'px' => [ + 'max' => 50, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-stock__min-quantity' => 'margin-top: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'min_quantity_typography', + 'label' => __('Typography'), + 'selector' => '{{WRAPPER}} .ce-product-stock__min-quantity', + ] + ); + + $this->addControl( + 'min_quantity_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-stock__min-quantity' => 'color: {{VALUE}}', + ], + ] + ); + + $this->endControlsSection(); + } + + protected function render() + { + $product = &$this->context->smarty->tpl_vars['product']->value; + $availability = 'available' === $product['availability'] ? 'in-stock' : ( + 'last_remaining_items' === $product['availability'] ? 'low-stock-level' : 'out-of-stock' + ); + if ($show_availability = $product['show_availability'] && $product['availability_message']) { + $availability_icon = $this->getSettings(str_replace('-', '_', $availability) . '_icon'); + } + ?> +
+ +
+ + + + + + +
+ + 1) : ?> +
+ translator->trans( + 'The minimum purchase order quantity for the product is %quantity%.', + ['%quantity%' => $product['minimal_quantity']], + 'Shop.Theme.Checkout' + ); + ?> +
+ +
+ getSettingsForDisplay(); + ?> + {$stock = ['available' => ['class' => 'in-stock', 'icon' => ], + 'unavailable' => ['class' => 'out-of-stock', 'icon' => ], + 'last_remaining_items' => ['class' => 'low-stock-level', + 'icon' => + ] + ]} +
+ {if $product.show_availability && $product.availability_message} +
+ {if $stock[$product.availability].icon} + + {/if} + {$product.availability_message} +
+ {/if} + {if $product.minimal_quantity > 1} +
+ {l s='The minimum purchase order quantity for the product is %quantity%.' sprintf=[ + '%quantity%' => $product.minimal_quantity + ] d='Shop.Theme.Checkout'} +
+ {/if} +
+ context = \Context::getContext(); + $this->translator = $this->context->getTranslator(); + + parent::__construct($data, $args); + } +} diff --git a/modules/creativeelements/modules/catalog/widgets/product-variants.php b/modules/creativeelements/modules/catalog/widgets/product-variants.php new file mode 100644 index 00000000..fc7960bf --- /dev/null +++ b/modules/creativeelements/modules/catalog/widgets/product-variants.php @@ -0,0 +1,1063 @@ +startControlsSection( + 'section_variations_style', + [ + 'label' => __('Product Variations'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'layout', + [ + 'label' => __('Layout'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'inline' => __('Inline'), + 'stacked' => __('Stacked'), + 'table' => __('Table'), + ], + 'default' => 'stacked', + 'prefix_class' => 'ce-product-variants--layout-', + 'render_type' => 'template', + ] + ); + + $this->addControl( + 'show_value', + [ + 'label' => __('Value'), + 'type' => ControlsManager::SWITCHER, + 'label_on' => __('Show'), + 'label_off' => __('Hide'), + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__label::after' => 'content: ":"', + ], + 'condition' => [ + 'layout' => 'stacked', + ], + 'render_type' => 'template', + ] + ); + + $this->addControl( + 'space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 20, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__item' => 'margin: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + '{{WRAPPER}} .ce-product-variants' => 'margin: 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}} 0', + ], + ] + ); + + $this->startControlsTabs('tabs_label'); + + $this->startControlsTab( + 'tab_label', + [ + 'label' => __('Label'), + ] + ); + + $this->addControl( + 'label_inline', + [ + 'label' => __('Inline'), + 'type' => ControlsManager::SWITCHER, + 'return_value' => 'inline', + 'prefix_class' => 'ce-product-variants--label-', + 'condition' => [ + 'layout' => 'inline', + ], + ] + ); + + $this->addControl( + 'label_vertical_align', + [ + 'label' => __('Vertical Align'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'flex-start' => [ + 'title' => __('Start'), + 'icon' => 'eicon-v-align-top', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-v-align-middle', + ], + 'flex-end' => [ + 'title' => __('End'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__item' => 'align-items: {{VALUE}}', + ], + 'condition' => [ + 'layout!' => 'stacked', + 'label_inline!' => '', + ], + ] + ); + + $this->addControl( + 'label_spacing', + [ + 'label' => __('Spacing'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 5, + ], + 'selectors' => [ + '{{WRAPPER}}.ce-product-variants--layout-stacked .ce-product-variants__label' => 'display: inline-block; margin-bottom: {{SIZE}}{{UNIT}}', + '{{WRAPPER}}.ce-product-variants--layout-inline:not(.ce-product-variants--label-inline) .ce-product-variants__label' => 'margin-bottom: {{SIZE}}{{UNIT}}', + 'body:not(.lang-rtl) {{WRAPPER}}.ce-product-variants--label-inline .ce-product-variants__label' => 'margin-right: {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}}.ce-product-variants--label-inline .ce-product-variants__label' => 'margin-left: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'layout!' => 'table', + ], + ] + ); + + $this->addResponsiveControl( + 'label_width', + [ + 'label' => __('Min Width'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'range' => [ + 'px' => [ + 'max' => 500, + ], + ], + 'default' => [ + 'size' => 100, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__label' => 'min-width: {{SIZE}}{{UNIT}}', + ], + 'condition' => [ + 'layout' => 'table', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'label_typography', + 'selector' => '{{WRAPPER}} .ce-product-variants__label', + ] + ); + + $this->addControl( + 'label_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__label' => 'color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_value', + [ + 'label' => __('Value'), + 'condition' => [ + 'layout' => 'stacked', + 'show_value!' => '', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'value_typography', + 'selector' => '{{WRAPPER}} .ce-product-variants__value', + ] + ); + + $this->addControl( + 'value_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__value' => 'color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + $this->endControlsTabs(); + + if (is_admin()) { + $url = \Context::getContext()->link->getAdminLink('AdminAttributesGroups'); + + $this->addControl( + 'configure', + [ + 'raw' => __('Product Attributes') . '

' . + '' . + ' ' . __('Configure') . + '', + 'type' => ControlsManager::RAW_HTML, + 'classes' => 'elementor-control-descriptor', + 'separator' => 'before', + ] + ); + } + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_select_style', + [ + 'label' => __('Drop-down List'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'select_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SELECT, + 'default' => 'sm', + 'options' => [ + 'xs' => __('Extra Small'), + 'sm' => __('Small'), + 'md' => __('Medium'), + 'lg' => __('Large'), + 'xl' => __('Extra Large'), + ], + ] + ); + + $this->addControl( + 'select_width', + [ + 'label' => __('Width'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'range' => [ + 'px' => [ + 'max' => 1000, + ], + ], + 'selectors' => [ + '{{WRAPPER}} select.elementor-field' => 'width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'select_typography', + 'selector' => '{{WRAPPER}} select.elementor-field', + ] + ); + + $this->startControlsTabs('tabs_style_select'); + + $this->startControlsTab( + 'tab_select_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'select_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} select.elementor-field' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'select_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} select.elementor-field' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'select_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#818a91', + 'selectors' => [ + '{{WRAPPER}} select.elementor-field' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_select_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'select_color_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} select.elementor-field:hover' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'select_bg_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} select.elementor-field:hover' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'select_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} select.elementor-field:hover' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'select_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 1, + ], + 'selectors' => [ + '{{WRAPPER}} select.elementor-field' => 'border-style: solid; border-width: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'select_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} select.elementor-field' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'select_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'selectors' => [ + '{{WRAPPER}} select.elementor-field' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'select_box_shadow', + 'selector' => '{{WRAPPER}} select.elementor-field', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_radio_style', + [ + 'label' => __('Radio Buttons'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'radio_space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-variants__options label' => 'margin: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-variants__options' => 'margin: 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}} 0', + 'body.lang-rtl {{WRAPPER}} .ce-product-variants__options label' => 'margin: 0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .ce-product-variants__options' => 'margin: 0 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'radio_min_width', + [ + 'label' => __('Min Width'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'range' => [ + 'px' => [ + 'max' => 500, + ], + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__option' => 'min-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addGroupControl( + GroupControlTypography::getType(), + [ + 'name' => 'radio_typography', + 'selector' => '{{WRAPPER}} .ce-product-variants__option', + ] + ); + + $this->startControlsTabs('tabs_style_radio'); + + $this->startControlsTab( + 'tab_radio_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'radio_color', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__option' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'radio_bg_color', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__option' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'radio_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#818a91', + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__option' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_radio_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'radio_color_hover', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} label:hover .ce-product-variants__option' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'radio_bg_color_hover', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} label:hover .ce-product-variants__option' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'radio_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} label:hover .ce-product-variants__option' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_radio_active', + [ + 'label' => __('Active'), + ] + ); + + $this->addControl( + 'radio_color_active', + [ + 'label' => __('Text Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input:checked ~ .ce-product-variants__option' => 'color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'radio_bg_color_active', + [ + 'label' => __('Background Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} input:checked ~ .ce-product-variants__option' => 'background-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'radio_border_color_active', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#5bc0de', + 'selectors' => [ + '{{WRAPPER}} input:checked ~ .ce-product-variants__option' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addControl( + 'radio_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__option' => 'border-style: solid; border-width: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->addControl( + 'radio_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__option' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addResponsiveControl( + 'radio_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::DIMENSIONS, + 'default' => [ + 'top' => 5, + 'right' => 10, + 'bottom' => 5, + 'left' => 10, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__option' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', + ], + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'radio_box_shadow', + 'selector' => '{{WRAPPER}} .ce-product-variants__option', + ] + ); + + $this->endControlsSection(); + + $this->startControlsSection( + 'section_pattern_style', + [ + 'label' => __('Color/Texture Buttons'), + 'tab' => ControlsManager::TAB_STYLE, + ] + ); + + $this->addControl( + 'pattern_space_between', + [ + 'label' => __('Space Between'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'selectors' => [ + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-variants__patterns label' => 'margin: 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}} 0', + 'body:not(.lang-rtl) {{WRAPPER}} .ce-product-variants__patterns' => 'margin: 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}} 0', + 'body.lang-rtl {{WRAPPER}} .ce-product-variants__patterns label' => 'margin: 0 0 {{SIZE}}{{UNIT}} {{SIZE}}{{UNIT}}', + 'body.lang-rtl {{WRAPPER}} .ce-product-variants__patterns' => 'margin: 0 0 -{{SIZE}}{{UNIT}} -{{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->startControlsTabs('tabs_style_pattern'); + + $this->startControlsTab( + 'tab_pattern_normal', + [ + 'label' => __('Normal'), + ] + ); + + $this->addControl( + 'pattern_border_color', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#818a91', + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_width', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'border-style: solid; border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_radius', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_padding', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'padding: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_pattern_hover', + [ + 'label' => __('Hover'), + ] + ); + + $this->addControl( + 'pattern_border_color_hover', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'selectors' => [ + '{{WRAPPER}} label:hover .ce-product-variants__pattern' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_width_hover', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} label:hover .ce-product-variants__pattern' => 'border-style: solid; border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_radius_hover', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} label:hover .ce-product-variants__pattern' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_padding_hover', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} label:hover .ce-product-variants__pattern' => 'padding: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->startControlsTab( + 'tab_pattern_active', + [ + 'label' => __('Active'), + ] + ); + + $this->addControl( + 'pattern_border_color_active', + [ + 'label' => __('Border Color'), + 'type' => ControlsManager::COLOR, + 'default' => '#5bc0de', + 'selectors' => [ + '{{WRAPPER}} input:checked ~ .ce-product-variants__pattern' => 'border-color: {{VALUE}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_width_active', + [ + 'label' => __('Border Width'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} input:checked ~ .ce-product-variants__pattern' => 'border-style: solid; border-width: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_border_radius_active', + [ + 'label' => __('Border Radius'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}} input:checked ~ .ce-product-variants__pattern' => 'border-radius: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->addControl( + 'pattern_padding_active', + [ + 'label' => __('Padding'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 2, + ], + 'selectors' => [ + '{{WRAPPER}} input:checked ~ .ce-product-variants__pattern' => 'padding: {{SIZE}}{{UNIT}}', + ], + ] + ); + + $this->endControlsTab(); + + $this->endControlsTabs(); + + $this->addResponsiveControl( + 'pattern_size', + [ + 'label' => __('Size'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 30, + ], + 'selectors' => [ + '{{WRAPPER}} .ce-product-variants__pattern' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}}', + ], + 'separator' => 'before', + ] + ); + + $this->addGroupControl( + GroupControlBoxShadow::getType(), + [ + 'name' => 'pattern_box_shadow', + 'selector' => '{{WRAPPER}} .ce-product-variants__pattern', + ] + ); + + $this->endControlsSection(); + } + + /** + * Get HTML wrapper class. + * + * Retrieve the widget container class. + * + * @since 2.5.8 + * @access protected + */ + protected function getHtmlWrapperClass() + { + return parent::getHtmlWrapperClass() . ' elementor-overflow-hidden'; + } + + /** + * Render product variations widget output on the frontend. + * + * Written in PHP and used to generate the final HTML. + * + * @since 2.5.8 + * @access protected + * @codingStandardsIgnoreStart Generic.Files.LineLength + */ + protected function render() + { + $settings = $this->getSettingsForDisplay(); + $context = \Context::getContext(); + $groups = &$context->smarty->tpl_vars['groups']->value; + ?> +
+ $group) : ?> + +
+ + + + + + + + + +
+ +
+ +
+ $group_attr) : ?> + + +
+ +
+ $group_attr) : ?> + + +
+ +
+ + +
+ widgets_manager->ajaxRenderWidget(); + empty($response) or http_response_code(200); + die(json_encode($response)); + } elseif ('tags' === $render && \Tools::getIsset('data')) { + $this->tplOverride = ''; + + $response = Plugin::$instance->dynamic_tags->ajaxRenderTags(); + empty($response) or http_response_code(200); + die(json_encode($response)); + } + + header_register_callback(function () { + header_remove('Content-Security-Policy'); + header_remove('X-Content-Type-Options'); + header_remove('X-Frame-Options'); + header_remove('X-Xss-Protection'); + }); + } + + require_once _CE_PATH_ . 'classes/assets/CEAssetManager.php'; + + \CEAssetManager::instance(); + } + + public function enqueuePreviewScripts() + { + // Redirect to preview page when edited hook is missing + $uid = \Tools::getValue('preview_id'); + + if ($uid && UId::CONTENT === UId::parse($uid)->id_type) { + $tab = 'AdminCEContent'; + $id_employee = (int) \Tools::getValue('id_employee'); + + wp_register_script( + 'editor-preview', + _CE_ASSETS_URL_ . 'js/editor-preview.js', + [], + _CE_VERSION_, + true + ); + + wp_localize_script( + 'editor-preview', + 'cePreview', + \Context::getContext()->link->getModuleLink('creativeelements', 'preview', [ + 'id_employee' => $id_employee, + 'adtoken' => \Tools::getAdminToken($tab . (int) \Tab::getIdFromClassName($tab) . $id_employee), + 'preview_id' => $uid, + 'ctx' => (int) \Tools::getValue('ctx'), + ], null, null, null, true) + ); + + wp_enqueue_script('editor-preview'); + } + } + + public function enqueueFrontendScripts() + { + // Add Quick Edit button on frontend when employee has active session + if ($editor = $this->getEditorLink()) { + wp_register_script('frontend-edit', _CE_ASSETS_URL_ . 'js/frontend-edit.js', [], _CE_VERSION_); + wp_localize_script('frontend-edit', 'ceFrontendEdit', [ + 'editor_url' => $editor, + 'edit_title' => __('Edit with Creative Elements'), + ]); + wp_enqueue_script('frontend-edit'); + wp_enqueue_style('frontend-edit', _CE_ASSETS_URL_ . 'css/frontend-edit.css', [], _CE_VERSION_); + } + } + + private function getEditorLink() + { + static $link; + + if (null === $link) { + $link = ''; + + if (\Configuration::get('elementor_frontend_edit') && + ($id_employee = get_current_user_id()) && + ($dir = glob(_PS_ROOT_DIR_ . '/*/filemanager', GLOB_ONLYDIR)) + ) { + $tab = 'AdminCEEditor'; + $link = __PS_BASE_URI__ . basename(dirname($dir[0])) . '/index.php?' . http_build_query([ + 'controller' => $tab, + 'token' => \Tools::getAdminToken($tab . (int) \Tab::getIdFromClassName($tab) . $id_employee), + ]); + } + } + return $link; + } + + public function preloadFonts() + { + $lib = _MODULE_DIR_ . 'creativeelements/views/lib'; + ?> + " + as="font" type="font/woff2" crossorigin> + + " + as="font" type="font/woff2" crossorigin> + render_tabs) or Helper::$section_stack[0]->render_tabs = []; + + return Helper::$section_stack[0]->render_tabs[] = $should_render; + }, 999999); + } +} diff --git a/modules/creativeelements/modules/custom-css/index.php b/modules/creativeelements/modules/custom-css/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/modules/custom-css/index.php @@ -0,0 +1,8 @@ +getSettings(); + + if (empty($element_settings['custom_css'])) { + return; + } + + $css = trim($element_settings['custom_css']); + + if (empty($css)) { + return; + } + $css = str_replace('selector', $post_css->getElementUniqueSelector($element), $css); + + // Add a css comment + $css = sprintf('/* Start custom CSS for %s, class: %s */', $element->getName(), $element->getUniqueSelector()) . $css . '/* End custom CSS */'; + + $post_css->getStylesheet()->addRawCss($css); + } + + /** + * @param $post_css Post + */ + public function addPageSettingsCss($post_css) + { + $document = Plugin::$instance->documents->get($post_css->getPostId()); + $custom_css = $document->getSettings('custom_css'); + + $custom_css = trim($custom_css); + + if (empty($custom_css)) { + return; + } + + $custom_css = str_replace('selector', $document->getCssWrapperSelector(), $custom_css); + + // Add a css comment + $custom_css = '/* Start custom CSS for page-settings */' . $custom_css . '/* End custom CSS */'; + + $post_css->getStylesheet()->addRawCss($custom_css); + } + + public function __construct() + { + add_action('elementor/element/parse_css', [$this, 'add_post_css'], 10, 2); + add_action('elementor/css-file/post/parse', [$this, 'add_page_settings_css']); + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/index.php b/modules/creativeelements/modules/dynamic-tags/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/index.php @@ -0,0 +1,8 @@ + [ + 'title' => __('Site'), + ], + self::CATALOG_GROUP => [ + 'title' => __('Catalog'), + ], + self::MEDIA_GROUP => [ + 'title' => __('Media'), + ], + self::ACTION_GROUP => [ + 'title' => __('Actions'), + ], + self::POST_GROUP => [ + 'title' => __('Post'), + ], + self::AUTHOR_GROUP => [ + 'title' => __('Author'), + ], + self::COMMENTS_GROUP => [ + 'title' => __('Comments'), + ], + ]; + } + + /** + * Register groups. + * + * Add all the available tag groups. + * + * @since 2.0.0 + * @access private + */ + private function registerGroups() + { + foreach ($this->getGroups() as $group_name => $group_settings) { + Plugin::$instance->dynamic_tags->registerGroup($group_name, $group_settings); + } + } + + /** + * Register tags. + * + * Add all the available dynamic tags. + * + * @since 2.0.0 + * @access public + * + * @param Manager $dynamic_tags + */ + public function registerTags($dynamic_tags) + { + foreach ($this->getTagClassesNames() as $tag_class) { + /** @var Tag $class_name */ + $class_name = 'CE\ModulesXDynamicTagsXTagsX' . $tag_class; + + $dynamic_tags->registerTag($class_name); + } + } + + /** + * Dynamic tags module constructor. + * + * Initializing Elementor dynamic tags module. + * + * @since 2.0.0 + * @access public + */ + public function __construct() + { + $this->registerGroups(); + + add_action('elementor/dynamic_tags/register_tags', [$this, 'registerTags']); + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/carousel.php b/modules/creativeelements/modules/dynamic-tags/tags/carousel.php new file mode 100644 index 00000000..7767a0e6 --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/carousel.php @@ -0,0 +1,106 @@ +addControl( + 'action', + [ + 'label' => __('Action'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'next' => __('Next'), + 'prev' => __('Previous'), + 'goto' => __('Go To'), + 'play' => __('Play'), + 'pause' => __('Pause'), + ], + 'default' => 'next', + ] + ); + + $this->addControl( + 'goto', + [ + 'label' => __('Slide'), + 'type' => ControlsManager::NUMBER, + 'min' => 1, + 'condition' => [ + 'action' => 'goto', + ], + ] + ); + } + + protected function registerAdvancedSection() + { + $this->startControlsSection( + 'advanced', + [ + 'label' => __('Advanced'), + ] + ); + + $this->addControl( + 'selector', + [ + 'label' => __('Selector'), + 'type' => ControlsManager::TEXT, + 'label_block' => true, + 'placeholder' => __('e.g. #primary / .wrapper / main etc'), + ] + ); + + $this->endControlsSection(); + } + + public function getValue(array $options = []) + { + $settings = $this->getSettings(); + + if (!$settings['selector']) { + unset($settings['selector']); + } + return Module::createActionUrl('carousel', $settings); + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/contact-url.php b/modules/creativeelements/modules/dynamic-tags/tags/contact-url.php new file mode 100644 index 00000000..6e63e197 --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/contact-url.php @@ -0,0 +1,471 @@ +addControl( + 'link_type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Select...'), + 'email' => __('Email'), + 'tel' => __('Tel'), + 'sms' => __('SMS'), + 'whatsapp' => __('WhatsApp'), + 'skype' => __('Skype'), + 'messenger' => __('Messenger'), + 'viber' => __('Viber'), + 'waze' => __('Waze'), + 'google_calendar' => __('Google Calendar'), + 'outlook_calendar' => __('Outlook Calendar'), + 'yahoo_calendar' => __('Yahoo Calendar'), + ], + ] + ); + + $this->addControl( + 'mail_to', + [ + 'label' => __('Email'), + 'type' => ControlsManager::TEXT, + 'condition' => [ + 'link_type' => 'email', + ], + ] + ); + + $this->addControl( + 'mail_subject', + [ + 'label' => __('Subject'), + 'type' => ControlsManager::TEXT, + 'label_block' => 'true', + 'condition' => [ + 'link_type' => 'email', + ], + ] + ); + + $this->addControl( + 'mail_body', + [ + 'label' => __('Message'), + 'type' => ControlsManager::TEXTAREA, + 'label_block' => 'true', + 'condition' => [ + 'link_type' => 'email', + ], + ] + ); + + $this->addControl( + 'tel_number', + [ + 'label' => __('Number'), + 'type' => ControlsManager::TEXT, + 'condition' => [ + 'link_type' => [ + 'tel', + 'sms', + 'whatsapp', + 'viber', + ], + ], + ] + ); + + $this->addControl( + 'username', + [ + 'label' => __('Username'), + 'type' => ControlsManager::TEXT, + 'condition' => [ + 'link_type' => ['skype', 'messenger'], + ], + ] + ); + + $this->addControl( + 'viber_action', + [ + 'label' => __('Action'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'contact' => __('Contact'), + 'add' => __('Add'), + ], + 'default' => 'contact', + 'condition' => [ + 'link_type' => 'viber', + ], + ] + ); + + $this->addControl( + 'skype_action', + [ + 'label' => __('Action'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'call' => __('Call'), + 'chat' => __('Chat'), + 'userinfo' => __('Show Profile'), + 'add' => __('Add to Contacts'), + 'voicemail' => __('Send Voice Mail'), + ], + 'default' => 'call', + 'condition' => [ + 'link_type' => 'skype', + ], + ] + ); + + $this->addControl( + 'waze_address', + [ + 'label' => __('Location'), + 'type' => ControlsManager::TEXT, + 'label_block' => 'true', + 'condition' => [ + 'link_type' => 'waze', + ], + ] + ); + + $this->addControl( + 'event_title', + [ + 'label' => __('Title'), + 'type' => ControlsManager::TEXT, + 'label_block' => 'true', + 'condition' => [ + 'link_type' => [ + 'google_calendar', + 'outlook_calendar', + 'yahoo_calendar', + ], + ], + ] + ); + + $this->addControl( + 'event_description', + [ + 'label' => __('Description'), + 'type' => ControlsManager::TEXTAREA, + 'condition' => [ + 'link_type' => [ + 'google_calendar', + 'outlook_calendar', + 'yahoo_calendar', + ], + ], + ] + ); + + $this->addControl( + 'event_location', + [ + 'label' => __('Location'), + 'type' => ControlsManager::TEXT, + 'label_block' => 'true', + 'condition' => [ + 'link_type' => [ + 'google_calendar', + 'outlook_calendar', + 'yahoo_calendar', + ], + ], + ] + ); + + $this->addControl( + 'event_start_date', + [ + 'label' => __('Start'), + 'type' => ControlsManager::DATE_TIME, + 'condition' => [ + 'link_type' => [ + 'google_calendar', + 'outlook_calendar', + 'yahoo_calendar', + ], + ], + ] + ); + + $this->addControl( + 'event_end_date', + [ + 'label' => __('End'), + 'type' => ControlsManager::DATE_TIME, + 'condition' => [ + 'link_type' => [ + 'google_calendar', + 'outlook_calendar', + 'yahoo_calendar', + ], + ], + ] + ); + } + + private function buildMailToLink($settings) + { + if (empty($settings['mail_to'])) { + return ''; + } + + $link = 'mailto:' . $settings['mail_to'] . '?'; + + $build_parts = []; + + if (!empty($settings['mail_subject'])) { + $build_parts['subject'] = $this->escapeSpaceInUrl($settings['mail_subject']); + } + + if (!empty($settings['mail_body'])) { + $build_parts['body'] = $this->escapeSpaceInUrl($settings['mail_body']); + } + + return add_query_arg($build_parts, $link); + } + + private function buildSmsLink($settings) + { + if (empty($settings['tel_number'])) { + return ''; + } + + $value = 'sms:' . $settings['tel_number']; + return $value; + } + + private function buildWhatsappLink($settings) + { + if (empty($settings['tel_number'])) { + return ''; + } + + return 'https://api.whatsapp.com/send?phone=' . $settings['tel_number']; + } + + private function buildSkypeLink($settings) + { + if (empty($settings['username'])) { + return ''; + } + + $action = 'call'; + if (!empty($settings['skype_action'])) { + $action = $settings['skype_action']; + } + $link = 'skype:' . $settings['username'] . '?' . $action; + return $link; + } + + private function buildWazeLink($settings) + { + $link = 'https://waze.com/ul?'; + + $build_parts = [ + 'q' => $settings['waze_address'], + 'z' => 10, + 'navigate' => 'yes', + ]; + + return add_query_arg($build_parts, $link); + } + + private function dateToIso($date, $all_day = false) + { + $time = strtotime($date); + if ($all_day) { + return date('Ymd\/Ymd', $time); + } + return date('Ymd\THis', $time); + } + + private function dateToIcs($date) + { + $time = strtotime($date); + return date('Y-m-d\Th:i:s', $time); + } + + private function escapeSpaceInUrl($url) + { + return str_replace(' ', '%20', $url); + } + + private function buildGoogleCalendarLink($settings) + { + $dates = ''; + if (!empty($settings['event_start_date'])) { + if (empty($settings['event_end_date'])) { + $dates = $this->dateToIso($settings['event_start_date'], true); + } else { + $dates = $this->dateToIso($settings['event_start_date']) . '/' . $this->dateToIso($settings['event_end_date']); + } + } + $link = 'https://www.google.com/calendar/render?action=TEMPLATE&'; + $build_parts = [ + 'text' => empty($settings['event_title']) ? '' : $this->escapeSpaceInUrl($settings['event_title']), + 'details' => empty($settings['event_description']) ? '' : $this->escapeSpaceInUrl($settings['event_description']), + 'dates' => $dates, + 'location' => empty($settings['event_location']) ? '' : $this->escapeSpaceInUrl($settings['event_location']), + ]; + + return add_query_arg($build_parts, $link); + } + + private function buildOutlookCalendarLink($settings) + { + $link = 'https://outlook.office.com/owa/?path=/calendar/action/compose&'; + $build_parts = [ + 'subject' => empty($settings['event_title']) ? '' : urlencode($settings['event_title']), + 'body' => empty($settings['event_description']) ? '' : urlencode($settings['event_description']), + 'location' => empty($settings['event_location']) ? '' : urlencode($settings['event_location']), + ]; + + if (!empty($settings['event_start_date'])) { + $build_parts['startdt'] = urlencode($this->dateToIcs($settings['event_start_date'])); + } + + if (!empty($settings['event_end_date'])) { + $build_parts['enddt'] = urlencode($this->dateToIcs($settings['event_end_date'])); + } + + return add_query_arg($build_parts, $link); + } + + private function buildMessengerLink($settings) + { + if (empty($settings['username'])) { + return ''; + } + return 'https://m.me/' . $settings['username']; + } + + private function buildYahooCalendarLink($settings) + { + $link = 'https://calendar.yahoo.com/?v=60&view=d&type=20'; + $build_parts = [ + 'title' => empty($settings['event_title']) ? '' : urlencode($settings['event_title']), + 'desc' => empty($settings['event_description']) ? '' : urlencode($settings['event_description']), + 'in_loc' => empty($settings['event_location']) ? '' : urlencode($settings['event_location']), + ]; + + if (!empty($settings['event_start_date'])) { + $build_parts['st'] = urlencode(date('Ymd\This', strtotime($settings['event_start_date']))); + } + + if (!empty($settings['event_end_date'])) { + $build_parts['et'] = urlencode(date('Ymd\This', strtotime($settings['event_end_date']))); + } + + return add_query_arg($build_parts, $link); + } + + public function buildViberLink($settings) + { + if (empty($settings['tel_number'])) { + return ''; + } + $action = 'contact'; + if (!empty($settings['viber_action'])) { + $action = $settings['viber_action']; + } + return add_query_arg([ + 'number' => urlencode($settings['tel_number']), + ], 'viber://' . $action); + } + + public function getValue(array $options = []) + { + $settings = $this->getSettings(); + + if (empty($settings['link_type'])) { + return; + } + + $value = ''; + switch ($settings['link_type']) { + case 'email': + $value = $this->buildMailToLink($settings); + break; + case 'tel': + $value = (empty($settings['tel_number']) ? '' : 'tel:' . $settings['tel_number']); + break; + case 'sms': + $value = $this->buildSmsLink($settings); + break; + case 'messenger': + $value = $this->buildMessengerLink($settings); + break; + case 'whatsapp': + $value = $this->buildWhatsappLink($settings); + break; + case 'skype': + $value = $this->buildSkypeLink($settings); + break; + case 'waze': + $value = $this->buildWazeLink($settings); + break; + case 'google_calendar': + $value = $this->buildGoogleCalendarLink($settings); + break; + case 'outlook_calendar': + $value = $this->buildOutlookCalendarLink($settings); + break; + case 'yahoo_calendar': + $value = $this->buildYahooCalendarLink($settings); + break; + case 'viber': + $value = $this->buildViberLink($settings); + break; + } + return $value; + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/current-date-time.php b/modules/creativeelements/modules/dynamic-tags/tags/current-date-time.php new file mode 100644 index 00000000..d0ce310f --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/current-date-time.php @@ -0,0 +1,129 @@ +addControl( + 'date_format', + [ + 'label' => __('Date Format'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + '' => __('None'), + 'F j, Y' => date('F j, Y'), + 'Y-m-d' => date('Y-m-d'), + 'm/d/Y' => date('m/d/Y'), + 'd/m/Y' => date('d/m/Y'), + 'custom' => __('Custom'), + ], + 'default' => 'default', + ] + ); + + $this->addControl( + 'time_format', + [ + 'label' => __('Time Format'), + 'type' => ControlsManager::SELECT, + 'options' => [ + 'default' => __('Default'), + '' => __('None'), + 'g:i a' => date('g:i a'), + 'g:i A' => date('g:i A'), + 'H:i' => date('H:i'), + ], + 'default' => 'default', + 'condition' => [ + 'date_format!' => 'custom', + ], + ] + ); + + $this->addControl( + 'custom_format', + [ + 'label' => __('Custom Format'), + 'default' => \Context::getContext()->language->date_format_full, + 'description' => sprintf( + '%s', + __('Documentation on date and time formatting') + ), + 'condition' => [ + 'date_format' => 'custom', + ], + ] + ); + } + + public function render() + { + $settings = $this->getSettings(); + + if ('custom' === $settings['date_format']) { + $format = $settings['custom_format']; + } else { + $language = \Context::getContext()->language; + $date_format = $settings['date_format']; + $time_format = $settings['time_format']; + $format = ''; + + if ('default' === $date_format) { + $date_format = $language->date_format_lite; + } + if ('default' === $time_format) { + $time_format = \Tools::substr($language->date_format_full, \Tools::strlen($language->date_format_lite)); + } + + if ($date_format) { + $format = $date_format; + $has_date = true; + } else { + $has_date = false; + } + + if ($time_format) { + if ($has_date) { + $format .= ' '; + } + $format .= $time_format; + } + } + echo date($format); + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/index.php b/modules/creativeelements/modules/dynamic-tags/tags/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/index.php @@ -0,0 +1,8 @@ + __('Select...'), + 'product' => __('Product'), + 'category' => __('Category'), + ]; + $display_suppliers = \Configuration::get('PS_DISPLAY_SUPPLIERS'); + $display_manufacturers = version_compare(_PS_VERSION_, '1.7.7', '<') + ? $display_suppliers + : \Configuration::get('PS_DISPLAY_MANUFACTURERS') + ; + empty($display_manufacturers) or $type_options['manufacturer'] = __('Brand'); + empty($display_suppliers) or $type_options['supplier'] = __('Supplier'); + + $this->addControl( + 'type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'options' => &$type_options, + ] + ); + + $this->addControl( + 'id_product', + [ + 'label' => __('Search & Select'), + 'type' => ControlsManager::SELECT2, + 'label_block' => true, + 'select2options' => [ + 'placeholder' => __('Type Product Name / Ref'), + 'product' => true, + 'ajax' => [ + 'url' => Helper::getAjaxProductsListLink(), + ], + ], + 'condition' => [ + 'type' => 'product', + ], + ] + ); + + $this->addControl( + 'id_category', + [ + 'label' => __('Search & Select'), + 'label_block' => true, + 'type' => SelectCategory::CONTROL_TYPE, + 'select2options' => [ + 'allowClear' => false, + ], + 'default' => 2, + 'condition' => [ + 'type' => 'category', + ], + ] + ); + + empty($display_manufacturers) or $this->addControl( + 'id_manufacturer', + [ + 'label' => __('Search & Select'), + 'label_block' => true, + 'type' => SelectManufacturer::CONTROL_TYPE, + 'select2options' => [ + 'placeholder' => __('Select...'), + ], + 'condition' => [ + 'type' => 'manufacturer', + ], + ] + ); + + empty($display_suppliers) or $this->addControl( + 'id_supplier', + [ + 'label' => __('Search & Select'), + 'label_block' => true, + 'type' => SelectSupplier::CONTROL_TYPE, + 'select2options' => [ + 'placeholder' => __('Select...'), + ], + 'condition' => [ + 'type' => 'supplier', + ], + ] + ); + } + + public function getValue(array $options = []) + { + $settings = $this->getSettings(); + $type = $settings['type']; + $context = \Context::getContext(); + $id_lang = (int) $context->language->id; + + if ('product' === $type && !empty($settings['id_product'])) { + return $context->link->getProductLink(new \Product($settings['id_product'], false, $id_lang)); + } + if ('category' === $type) { + return $context->link->getCategoryLink(new \Category($settings['id_category'], $id_lang)); + } + if ('manufacturer' === $type) { + return $context->link->getManufacturerLink(new \Manufacturer($settings['id_manufacturer'], $id_lang)); + } + if ('supplier' === $type) { + return $context->link->getSupplierLink(new \Supplier($settings['id_supplier'], $id_lang)); + } + } + + protected function getSmartyValue(array $options = []) + { + $settings = $this->getSettings(); + $type = $settings['type']; + + if ('product' === $type && !empty($settings['id_product'])) { + $id = (int) $settings['id_product']; + + return "{\$link->getProductLink(ce_new(Product, $id, false, \$language.id))}"; + } + if ('category' === $type) { + $id = (int) $settings['id_category']; + + return "{\$link->getCategoryLink(ce_new(Category, $id, \$language.id))}"; + } + if ('manufacturer' === $type) { + $id = (int) $settings['id_manufacturer']; + + return "{\$link->getManufacturerLink(ce_new(Manufacturer, $id, \$language.id))}"; + } + if ('supplier' === $type) { + $id = (int) $settings['id_supplier']; + + return "{\$link->getSupplierLink(ce_new(Supplier, $id, \$language.id))}"; + } + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/lightbox.php b/modules/creativeelements/modules/dynamic-tags/tags/lightbox.php new file mode 100644 index 00000000..fb92ad5f --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/lightbox.php @@ -0,0 +1,134 @@ +addControl( + 'type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::CHOOSE, + 'label_block' => false, + 'options' => [ + 'video' => [ + 'title' => __('Video'), + 'icon' => 'fa fa-video-camera', + ], + 'image' => [ + 'title' => __('Image'), + 'icon' => 'fa fa-image', + ], + ], + ] + ); + + $this->addControl( + 'image', + [ + 'label' => __('Image'), + 'type' => ControlsManager::MEDIA, + 'condition' => [ + 'type' => 'image', + ], + ] + ); + + $this->addControl( + 'video_url', + [ + 'label' => __('Video Link'), + 'type' => ControlsManager::TEXT, + 'label_block' => true, + 'placeholder' => 'https://www.youtube.com/watch?v=XHOmBV4js_E', + 'condition' => [ + 'type' => 'video', + ], + ] + ); + } + + private function getVideoSettings(&$settings) + { + $video_properties = Embed::getVideoProperties($settings['video_url']); + $video_url = null; + if (!$video_properties) { + $video_type = 'hosted'; + $video_url = $settings['video_url']; + } else { + $video_type = $video_properties['provider']; + $video_url = Embed::getEmbedUrl($settings['video_url']); + } + + if (null === $video_url) { + return ''; + } + + return [ + 'type' => 'video', + 'videoType' => $video_type, + 'url' => $video_url, + ]; + } + + public function getValue(array $options = []) + { + $settings = $this->getSettings(); + + if (!$settings['type']) { + return; + } + + if ('image' === $settings['type'] && !empty($settings['image']['url'])) { + $value = [ + 'url' => Helper::getMediaLink($settings['image']['url']), + 'type' => 'image', + ]; + } elseif ('video' === $settings['type'] && $settings['video_url']) { + $value = $this->getVideoSettings($settings); + } + + if (isset($value)) { + return Module::createActionUrl('lightbox', $value); + } + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/page-title.php b/modules/creativeelements/modules/dynamic-tags/tags/page-title.php new file mode 100644 index 00000000..5c6495bb --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/page-title.php @@ -0,0 +1,52 @@ +smarty->tpl_vars['breadcrumb']->value; + + echo esc_html($breadcrumb['links'][$breadcrumb['count'] - 1]['title']); + } + + public function renderSmarty() + { + echo '{$breadcrumb.links[count($breadcrumb)-1].title}'; + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/request-parameter.php b/modules/creativeelements/modules/dynamic-tags/tags/request-parameter.php new file mode 100644 index 00000000..c3d1b9c1 --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/request-parameter.php @@ -0,0 +1,91 @@ +addControl( + 'request_type', + [ + 'label' => __('Type'), + 'type' => ControlsManager::SELECT, + 'default' => 'get', + 'options' => [ + 'get' => 'GET', + 'post' => 'POST', + 'query_var' => 'REQUEST', + ], + ] + ); + $this->addControl( + 'param_name', + [ + 'label' => __('Parameter Name'), + 'type' => ControlsManager::TEXT, + ] + ); + } + + public function render() + { + $settings = $this->getSettings(); + + if (empty($settings['param_name'])) { + return; + } + $param_name = $settings['param_name']; + $value = ''; + + switch ($settings['request_type']) { + case 'get': + empty(${'_GET'}[$param_name]) or $value = ${'_GET'}[$param_name]; + break; + case 'post': + empty(${'_POST'}[$param_name]) or $value = ${'_POST'}[$param_name]; + break; + case 'query_var': + $value = \Tools::getValue($param_name); + break; + } + echo htmlentities(wp_kses_post($value)); + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/shortcode.php b/modules/creativeelements/modules/dynamic-tags/tags/shortcode.php new file mode 100644 index 00000000..9d82b63f --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/shortcode.php @@ -0,0 +1,66 @@ +addControl( + 'shortcode', + [ + 'label' => __('Shortcode'), + 'type' => ControlsManager::TEXTAREA, + 'placeholder' => "{hook h='displayShortcode'}", + ] + ); + } + + public function render() + { + echo do_shortcode($this->getSettings('shortcode')); + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/site-contact.php b/modules/creativeelements/modules/dynamic-tags/tags/site-contact.php new file mode 100644 index 00000000..c0c3f759 --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/site-contact.php @@ -0,0 +1,85 @@ +addControl( + 'type', + [ + 'label' => __('Field'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Select...'), + 'company' => __('Company'), + 'address' => __('Address'), + 'phone' => __('Tel'), + 'fax' => __('Fax'), + 'email' => __('Email'), + ], + ] + ); + } + + public function render() + { + $type = $this->getSettings('type'); + + switch ($type) { + case 'company': + echo \Configuration::get('PS_SHOP_NAME'); + break; + case 'address': + echo \AddressFormat::generateAddress(\Context::getContext()->shop->getAddress(), [], '
'); + break; + case 'phone': + echo \Configuration::get('PS_SHOP_PHONE'); + break; + case 'fax': + echo \Configuration::get('PS_SHOP_FAX'); + break; + case 'email': + echo \Configuration::get('PS_SHOP_EMAIL'); + break; + } + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/site-logo.php b/modules/creativeelements/modules/dynamic-tags/tags/site-logo.php new file mode 100644 index 00000000..3f2729c1 --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/site-logo.php @@ -0,0 +1,54 @@ + '', + 'url' => 'img/' . \Configuration::get('PS_LOGO'), + ]; + } + + protected function getSmartyValue(array $options = []) + { + return [ + 'id' => '', + 'url' => 'img/{Configuration::get(PS_LOGO)}', + ]; + } +} diff --git a/modules/creativeelements/modules/dynamic-tags/tags/site-title.php b/modules/creativeelements/modules/dynamic-tags/tags/site-title.php new file mode 100644 index 00000000..e50ed918 --- /dev/null +++ b/modules/creativeelements/modules/dynamic-tags/tags/site-title.php @@ -0,0 +1,43 @@ +addControl( + 'type', + [ + 'label' => __('Field'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Select...'), + 'id' => __('ID'), + 'display_name' => __('Display Name'), + 'first_name' => __('First Name'), + 'last_name' => __('Last Name'), + 'birthday' => __('Birthday'), + 'company' => __('Company'), + 'email' => __('Email'), + 'url' => __('Website'), + ], + ] + ); + } + + public function render() + { + $customer = \Context::getContext()->customer; + + if (empty($customer->id)) { + return; + } + $type = $this->getSettings('type'); + + switch ($type) { + case 'id': + case 'email': + case 'birthday': + case 'company': + echo $customer->$type; + break; + case 'first_name': + case 'last_name': + $field = str_replace('_', '', $type); + echo $customer->$field; + break; + case 'display_name': + echo $customer->firstname . ' ' . $customer->lastname; + break; + case 'url': + echo $customer->website; + } + } +} diff --git a/modules/creativeelements/modules/fonts-manager/index.php b/modules/creativeelements/modules/fonts-manager/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/modules/fonts-manager/index.php @@ -0,0 +1,8 @@ + __('Custom'), + ]; + return array_merge($new_groups, $font_groups); + } + + public function registerFontsInControl($fonts) + { + return array_merge($this->getFontTypes(), $fonts); + } + + public function enqueueFonts($post_css) + { + $stylesheet = $post_css->getStylesheet(); + $used_fonts = $post_css->getFonts(); + $custom_fonts = $this->getFonts(); + + foreach ($used_fonts as $font_family) { + if (!isset($custom_fonts[$font_family]['font_face']) || in_array($font_family, $this->enqueued_fonts)) { + continue; + } + $font_faces = str_replace('{{BASE}}', __PS_BASE_URI__, $custom_fonts[$font_family]['font_face']); + + $stylesheet->addRawCss("/* Start Custom Fonts CSS */ $font_faces /* End Custom Fonts CSS */"); + + $this->enqueued_fonts[] = $font_family; + } + } + + public function fontsManagerPanelActionData(array $data) + { + if (empty($data['type'])) { + throw new \Exception('font_type_is_required'); + } + + if (empty($data['font'])) { + throw new \Exception('font_is_required'); + } + + $font_family = preg_replace('/[^\w \-]+/', '', $data['font']); + + $font = $this->getFonts($font_family); + + if (empty($font['font_face'])) { + $error_message = sprintf(__('Font %s was not found.'), $font_family); + + throw new \Exception($error_message); + } + + return str_replace('{{BASE}}', __PS_BASE_URI__, $font); + } + + public function registerAjaxActions(Ajax $ajax) + { + $ajax->registerAjaxAction('assets_manager_panel_action_data', [$this, 'fontsManagerPanelActionData']); + } + + public function __construct() + { + add_filter('elementor/fonts/groups', [$this, 'registerFontsGroups']); + add_filter('elementor/fonts/additional_fonts', [$this, 'registerFontsInControl']); + + add_action('elementor/css-file/post/parse', [$this, 'enqueueFonts']); + add_action('elementor/css-file/global/parse', [$this, 'enqueueFonts']); + // Ajax + add_action('elementor/ajax/register_actions', [$this, 'registerAjaxActions']); + + do_action('elementor/fonts_manager_loaded', $this); + } +} diff --git a/modules/creativeelements/modules/history/index.php b/modules/creativeelements/modules/history/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/modules/history/index.php @@ -0,0 +1,8 @@ + [ + 'history' => __('History'), + 'template' => __('Template'), + 'added' => __('Added'), + 'removed' => __('Removed'), + 'edited' => __('Edited'), + 'moved' => __('Moved'), + 'editing_started' => __('Editing Started'), + 'style_pasted' => __('Style Pasted'), + 'style_reset' => __('Style Reset'), + 'all_content' => __('All Content'), + ], + ]); + + return $settings; + } + + /** + * @since 2.3.0 + * @access public + */ + public function addTemplates() + { + Plugin::$instance->common->addTemplate(_CE_PATH_ . 'modules/history/views/history-panel-template.php'); + Plugin::$instance->common->addTemplate(_CE_PATH_ . 'modules/history/views/revisions-panel-template.php'); + } + + /** + * History module constructor. + * + * Initializing Elementor history module. + * + * @since 1.7.0 + * @access public + */ + public function __construct() + { + add_filter('elementor/editor/localize_settings', [$this, 'localize_settings']); + + add_action('elementor/editor/init', [$this, 'add_templates']); + } +} diff --git a/modules/creativeelements/modules/history/revisions-manager.php b/modules/creativeelements/modules/history/revisions-manager.php new file mode 100644 index 00000000..0ce910a2 --- /dev/null +++ b/modules/creativeelements/modules/history/revisions-manager.php @@ -0,0 +1,409 @@ +ID) { + return []; + } + + $revisions = []; + + $default_query_args = [ + 'posts_per_page' => \Configuration::get('elementor_max_revisions'), + 'meta_key' => '_elementor_data', + ]; + + if (empty($default_query_args['posts_per_page'])) { + return []; + } + + $query_args = array_merge($default_query_args, $query_args); + + $posts = wp_get_post_revisions($post->ID, $query_args); + + $autosave = Utils::getPostAutosave($post->ID); + if ($autosave) { + if ($parse_result) { + array_unshift($posts, $autosave); + } else { + array_unshift($posts, $autosave->ID); + } + } + + if ($parse_result) { + empty($post->post_modified) && $post->post_modified = get_post_meta($post->uid, '_ce_date_upd', true); + + array_unshift($posts, $post); + } else { + array_unshift($posts, $post->ID); + return $posts; + } + + // $current_time = current_time('timestamp'); + $current_time = time(); + $profile_url = 'https://profile.prestashop.com/'; + + /** @var WPPost $revision */ + foreach ($posts as $revision) { + // $date = date_i18n(_x('M j @ H:i', 'revision date format'), strtotime($revision->post_modified)); + + if ($revision->ID === $post->ID) { + $type = 'current'; + } elseif (!$revision->_obj->active) { + $type = 'autosave'; + } else { + $type = 'revision'; + } + + if (!isset(self::$authors[$revision->post_author])) { + $author = new \Employee($revision->post_author); + $unknown = empty($author->id); + + self::$authors[$revision->post_author] = [ + 'avatar' => sprintf( + '', + $unknown || version_compare(_PS_VERSION_, '1.7.8', '<') + ? \Tools::getAdminImageUrl('prestashop-avatar.png') + : $author->getImage() + ), + 'display_name' => $unknown ? '' : "{$author->firstname} {$author->lastname}", + ]; + } + + $revisions[] = [ + 'id' => $revision->ID, + 'author' => self::$authors[$revision->post_author]['display_name'], + 'timestamp' => strtotime($revision->post_modified), + 'date' => empty($revision->post_modified) ? '' : sprintf( + /* translators: 1: Human readable time difference, 2: Date */ + __('%1$s ago
%2$s'), + human_time_diff(strtotime($revision->post_modified), $current_time), + \Tools::displayDate($revision->post_modified, null, true) + ), + 'type' => $type, + 'gravatar' => self::$authors[$revision->post_author]['avatar'], + ]; + } + + return $revisions; + } + + /** + * @since 1.9.2 + * @access public + * @static + */ + public static function updateAutosave($autosave_data) + { + self::saveRevision($autosave_data['ID']); + } + + /** + * @since 1.7.0 + * @access public + * @static + */ + public static function saveRevision($revision_id) + { + $parent_id = wp_is_post_revision($revision_id); + + if ($parent_id) { + Plugin::$instance->db->safeCopyElementorMeta($parent_id, $revision_id); + } + } + + /** + * @since 1.7.0 + * @access public + * @static + */ + public static function restoreRevision($parent_id, $revision_id) + { + $is_built_with_elementor = Plugin::$instance->db->isBuiltWithElementor($revision_id); + + Plugin::$instance->db->setIsElementorPage($parent_id, $is_built_with_elementor); + + if (!$is_built_with_elementor) { + return; + } + + Plugin::$instance->db->copyElementorMeta($revision_id, $parent_id); + + $post_css = new PostCSS($parent_id); + + $post_css->update(); + } + + /** + * @since 2.3.0 + * @access public + * @static + * + * @param $data + * + * @return array + * @throws \Exception + */ + public static function ajaxGetRevisionData(array $data) + { + if (!isset($data['id'])) { + throw new \Exception('You must set the revision ID.'); + } + + $revision = get_post($data['id']); + + if (empty($revision)) { + throw new \Exception('Invalid revision.'); + } + + if (!current_user_can('edit', $revision->ID)) { + throw new \Exception(__('Access denied.')); + } + + $revision_data = [ + 'settings' => Manager::getSettingsManagers('page')->getModel($revision->ID)->getSettings(), + 'elements' => Plugin::$instance->db->getPlainEditor($revision->ID), + ]; + + return $revision_data; + } + + /** + * @since 2.3.0 + * @access public + * @static + * + * @param array $data + * + * @throws \Exception + */ + public static function ajaxDeleteRevision(array $data) + { + if (empty($data['id'])) { + throw new \Exception('You must set the revision ID.'); + } + + $revision = get_post($data['id']); + + if (empty($revision)) { + throw new \Exception('Invalid revision.'); + } + + if (!current_user_can('delete', $revision->ID)) { + throw new \Exception(__('Access denied.')); + } + + $deleted = wp_delete_post_revision($revision->ID); + + if (!$deleted || is_wp_error($deleted)) { + throw new \Exception(__('Cannot delete this revision.')); + } + } + + // public static function addRevisionSupportForAllPostTypes() + + /** + * @since 2.0.0 + * @access public + * @static + * @param array $return_data + * @param Document $document + * + * @return array + */ + public static function onAjaxSaveBuilderData($return_data, $document) + { + $post_id = $document->getMainId(); + + $latest_revisions = self::getRevisions($post_id, [ + 'posts_per_page' => 1, + ]); + + $all_revision_ids = self::getRevisions($post_id, [ + 'fields' => 'ids', + ], false); + + // Send revisions data only if has revisions. + if (!empty($latest_revisions)) { + $current_revision_id = self::currentRevisionId($post_id); + + $return_data = array_replace_recursive($return_data, [ + 'config' => [ + 'current_revision_id' => "$current_revision_id", + ], + 'latest_revisions' => $latest_revisions, + 'revisions_ids' => $all_revision_ids, + ]); + } + + return $return_data; + } + + // public static function dbBeforeSave($status, $has_changes) + + /** + * Localize settings. + * + * Add new localized settings for the revisions manager. + * + * Fired by `elementor/editor/localize_settings` filter. + * + * @since 1.7.0 + * @access public + * @static + */ + public static function editorSettings($settings, $post_id) + { + $settings = array_replace_recursive($settings, [ + 'revisions_enabled' => \Configuration::get('elementor_max_revisions'), + 'current_revision_id' => (string) self::currentRevisionId($post_id), + 'i18n' => [ + 'edit_draft' => __('Edit Draft'), + 'edit_published' => __('Edit Published'), + 'no_revisions_1' => __('Revision history lets you save your previous versions of your work, and restore them any time.'), + 'no_revisions_2' => __('Start designing your page and you\'ll be able to see the entire revision history here.'), + 'current' => __('Current Version'), + 'restore' => __('Restore'), + 'restore_auto_saved_data' => __('Restore Auto Saved Data'), + 'restore_auto_saved_data_message' => __('There is an autosave of this post that is more recent than the version below. You can restore the saved data fron the Revisions panel'), + 'revision' => __('Revision'), + 'revision_history' => __('Revision History'), + 'revisions_disabled_1' => __('It looks like the revision feature is turned off.'), + 'revisions_disabled_2' => sprintf( + __('You can enable it in the Settings page'), + Helper::getSettingsLink() + ), + ], + ]); + + return $settings; + } + + public static function ajaxGetRevisions() + { + return self::getRevisions(); + } + + /** + * @since 2.3.0 + * @access public + * @static + */ + public static function registerAjaxActions(Ajax $ajax) + { + $ajax->registerAjaxAction('get_revisions', [__CLASS__, 'ajax_get_revisions']); + $ajax->registerAjaxAction('get_revision_data', [__CLASS__, 'ajax_get_revision_data']); + $ajax->registerAjaxAction('delete_revision', [__CLASS__, 'ajax_delete_revision']); + } + + /** + * @since 1.7.0 + * @access private + * @static + */ + private static function registerActions() + { + add_action('wp_restore_post_revision', [__CLASS__, 'restore_revision'], 10, 2); + // add_action('init', [__CLASS__, 'add_revision_support_for_all_post_types'], 9999); + add_filter('elementor/editor/localize_settings', [__CLASS__, 'editor_settings'], 10, 2); + // add_action('elementor/db/before_save', [__CLASS__, 'db_before_save'], 10, 2); + add_action('_wp_put_post_revision', [__CLASS__, 'save_revision']); + add_action('wp_creating_autosave', [__CLASS__, 'update_autosave']); + add_action('elementor/ajax/register_actions', [__CLASS__, 'register_ajax_actions']); + + // add_filter('edit_post_content', [__CLASS__, 'avoid_delete_auto_save'], 10, 2); + // add_action('edit_form_after_title', [__CLASS__, 'remove_temp_post_content']); + + if (Utils::isAjax()) { + add_filter('elementor/documents/ajax_save/return_data', [__CLASS__, 'on_ajax_save_builder_data'], 10, 2); + } + } + + /** + * @since 1.9.0 + * @access private + * @static + */ + private static function currentRevisionId($post_id) + { + $current_revision_id = $post_id; + $autosave = Utils::getPostAutosave($post_id); + + if (is_object($autosave)) { + $current_revision_id = $autosave->ID; + } + + return $current_revision_id; + } +} diff --git a/modules/creativeelements/modules/history/views/history-panel-template.php b/modules/creativeelements/modules/history/views/history-panel-template.php new file mode 100644 index 00000000..4002ae2e --- /dev/null +++ b/modules/creativeelements/modules/history/views/history-panel-template.php @@ -0,0 +1,46 @@ + + + + + + + + diff --git a/modules/creativeelements/modules/history/views/index.php b/modules/creativeelements/modules/history/views/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/modules/history/views/index.php @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/modules/creativeelements/modules/index.php b/modules/creativeelements/modules/index.php new file mode 100644 index 00000000..0e32c6a1 --- /dev/null +++ b/modules/creativeelements/modules/index.php @@ -0,0 +1,16 @@ + true, + ]; + + return $config; + } + + // public function printAdminColumnType() + + /** + * Save document type. + * + * Set new/updated document type. + * + * @since 2.0.0 + * @access public + */ + public function saveTemplateType() + { + parent::saveTemplateType(); + + // wp_set_object_terms($this->post->ID, $this->getName(), self::TAXONOMY_TYPE_SLUG); + } +} diff --git a/modules/creativeelements/modules/library/documents/not-supported.php b/modules/creativeelements/modules/library/documents/not-supported.php new file mode 100644 index 00000000..f7b8f18b --- /dev/null +++ b/modules/creativeelements/modules/library/documents/not-supported.php @@ -0,0 +1,89 @@ +getMainId(); + } + + /** + * @since 2.0.0 + * @access protected + */ + protected function _registerControls() + { + parent::_registerControls(); + + Post::registerHideTitleControl($this); + + Post::registerStyleControls($this); + } + + protected function getRemoteLibraryConfig() + { + $config = parent::getRemoteLibraryConfig(); + + $config['type'] = 'page'; + + return $config; + } +} diff --git a/modules/creativeelements/modules/library/documents/section.php b/modules/creativeelements/modules/library/documents/section.php new file mode 100644 index 00000000..ac205348 --- /dev/null +++ b/modules/creativeelements/modules/library/documents/section.php @@ -0,0 +1,56 @@ +documents + ->registerDocumentType('not-supported', NotSupported::getClassFullName()) + ->registerDocumentType('page', Page::getClassFullName()) + ->registerDocumentType('section', Section::getClassFullName()); + } +} diff --git a/modules/creativeelements/modules/motion-effects/controls-group.php b/modules/creativeelements/modules/motion-effects/controls-group.php new file mode 100644 index 00000000..8473604c --- /dev/null +++ b/modules/creativeelements/modules/motion-effects/controls-group.php @@ -0,0 +1,544 @@ + [ + 'label' => __('Scrolling Effects'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Off'), + 'label_on' => __('On'), + 'render_type' => 'ui', + 'frontend_available' => true, + ], + ]; + + $this->prepareEffects('scrolling', $fields); + + $transform_origin_conditions = [ + 'terms' => [ + [ + 'name' => 'motion_fx_scrolling', + 'value' => 'yes', + ], + [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'rotateZ_effect', + 'value' => 'yes', + ], + [ + 'name' => 'scale_effect', + 'value' => 'yes', + ], + ], + ], + ], + ]; + + $fields['transform_origin_x'] = [ + 'label' => __('X Anchor Point'), + 'type' => ControlsManager::CHOOSE, + 'default' => 'center', + 'options' => [ + 'left' => [ + 'title' => __('Left'), + 'icon' => 'eicon-h-align-left', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-h-align-center', + ], + 'right' => [ + 'title' => __('Right'), + 'icon' => 'eicon-h-align-right', + ], + ], + 'conditions' => $transform_origin_conditions, + 'label_block' => false, + 'toggle' => false, + 'render_type' => 'ui', + ]; + + $fields['transform_origin_y'] = [ + 'label' => __('Y Anchor Point'), + 'type' => ControlsManager::CHOOSE, + 'default' => 'center', + 'options' => [ + 'top' => [ + 'title' => __('Top'), + 'icon' => 'eicon-v-align-top', + ], + 'center' => [ + 'title' => __('Center'), + 'icon' => 'eicon-v-align-middle', + ], + 'bottom' => [ + 'title' => __('Bottom'), + 'icon' => 'eicon-v-align-bottom', + ], + ], + 'conditions' => $transform_origin_conditions, + 'selectors' => [ + '{{SELECTOR}}' => 'transform-origin: {{transform_origin_x.VALUE}} {{VALUE}}', + ], + 'label_block' => false, + 'toggle' => false, + ]; + + $fields['devices'] = [ + 'label' => __('Apply Effects On'), + 'type' => ControlsManager::SELECT2, + 'multiple' => true, + 'label_block' => 'true', + 'default' => ['desktop', 'tablet', 'mobile'], + 'options' => [ + 'desktop' => __('Desktop'), + 'tablet' => __('Tablet'), + 'mobile' => __('Mobile'), + ], + 'condition' => [ + 'motion_fx_scrolling!' => '', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ]; + + $fields['range'] = [ + 'label' => __('Effects Relative To'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Default'), + 'viewport' => __('Viewport'), + 'page' => __('Entire Page'), + ], + 'condition' => [ + 'motion_fx_scrolling!' => '', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ]; + + $fields['motion_fx_mouse'] = [ + 'label' => __('Mouse Effects'), + 'type' => ControlsManager::SWITCHER, + 'label_off' => __('Off'), + 'label_on' => __('On'), + 'separator' => 'before', + 'render_type' => 'none', + 'frontend_available' => true, + ]; + + $this->prepareEffects('mouse', $fields); + + return $fields; + } + + protected function getDefaultOptions() + { + return [ + 'popover' => false, + ]; + } + + private function getScrollingEffects() + { + return [ + 'translateY' => [ + 'label' => __('Vertical Scroll'), + 'fields' => [ + 'direction' => [ + 'label' => __('Direction'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Up'), + 'negative' => __('Down'), + ], + ], + 'speed' => [ + 'label' => __('Speed'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 4, + ], + 'range' => [ + 'px' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + ], + 'affectedRange' => [ + 'label' => __('Viewport'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'sizes' => [ + 'start' => 0, + 'end' => 100, + ], + 'unit' => '%', + ], + 'labels' => [ + __('Bottom'), + __('Top'), + ], + 'scales' => 1, + 'handles' => 'range', + ], + ], + ], + 'translateX' => [ + 'label' => __('Horizontal Scroll'), + 'fields' => [ + 'direction' => [ + 'label' => __('Direction'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Left'), + 'negative' => __('Right'), + ], + ], + 'speed' => [ + 'label' => __('Speed'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 4, + ], + 'range' => [ + 'px' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + ], + 'affectedRange' => [ + 'label' => __('Viewport'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'sizes' => [ + 'start' => 0, + 'end' => 100, + ], + 'unit' => '%', + ], + 'labels' => [ + __('Bottom'), + __('Top'), + ], + 'scales' => 1, + 'handles' => 'range', + ], + ], + ], + 'opacity' => [ + 'label' => __('Transparency'), + 'fields' => [ + 'direction' => [ + 'label' => __('Direction'), + 'type' => ControlsManager::SELECT, + 'default' => 'out-in', + 'options' => [ + 'out-in' => 'Fade In', + 'in-out' => 'Fade Out', + 'in-out-in' => 'Fade Out In', + 'out-in-out' => 'Fade In Out', + ], + ], + 'level' => [ + 'label' => __('Level'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 10, + ], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 10, + 'step' => 0.1, + ], + ], + ], + 'range' => [ + 'label' => __('Viewport'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'sizes' => [ + 'start' => 20, + 'end' => 80, + ], + 'unit' => '%', + ], + 'labels' => [ + __('Bottom'), + __('Top'), + ], + 'scales' => 1, + 'handles' => 'range', + ], + ], + ], + 'blur' => [ + 'label' => __('Blur'), + 'fields' => [ + 'direction' => [ + 'label' => __('Direction'), + 'type' => ControlsManager::SELECT, + 'default' => 'out-in', + 'options' => [ + 'out-in' => 'Fade In', + 'in-out' => 'Fade Out', + 'in-out-in' => 'Fade Out In', + 'out-in-out' => 'Fade In Out', + ], + ], + 'level' => [ + 'label' => __('Level'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 7, + ], + 'range' => [ + 'px' => [ + 'min' => 1, + 'max' => 15, + ], + ], + ], + 'range' => [ + 'label' => __('Viewport'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'sizes' => [ + 'start' => 20, + 'end' => 80, + ], + 'unit' => '%', + ], + 'labels' => [ + __('Bottom'), + __('Top'), + ], + 'scales' => 1, + 'handles' => 'range', + ], + ], + ], + 'rotateZ' => [ + 'label' => __('Rotate'), + 'fields' => [ + 'direction' => [ + 'label' => __('Direction'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('Left'), + 'negative' => __('Right'), + ], + ], + 'speed' => [ + 'label' => __('Speed'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 1, + ], + 'range' => [ + 'px' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + ], + 'affectedRange' => [ + 'label' => __('Viewport'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'sizes' => [ + 'start' => 0, + 'end' => 100, + ], + 'unit' => '%', + ], + 'labels' => [ + __('Bottom'), + __('Top'), + ], + 'scales' => 1, + 'handles' => 'range', + ], + ], + ], + 'scale' => [ + 'label' => __('Scale'), + 'fields' => [ + 'direction' => [ + 'label' => __('Direction'), + 'type' => ControlsManager::SELECT, + 'default' => 'out-in', + 'options' => [ + 'out-in' => 'Scale Up', + 'in-out' => 'Scale Down', + 'in-out-in' => 'Scale Down Up', + 'out-in-out' => 'Scale Up Down', + ], + ], + 'speed' => [ + 'label' => __('Speed'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 4, + ], + 'range' => [ + 'px' => [ + 'min' => -10, + 'max' => 10, + ], + ], + ], + 'range' => [ + 'label' => __('Viewport'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'sizes' => [ + 'start' => 20, + 'end' => 80, + ], + 'unit' => '%', + ], + 'labels' => [ + __('Bottom'), + __('Top'), + ], + 'scales' => 1, + 'handles' => 'range', + ], + ], + ], + ]; + } + + private function getMouseEffects() + { + return [ + 'mouseTrack' => [ + 'label' => __('Mouse Track'), + 'fields' => [ + 'direction' => [ + 'label' => __('Direction'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Opposite'), + 'negative' => __('Direct'), + ], + ], + 'speed' => [ + 'label' => __('Speed'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 1, + ], + 'range' => [ + 'px' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + ], + ], + ], + 'tilt' => [ + 'label' => __('3D Tilt'), + 'fields' => [ + 'direction' => [ + 'label' => __('Direction'), + 'type' => ControlsManager::SELECT, + 'default' => '', + 'options' => [ + '' => __('Direct'), + 'negative' => __('Opposite'), + ], + ], + 'speed' => [ + 'label' => __('Speed'), + 'type' => ControlsManager::SLIDER, + 'default' => [ + 'size' => 4, + ], + 'range' => [ + 'px' => [ + 'max' => 10, + 'step' => 0.1, + ], + ], + ], + ], + ], + ]; + } + + private function prepareEffects($effects_group, array &$fields) + { + $effects = $this->{"get{$effects_group}effects"}(); + + foreach ($effects as $effect_name => $effect_args) { + $args = [ + 'label' => $effect_args['label'], + 'type' => ControlsManager::POPOVER_TOGGLE, + 'condition' => [ + "motion_fx_$effects_group!" => '', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ]; + + if (!empty($effect_args['separator'])) { + $args['separator'] = $effect_args['separator']; + } + + $fields[$effect_name . '_effect'] = $args; + + $effect_fields = $effect_args['fields']; + $first_field = &$effect_fields[key($effect_fields)]; + $first_field['popover']['start'] = true; + + end($effect_fields); + $last_field = &$effect_fields[key($effect_fields)]; + $last_field['popover']['end'] = true; + + reset($effect_fields); + + foreach ($effect_fields as $field_name => $field) { + $field = array_merge($field, [ + 'condition' => [ + "motion_fx_$effects_group!" => '', + "{$effect_name}_effect!" => '', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ]); + + $fields[$effect_name . '_' . $field_name] = $field; + } + } + } +} diff --git a/modules/creativeelements/modules/motion-effects/index.php b/modules/creativeelements/modules/motion-effects/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/modules/motion-effects/index.php @@ -0,0 +1,8 @@ +controls_manager->addGroupControl(ControlsGroup::getType(), new ControlsGroup()); + } + + public function addFxControls(ElementBase $element) + { + $exclude = []; + + $selector = '{{WRAPPER}}'; + + if ($element instanceof ElementSection) { + $exclude[] = 'motion_fx_mouse'; + } elseif ($element instanceof ElementColumn) { + $selector .= ' > .elementor-column-wrap'; + } else { + $selector .= ' > .elementor-widget-container'; + } + + $element->addGroupControl( + ControlsGroup::getType(), + [ + 'name' => 'motion_fx', + 'selector' => $selector, + 'exclude' => $exclude, + ] + ); + + $element->addControl( + 'motion_fx_divider', + [ + 'type' => ControlsManager::DIVIDER, + ] + ); + } + + public function addBackgroundFxControls(ElementBase $element) + { + $element->startInjection([ + 'of' => 'background_bg_width_mobile', + ]); + + $element->addGroupControl( + ControlsGroup::getType(), + [ + 'name' => 'background_motion_fx', + 'exclude' => [ + 'rotateZ_effect', + 'tilt_effect', + 'transform_origin_x', + 'transform_origin_y', + ], + ] + ); + + $options = [ + 'separator' => 'before', + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => 'background_background', + 'value' => 'classic', + ], + [ + 'terms' => [ + [ + 'name' => 'background_background', + 'value' => 'gradient', + ], + [ + 'name' => 'background_color', + 'operator' => '!==', + 'value' => '', + ], + [ + 'name' => 'background_color_b', + 'operator' => '!==', + 'value' => '', + ], + ], + ], + ], + ], + ]; + + $element->updateControl('background_motion_fx_motion_fx_scrolling', $options); + + $element->updateControl('background_motion_fx_motion_fx_mouse', $options); + + $element->endInjection(); + + $wrapper = $element->getName() === 'column' ? '{{WRAPPER}} > .elementor-column-wrap' : '{{WRAPPER}}'; + + $element->addControl( + 'background_motion_fx_transition', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 3, + 'step' => 0.1, + ], + ], + 'conditions' => [ + 'terms' => [ + $options['conditions'], + [ + 'name' => 'background_motion_fx_motion_fx_scrolling', + 'operator' => '!==', + 'value' => '', + ], + ], + ], + 'selectors' => [ + "$wrapper > .elementor-motion-effects-container > .elementor-motion-effects-layer" => 'transition-duration: {{SIZE}}s' + ], + ], + [ + 'position' => [ + 'of' => 'background_motion_fx_devices', + 'at' => 'before', + ], + ] + ); + } + + public function addStickyControls(ElementBase $element) + { + $element->addControl( + 'sticky', + [ + 'label' => __('Sticky'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('None'), + 'top' => __('Top'), + 'bottom' => __('Bottom'), + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $element->addControl( + 'sticky_on', + [ + 'label' => __('Sticky On'), + 'type' => ControlsManager::SELECT2, + 'multiple' => true, + 'label_block' => 'true', + 'default' => ['desktop', 'tablet', 'mobile'], + 'options' => [ + 'desktop' => __('Desktop'), + 'tablet' => __('Tablet'), + 'mobile' => __('Mobile'), + ], + 'condition' => [ + 'sticky!' => '', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $element->addControl( + 'sticky_offset', + [ + 'label' => __('Offset'), + 'type' => ControlsManager::NUMBER, + 'default' => 0, + 'min' => 0, + 'max' => 500, + 'required' => true, + 'condition' => [ + 'sticky!' => '', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $element->addControl( + 'sticky_effects_offset', + [ + 'label' => __('Effects Offset'), + 'type' => ControlsManager::NUMBER, + 'default' => 0, + 'min' => 0, + 'max' => 1000, + 'required' => true, + 'condition' => [ + 'sticky!' => '', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $is_section = $element instanceof ElementSection; + + if ($is_section || $element instanceof WidgetBase) { + $condition = [ + 'sticky!' => '', + ]; + + if ($is_section && Plugin::$instance->editor->isEditMode()) { + $condition['isInner'] = true; + } + + $element->addControl( + 'sticky_parent', + [ + 'label' => __('Stay In Column'), + 'type' => ControlsManager::SWITCHER, + 'condition' => $condition, + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + } + + $element->addControl( + 'sticky_auto_hide', + [ + 'label' => __('Hide on Scroll'), + 'type' => ControlsManager::POPOVER_TOGGLE, + 'condition' => [ + 'sticky' => 'top', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $element->startPopover(); + + $element->addControl( + 'sticky_auto_hide_offset', + [ + 'label' => __('Offset'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'max' => 1600, + ], + ], + 'size_units' => ['px', 'vh'], + 'default' => [ + 'size' => 0, + ], + 'condition' => [ + 'sticky' => 'top', + 'sticky_auto_hide!' => '', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $element->addControl( + 'sticky_auto_hide_duration', + [ + 'label' => __('Transition Duration'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 's' => [ + 'min' => 0, + 'max' => 3, + 'step' => 0.1, + ], + ], + 'default' => [ + 'size' => 0.3, + 'unit' => 's', + ], + 'condition' => [ + 'sticky' => 'top', + 'sticky_auto_hide!' => '', + ], + 'render_type' => 'none', + 'frontend_available' => true, + ] + ); + + $element->endPopover(); + + $element->addControl( + 'sticky_divider', + [ + 'type' => ControlsManager::DIVIDER, + ] + ); + } + + public function addAnimationControls(ElementBase $element) + { + $animation = $element instanceof WidgetBase ? '_animation' : 'animation'; + $controls = [ + "{$animation}_offset" => [ + 'label' => __('Offset'), + 'type' => ControlsManager::SLIDER, + 'size_units' => ['px', '%'], + 'selectors' => [ + '{{WRAPPER}}' => '--ce-animation-offset: {{SIZE}}{{UNIT}};', + ], + 'condition' => [ + $animation => [ + 'fadeInDown', + 'fadeInLeft', + 'fadeInRight', + 'fadeInUp', + 'slideInDown', + 'slideInLeft', + 'slideInRight', + 'slideInUp', + ], + ], + ], + "{$animation}_scale" => [ + 'label' => __('Scale'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => 0, + 'max' => 2, + 'step' => 0.1, + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => '--ce-animation-scale: {{SIZE}};', + ], + 'condition' => [ + $animation => [ + 'zoomIn', + 'zoomInDown', + 'zoomInLeft', + 'zoomInRight', + 'zoomInUp', + 'scaleReveal', + 'scaleRevealFromDown', + 'scaleRevealFromLeft', + 'scaleRevealFromRight', + 'scaleRevealFromUp', + ], + ], + ], + "{$animation}_rotate" => [ + 'label' => __('Rotate'), + 'type' => ControlsManager::SLIDER, + 'range' => [ + 'px' => [ + 'min' => -360, + 'max' => 360, + ], + ], + 'selectors' => [ + '{{WRAPPER}}' => '--ce-animation-rotate: {{SIZE}}deg;', + ], + 'condition' => [ + $animation => [ + 'rotateIn', + 'rotateInDownLeft', + 'rotateInDownRight', + 'rotateInUpLeft', + 'rotateInUpRight', + ], + ], + ], + ]; + + $element->startInjection([ + 'of' => 'animation_duration', + 'at' => 'before', + ]); + + foreach ($controls as $id => &$args) { + $args['device_args'] = [ + ControlsStack::RESPONSIVE_TABLET => [ + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => "{$animation}_tablet", + 'operator' => 'in', + 'value' => &$args['condition'][$animation], + ], + [ + 'terms' => [ + [ + 'name' => "{$animation}_tablet", + 'value' => '', + ], + [ + 'name' => $animation, + 'operator' => 'in', + 'value' => &$args['condition'][$animation], + ], + ], + ], + ], + ], + ], + ControlsStack::RESPONSIVE_MOBILE => [ + 'conditions' => [ + 'relation' => 'or', + 'terms' => [ + [ + 'name' => "{$animation}_mobile", + 'operator' => 'in', + 'value' => &$args['condition'][$animation], + ], + [ + 'terms' => [ + [ + 'name' => "{$animation}_mobile", + 'value' => '', + ], + [ + 'name' => "{$animation}_tablet", + 'operator' => 'in', + 'value' => &$args['condition'][$animation], + ], + ], + ], + [ + 'terms' => [ + [ + 'name' => "{$animation}_mobile", + 'value' => '', + ], + [ + 'name' => "{$animation}_tablet", + 'value' => '', + ], + [ + 'name' => $animation, + 'operator' => 'in', + 'value' => &$args['condition'][$animation], + ], + ], + ], + ], + ], + ], + ]; + $element->addResponsiveControl($id, $args); + } + + $element->endInjection(); + } + + public function __construct() + { + add_action('elementor/controls/controls_registered', [$this, 'registerControlsGroup']); + + add_action('elementor/element/section/section_effects/after_section_start', [$this, 'addFxControls']); + add_action('elementor/element/column/section_effects/after_section_start', [$this, 'addFxControls']); + add_action('elementor/element/common/section_effects/after_section_start', [$this, 'addFxControls']); + + add_action('elementor/element/section/section_background/before_section_end', [$this, 'addBackgroundFxControls']); + add_action('elementor/element/column/section_style/before_section_end', [$this, 'addBackgroundFxControls']); + + add_action('elementor/element/section/section_effects/after_section_start', [$this, 'addStickyControls']); + add_action('elementor/element/common/section_effects/after_section_start', [$this, 'addStickyControls']); + + add_action('elementor/element/section/section_effects/before_section_end', [$this, 'addAnimationControls']); + add_action('elementor/element/column/section_effects/before_section_end', [$this, 'addAnimationControls']); + add_action('elementor/element/common/section_effects/before_section_end', [$this, 'addAnimationControls']); + } +} diff --git a/modules/creativeelements/modules/page-templates/index.php b/modules/creativeelements/modules/page-templates/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/modules/page-templates/index.php @@ -0,0 +1,8 @@ +documents->getDocForFrontend(get_the_ID()); + + if ($document) { + $template_path = $this->getTemplatePath($document->getMeta('_wp_page_template')); + + if ($template_path) { + $template = $template_path; + + // Plugin::$instance->inspector->addLog('Page Template', Plugin::$instance->inspector->parseTemplatePath($template), $document->getEditUrl()); + } + } + } + + return $template; + } + + /** + * Add Elementor templates. + * + * Adds Elementor templates to all the post types that support + * Elementor. + * + * Fired by `init` action. + * + * @since 2.0.0 + * @access public + */ + public function addTemplatesSupport() + { + $post_types = get_post_types_by_support('elementor'); + + foreach ($post_types as $post_type) { + add_filter("theme_{$post_type}_templates", [$this, 'add_page_templates'], 10, 4); + } + } + + /** + * Add page templates. + * + * Add the Elementor page templates to the theme templates. + * + * Fired by `theme_{$post_type}_templates` filter. + * + * @since 2.0.0 + * @access public + * @static + * + * @param array $page_templates Array of page templates. Keys are filenames, + * checks are translated names. + * + * @param WPPost $post + * + * @return array Page templates. + */ + public function addPageTemplates($page_templates, $post) + { + if ($post) { + $document = Plugin::$instance->documents->get($post->ID); + + if ($document && !$document::getProperty('support_wp_page_templates')) { + return $page_templates; + } + } + + $page_templates = [ + self::TEMPLATE_CANVAS => _x('CE Canvas', 'Page Template'), + self::TEMPLATE_HEADER_FOOTER => _x('CE Full Width', 'Page Template'), + ] + $page_templates; + + return $page_templates; + } + + // public function setPrintCallback($callback) + + // public function printCallback() + + // public function printContent() + + /** + * Get page template path. + * + * Retrieve the path for any given page template. + * + * @since 2.0.0 + * @access public + * + * @param string $page_template The page template name. + * + * @return string Page template path. + */ + public function getTemplatePath($page_template) + { + $template_path = ''; + + if (self::TEMPLATE_CANVAS === $page_template) { + $template_path = _CE_TEMPLATES_ . 'front/theme/layouts/layout-canvas.tpl'; + } elseif (self::TEMPLATE_HEADER_FOOTER === $page_template) { + $template_path = _CE_TEMPLATES_ . 'front/theme/layouts/layout-header-footer.tpl'; + } elseif ($page_template && 'default' !== $page_template) { + $template_path = "layouts/$page_template.tpl"; + } + + return $template_path; + } + + /** + * Register template control. + * + * Adds custom controls to any given document. + * + * Fired by `update_post_metadata` action. + * + * @since 2.0.0 + * @access public + * + * @param Document $document The document instance. + */ + public function actionRegisterTemplateControl($document) + { + if ($document instanceof PostDocument || $document instanceof PageDocument || $document instanceof ThemePageDocument) { + $this->registerTemplateControl($document); + } + } + + /** + * Register template control. + * + * Adds custom controls to any given document. + * + * @since 2.0.0 + * @access public + * + * @param Document $document The document instance. + * @param string $control_id Optional. The control ID. Default is `template`. + */ + public function registerTemplateControl($document, $control_id = 'template') + { + $main_post = $document->getMainPost(); + + if (!Utils::isCptCustomTemplatesSupported($main_post)) { + return; + } + + // require_once ABSPATH . '/wp-admin/includes/template.php'; + + $options = [ + 'default' => __('Default'), + ]; + + $options += get_page_templates(null, $main_post->post_type); + + $document->startInjection([ + 'of' => 'post_title', + ]); + + $document->addControl( + $control_id, + [ + 'label' => __('Page Layout'), + 'type' => ControlsManager::SELECT, + 'default' => 'default', + 'options' => &$options, + ] + ); + + $document->addControl( + $control_id . '_default_description', + [ + 'type' => ControlsManager::RAW_HTML, + 'raw' => __('Default Page Template from your theme'), + 'separator' => 'none', + 'content_classes' => 'elementor-descriptor', + 'condition' => [ + $control_id => 'default', + ], + ] + ); + + $document->addControl( + $control_id . '_canvas_description', + [ + 'type' => ControlsManager::RAW_HTML, + 'raw' => __('No header, no footer, just Creative Elements'), + 'separator' => 'none', + 'content_classes' => 'elementor-descriptor', + 'condition' => [ + $control_id => self::TEMPLATE_CANVAS, + ], + ] + ); + + $document->addControl( + $control_id . '_header_footer_description', + [ + 'type' => ControlsManager::RAW_HTML, + 'raw' => __('This template includes the header, full-width content and footer'), + 'separator' => 'none', + 'content_classes' => 'elementor-descriptor', + 'condition' => [ + $control_id => self::TEMPLATE_HEADER_FOOTER, + ], + ] + ); + + $document->addControl( + 'full_width', + [ + 'label' => __('Full Width'), + 'type' => ControlsManager::SWITCHER, + 'description' => sprintf(__( + 'Not working? You can set a different selector for the content wrapper '. + 'in the Settings page.' + ), Helper::getSettingsLink()), + 'selectors' => [ + \Configuration::get('elementor_page_wrapper_selector') => 'min-width: 100%; margin: 0; padding: 0;', + ], + 'condition' => [ + 'template!' => 'elementor_canvas', + ], + ] + ); + + $document->endInjection(); + } + + // public function filterUpdateMeta($check, $object_id, $meta_key) + + /** + * Page templates module constructor. + * + * Initializing Elementor page templates module. + * + * @since 2.0.0 + * @access public + */ + public function __construct() + { + add_action('init', [$this, 'add_templates_support']); + + add_filter('template_include', [$this, 'template_include'], 11); + + add_action('elementor/documents/register_controls', [$this, 'action_register_template_control']); + + // add_filter('update_post_metadata', [$this, 'filter_update_meta'], 10, 3); + } +} diff --git a/modules/creativeelements/modules/visibility/index.php b/modules/creativeelements/modules/visibility/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/modules/visibility/index.php @@ -0,0 +1,8 @@ +getSettings('hide_' . $this->device); + + $element->setSettings('hide_desktop', ''); + $element->setSettings('hide_tablet', ''); + $element->setSettings('hide_mobile', ''); + + return $should_render && !$hide; + } + + public function isElementVisibleBySchedule($should_render, ElementBase $element) + { + if (!$should_render) { + return false; + } + + if (!$element->getSettings('schedule')) { + return true; + } + + $from = $element->getSettings('schedule_from'); + $to = $element->getSettings('schedule_to'); + + $date_now = strtotime(date('Y-m-d H:i')); + $date_from = $from ? strtotime($from) : $date_now; + $date_to = $to ? strtotime($to) : $date_now; + + return $date_now >= $date_from && $date_now <= $date_to; + } + + public function isElementVisibleByGroup($should_render, ElementBase $element) + { + if (!$should_render) { + return false; + } + + if (!$filter = $element->getSettings('group_filter')) { + return true; + } + + $groups = $element->getSettings('groups') ?: []; + + return ( + 'include' === $filter && array_intersect($this->groups, $groups) || + 'exclude' === $filter && !array_intersect($this->groups, $groups) + ); + } + + public function getGroupOptions() + { + static $options; + + if (null === $options) { + $groups = \Group::getGroups(\Context::getContext()->language->id); + + foreach ($groups as &$group) { + $options[$group['id_group']] = $group['name']; + } + } + return $options; + } + + public function registerControls(ControlsStack $element, array $args) + { + $element->startControlsSection( + '_section_visibility', + [ + 'label' => __('Visibility'), + 'tab' => ControlsManager::TAB_ADVANCED, + ] + ); + + $element->addControl( + 'schedule', + [ + 'label' => __('Schedule'), + 'type' => ControlsManager::SWITCHER, + ] + ); + + $element->addControl( + 'schedule_from', + [ + 'label' => __('From'), + 'type' => ControlsManager::DATE_TIME, + 'dynamic' => [ + 'active' => true, + ], + 'default' => date('Y-m-d H:i'), + 'condition' => [ + 'schedule!' => '', + ], + ] + ); + + $element->addControl( + 'schedule_to', + [ + 'label' => __('To'), + 'type' => ControlsManager::DATE_TIME, + 'dynamic' => [ + 'active' => true, + ], + 'default' => date('Y-m-d H:i', strtotime('+1 month')), + 'description' => sprintf(__('Date set according to your timezone: %s.'), Utils::getTimezoneString()), + 'condition' => [ + 'schedule!' => '', + ], + ] + ); + + if (\Group::isFeatureActive()) { + $element->addControl( + 'group_filter', + [ + 'label' => __('Customer Group'), + 'type' => ControlsManager::SELECT, + 'options' => [ + '' => __('All'), + 'include' => __('Show for'), + 'exclude' => __('Hide for'), + ], + 'separator' => 'before', + ] + ); + + $element->addControl( + 'groups', + [ + 'label_block' => 'true', + 'type' => ControlsManager::SELECT2, + 'multiple' => true, + 'select2options' => [ + 'placeholder' => __('Select...'), + ], + 'options' => $this->getGroupOptions(), + 'condition' => [ + 'group_filter!' => '', + ], + ] + ); + } + + $element->endControlsSection(); + } + + public function __construct() + { + if (!is_admin() && \Configuration::get('elementor_remove_hidden')) { + $mobile_detect = \Context::getContext()->mobile_detect; + $this->device = $mobile_detect->isTablet() ? 'tablet' : ($mobile_detect->isMobile() ? 'mobile' : 'desktop'); + + add_filter('elementor/frontend/section/should_render', [$this, 'isElementVisibleByDevice']); + add_filter('elementor/frontend/column/should_render', [$this, 'isElementVisibleByDevice']); + add_filter('elementor/frontend/widget/should_render', [$this, 'isElementVisibleByDevice']); + } + + if (\Configuration::get('elementor_visibility')) { + if (!is_admin()) { + add_filter('elementor/frontend/section/should_render', [$this, 'isElementVisibleBySchedule']); + add_filter('elementor/frontend/column/should_render', [$this, 'isElementVisibleBySchedule']); + add_filter('elementor/frontend/widget/should_render', [$this, 'isElementVisibleBySchedule']); + + if (\Group::isFeatureActive()) { + $id_customer = \Context::getContext()->customer->id; + $this->groups = \Customer::getGroupsStatic($id_customer); + + add_filter('elementor/frontend/section/should_render', [$this, 'isElementVisibleByGroup']); + add_filter('elementor/frontend/column/should_render', [$this, 'isElementVisibleByGroup']); + add_filter('elementor/frontend/widget/should_render', [$this, 'isElementVisibleByGroup']); + } + } + + add_action('elementor/element/section/_section_responsive/before_section_start', [$this, 'registerControls']); + add_action('elementor/element/column/_section_responsive/before_section_start', [$this, 'registerControls']); + add_action('elementor/element/common/_section_responsive/before_section_start', [$this, 'registerControls']); + } + } +} diff --git a/modules/creativeelements/override/classes/CMSCategory.php b/modules/creativeelements/override/classes/CMSCategory.php new file mode 100644 index 00000000..43567fed --- /dev/null +++ b/modules/creativeelements/override/classes/CMSCategory.php @@ -0,0 +1,28 @@ +controller; + if ($ctrl instanceof CmsController && !CmsController::$initialized && !$this->active && Tools::getIsset('id_employee') && Tools::getIsset('adtoken')) { + $tab = 'AdminCmsContent'; + if (Tools::getAdminToken($tab . (int) Tab::getIdFromClassName($tab) . (int) Tools::getValue('id_employee')) == Tools::getValue('adtoken')) { + $this->active = 1; + } + } + } +} diff --git a/modules/creativeelements/override/classes/Category.php b/modules/creativeelements/override/classes/Category.php new file mode 100644 index 00000000..3b1db67b --- /dev/null +++ b/modules/creativeelements/override/classes/Category.php @@ -0,0 +1,28 @@ +controller; + if ($ctrl instanceof CategoryController && !CategoryController::$initialized && !$this->active && Tools::getIsset('id_employee') && Tools::getIsset('adtoken')) { + $tab = 'AdminCategories'; + if (Tools::getAdminToken($tab . (int) Tab::getIdFromClassName($tab) . (int) Tools::getValue('id_employee')) == Tools::getValue('adtoken')) { + $this->active = 1; + } + } + } +} diff --git a/modules/creativeelements/override/classes/Manufacturer.php b/modules/creativeelements/override/classes/Manufacturer.php new file mode 100644 index 00000000..2273ea2c --- /dev/null +++ b/modules/creativeelements/override/classes/Manufacturer.php @@ -0,0 +1,28 @@ +controller; + if ($ctrl instanceof ManufacturerController && !ManufacturerController::$initialized && !$this->active && Tools::getIsset('id_employee') && Tools::getIsset('adtoken')) { + $tab = 'AdminManufacturers'; + if (Tools::getAdminToken($tab . (int) Tab::getIdFromClassName($tab) . (int) Tools::getValue('id_employee')) == Tools::getValue('adtoken')) { + $this->active = 1; + } + } + } +} diff --git a/modules/creativeelements/override/classes/Supplier.php b/modules/creativeelements/override/classes/Supplier.php new file mode 100644 index 00000000..ff8f3eb9 --- /dev/null +++ b/modules/creativeelements/override/classes/Supplier.php @@ -0,0 +1,28 @@ +controller; + if ($ctrl instanceof SupplierController && !SupplierController::$initialized && !$this->active && Tools::getIsset('id_employee') && Tools::getIsset('adtoken')) { + $tab = 'AdminSuppliers'; + if (Tools::getAdminToken($tab . (int) Tab::getIdFromClassName($tab) . (int) Tools::getValue('id_employee')) == Tools::getValue('adtoken')) { + $this->active = 1; + } + } + } +} diff --git a/modules/creativeelements/override/classes/index.php b/modules/creativeelements/override/classes/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/override/classes/index.php @@ -0,0 +1,8 @@ +_71d8a11f3a1853ee785d61e210485c28'] = 'Creative Elements 2.5 führt mit CSS Flexbox wichtige Änderungen am Layout ein. Deine bestehenden Seiten könnten betroffen sein, bitte überprüfe daher deine Seite vor der Veröffentlichung.'; // Creative Elements 2.5 introduces key changes to the layout using CSS Flexbox. Your existing pages might have been affected, please review your page before publishing. +$_MODULE['<{creativeelements}prestashop>_20fe34eafdf840c5f35e60d4bdfd3876'] = 'Hinweis: Flexbox-Änderungen'; // Note: Flexbox Changes +$_MODULE['<{creativeelements}prestashop>_65b3710ad99ada6c018a6d36d23ff656'] = 'Vertikale Anordnung'; // Vertical Orientation +$_MODULE['<{creativeelements}prestashop>_dfd0a82c4bf37b1e90b690a22a20692e'] = 'Versatz'; // Offset +$_MODULE['<{creativeelements}prestashop>_1b6f6fe2f7bc999abb893e7bea077f4c'] = 'Horizontale Anordnung'; // Horizontal Orientation +$_MODULE['<{creativeelements}prestashop>_4457d440870ad6d42bab9082d9bf9b61'] = 'Fixiert'; // Fixed +$_MODULE['<{creativeelements}prestashop>_b51ca26c6c89cfc9bec338f7a0d3e0c8'] = 'Absolut'; // Absolute +$_MODULE['<{creativeelements}prestashop>_0ee951833c18c2a27c2967d5490ab899'] = 'Individuelle Positionierung gilt nicht als bewährte Methode für responsives Webdesign und sollte nicht zu häufig verwendet werden.'; // Custom positioning is not considered best practice for responsive web design and should not be used too frequently. +$_MODULE['<{creativeelements}prestashop>_d95c4d0d7d8f6a51de4c86208c3b35b1'] = 'Bitte beachten!'; // Please note! +$_MODULE['<{creativeelements}prestashop>_56419bfabc4807a765543d23f357d55e'] = 'Individuelle Breite'; // Custom Width +$_MODULE['<{creativeelements}prestashop>_506555a17a9375eb4a701c4fa22ab93c'] = 'Berechne'; // Calculate +$_MODULE['<{creativeelements}prestashop>_1dcb5758bddf39c3c93a63bec8d7655a'] = 'Sortieren'; // Order +$_MODULE['<{creativeelements}prestashop>_f13af8b45701da62165a903a828eb26a'] = 'Individuelle Sortierung'; // Custom Order +$_MODULE['<{creativeelements}prestashop>_7acdf85c69cc3c5305456a293524386e'] = 'Ausgeblendet'; // Hidden +$_MODULE['<{creativeelements}prestashop>_129e8109f319870e328cc7a1d5b5cae3'] = 'Overflow'; // Overflow +$_MODULE['<{creativeelements}prestashop>_a7f391c54b912211cd510fd1098e5308'] = 'Bewegungseffekte'; // Motion Effects +$_MODULE['<{creativeelements}prestashop>_cdd416d7a24537ed830732917e74410d'] = 'Horizontale Ausrichtung'; // Horizontal Align +$_MODULE['<{creativeelements}prestashop>_daa3a8e38d3417760fe479ba9a956f21'] = 'Gleichmäßiger Abstand'; // Space Evenly +$_MODULE['<{creativeelements}prestashop>_48ad0b896ae6d7004eb87bad5a125d71'] = 'Abstand im Umkreis'; // Space Around +$_MODULE['<{creativeelements}prestashop>_692af12e687aba7f0845b9a49b515c9d'] = 'Vertikale Ausrichtung'; // Vertical Align +$_MODULE['<{creativeelements}prestashop>_d7f3d71483d1424cf1edaed61be43f40'] = 'Hinweis: Der ID-Link akzeptiert NUR diese Zeichen: %s'; // Note: The ID link ONLY accepts these chars: %s +$_MODULE['<{creativeelements}prestashop>_e635032a5f71d809146d3872389f5b0c'] = 'Datei wählen'; // Choose File +$_MODULE['<{creativeelements}prestashop>_48b6dc1949d063860c1765ebd06bbc95'] = 'Externe URL'; // External URL +$_MODULE['<{creativeelements}prestashop>_801322095c363689f7620e0147e3fd14'] = 'Sortieren nach'; // Order By +$_MODULE['<{creativeelements}prestashop>_ce5bf551379459c1c61d2a204061c455'] = 'Ort'; // Location +$_MODULE['<{creativeelements}prestashop>_71bfb711908ea603a75e86c3e5dbb47a'] = 'Weiterlesen: %s'; // Continue reading %s +$_MODULE['<{creativeelements}prestashop>_54d0d7ad584d2f68657459fa49b9fa80'] = '(mehr …)'; // (more…) +$_MODULE['<{creativeelements}prestashop>template_library_42d00bc24fd43cfe3e2e30d01f39ee95'] = 'Nach Kategorie filtern'; // Filter by category +$_MODULE['<{creativeelements}prestashop>template_library_a6a2a55bea8760389dfca77132905b7c'] = 'Alle Kategorien'; // All Categories +$_MODULE['<{creativeelements}prestashop>template_library_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Kategorie'; // Category +$_MODULE['<{creativeelements}prestashop>template_library_af1b98adf7f686b84cd0b443e022b7a0'] = 'Kategorien'; // Categories +$_MODULE['<{creativeelements}prestashop>template_library_7df96b18c230f90ada0a9e2307226338'] = 'Templates'; // Templates +$_MODULE['<{creativeelements}prestashop>background_control_e7492ba5c0e269d4b32aecd208c0fbff'] = 'Y-Achse'; // Y Position +$_MODULE['<{creativeelements}prestashop>background_control_21e84455e7383dee4e606afc7ae6af83'] = 'X-Achse'; // X Position +$_MODULE['<{creativeelements}prestashop>background_control_90589c47f06eb971d548591f23c285af'] = 'Individuell'; // Custom +$_MODULE['<{creativeelements}prestashop>_0d4c14a20b4d98a5de54e1480bf99a25'] = 'Popup'; // Popup +$_MODULE['<{creativeelements}prestashop>_487df467aed02a8dd4a50648141fed82'] = 'Theme Builder'; // Theme Builder +$_MODULE['<{creativeelements}prestashop>_c3320c3457dfdfbada4a611a68854ea6'] = 'Nicht unterstützt'; // Not Supported +$_MODULE['<{creativeelements}prestashop>_95fc8385f09a0cb6cae00e2047ce8430'] = 'Beliebiges Video'; // Any Video +$_MODULE['<{creativeelements}prestashop>_ba1f922207e50bf1fa2ee2b917e63a2b'] = 'Aktueller Videokanal'; // Current Video Channel +$_MODULE['<{creativeelements}prestashop>_b46c2db25162b51009aba9c0317c2435'] = 'Nicht markierte Farbe'; // Unmarked Color +$_MODULE['<{creativeelements}prestashop>_d37c550d781bfb93b0088a2470598bcf'] = 'Sterne'; // Stars +$_MODULE['<{creativeelements}prestashop>_606b51cc1c9d0b4af394419a22f2ff1f'] = 'Kontur'; // Outline +$_MODULE['<{creativeelements}prestashop>_7cdd5cfacc3e9c4fd0d1458df3d444f6'] = 'Nicht markierter Stil'; // Unmarked Style +$_MODULE['<{creativeelements}prestashop>_a1718ae9e0cbbac49b74f68a8a21cad2'] = 'Bewertungsskala'; // Rating Scale +$_MODULE['<{creativeelements}prestashop>_dda9c06f33071c9b6fc237ee164109d8'] = 'Bewertung'; // Rating +$_MODULE['<{creativeelements}prestashop>_3d9d629289199cf23663a21c7a96190e'] = 'Sterne-Bewertung'; // Star Rating +$_MODULE['<{creativeelements}prestashop>_6a244a63f35840539994ca1b7d224a9c'] = 'Eigene Beschriftung'; // Custom Caption +$_MODULE['<{creativeelements}prestashop>_1c91473a92d118fb1929d3e6975f6a90'] = 'Beschriftung des Anhangs'; // Attachment Caption +$_MODULE['<{creativeelements}prestashop>_0d82790b0612935992bd564a17ce37d6'] = 'Schließen'; // Quit +$_MODULE['<{creativeelements}prestashop>_5f405eb9720e7065c9c383de4d40e664'] = 'Tastaturkürzel'; // Keyboard Shortcuts +$_MODULE['<{creativeelements}prestashop>_0441244fcc68971ded749fe3c45fab92'] = 'Leiste anzeigen/ schließen'; // Show / Hide Panel +$_MODULE['<{creativeelements}prestashop>_94764bde0434a9467c2452999bffc499'] = 'Gehe zu'; // Go To +$_MODULE['<{creativeelements}prestashop>_5afeaba074ef570dc720caaa855d49f6'] = 'Wiederherstellen'; // Redo +$_MODULE['<{creativeelements}prestashop>_1cdc076b28f70afac5fcedadf99fa119'] = 'Rückgängig'; // Undo +$_MODULE['<{creativeelements}prestashop>_d151508da8d36994e1635f7875594424'] = 'Finder'; // Finder +$_MODULE['<{creativeelements}prestashop>_adff855173c9b92b5478129af7d39e03'] = 'Zukunft'; // Future +$_MODULE['<{creativeelements}prestashop>_9157994442d3884a185e82b5df0931bd'] = 'Poster'; // Poster +$_MODULE['<{creativeelements}prestashop>_452a5c072ecdd2a6d27bb1cbb9108f8a'] = 'Lazy Load'; // Lazy Load +$_MODULE['<{creativeelements}prestashop>_be8342af4ac5a74ec8d73f8cacec021d'] = 'Deine URL angeben'; // Enter your URL +$_MODULE['<{creativeelements}prestashop>_12737e0ac21826611dba8b42ce43a4a6'] = 'Innerer Abschnitt'; // Inner Section +$_MODULE['<{creativeelements}prestashop>_0333d78f654f5c73ed8a1ac6866b94ef'] = 'Sobald du deine Seite mit Inhalten gefüllt hast, wird dir diese Übersichtsanzeige alle Elemente der Seite anzeigen. Auf diese Weise kannst du die verschiedenen Abschnitte, Spalten und Widgets effizienter verschieben und verwalten.'; // Once you fill your page with content, this window will give you an overview display of all the page elements. This way, you can easily move around any section, column, or widget. +$_MODULE['<{creativeelements}prestashop>_d3db55a0ce1256f4a2121677fff695fb'] = 'Einfachere Navigation ist da!'; // Easy Navigation is Here! +$_MODULE['<{creativeelements}prestashop>_ce2c8aed9c2fa0cfbed56cbda4d8bf07'] = 'Leer'; // Empty +$_MODULE['<{creativeelements}prestashop>_7392e5a07cc56647b45a9598ce4d646d'] = 'Navigator'; // Navigator +$_MODULE['<{creativeelements}prestashop>_72ef2b9b6965d078e3c7f95487a82d1c'] = ' Überspringen'; // Skip +$_MODULE['<{creativeelements}prestashop>_5c3a475e00e0f928bebed9b03118a7fb'] = 'URL einfügen oder lostippen'; // Paste URL or type +$_MODULE['<{creativeelements}prestashop>filter_control_fb5d805f5b3b22e4fd4a1bc66875dbe3'] = 'Tönung'; // Hue +$_MODULE['<{creativeelements}prestashop>_4252b72e6ebcd4d4b4c2e46a786f03d2'] = 'Zoom'; // Zoom +$_MODULE['<{creativeelements}prestashop>_66ba162102bbf6ae31b522aec561735e'] = 'Single'; // Single +$_MODULE['<{creativeelements}prestashop>_ca0de64bfaed84cff1811c8a557460e8'] = 'Gesamter Inhalt'; // All Content +$_MODULE['<{creativeelements}prestashop>_771beb30ea03f1a09209a509ba0a95e7'] = 'Stil zurückgesetzt'; // Style Reset +$_MODULE['<{creativeelements}prestashop>_f373922b0d1d9582e2e01632fa435be2'] = 'Stil eingefügt'; // Style Pasted +$_MODULE['<{creativeelements}prestashop>_8c2857a9ad1d8f31659e35e904e20fa6'] = 'Logo'; // Logo +$_MODULE['<{creativeelements}prestashop>_bdc558034c3fa1f53c632cb2b4a081eb'] = 'Bescheidenes Branding'; // Modest Branding +$_MODULE['<{creativeelements}prestashop>_28f69ec829f28c18234aeb9b4bf84085'] = 'Video-Info'; // Video Info +$_MODULE['<{creativeelements}prestashop>_e6b391a8d2c4d45902a23a8b6585703d'] = 'URL'; // URL +$_MODULE['<{creativeelements}prestashop>_9b5e1c921934d0b8af2f354006adc776'] = 'Selbstgehostet'; // Self Hosted +$_MODULE['<{creativeelements}prestashop>_f31bbdd1b3e85bccd652680e16935819'] = 'Quelle'; // Source +$_MODULE['<{creativeelements}prestashop>_a102718b3b0839b017af5764e82f6bcd'] = 'Bitte stelle sicher, dass die ID einzigartig ist und nicht irgendwo anders auf der Seite verwendet wird, wo das Formular angezeigt wird. Dieses Feld erlaubt die Zeichen A-z 0-9 & Unterstrich ohne Leerzeichen.'; // Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows A-z 0-9 & underscore chars without spaces. +$_MODULE['<{creativeelements}prestashop>_04d536bf597bcb004268f6d8c509dbde'] = 'Button-ID'; // Button ID +$_MODULE['<{creativeelements}prestashop>_a7d6475ec8993b7224d6facc8cb0ead6'] = 'Website'; // Site +$_MODULE['<{creativeelements}prestashop>_8d5e7e72f12067991186cdf3cb7d5d9d'] = 'Premium'; // Premium +$_MODULE['<{creativeelements}prestashop>_86176e1d3dd3649de183dc33b7750f62'] = 'Überblendmodus'; // Blend Mode +$_MODULE['<{creativeelements}prestashop>_74f88681be25e673fa7caacae1b165bc'] = 'Verstanden'; // Got It +$_MODULE['<{creativeelements}prestashop>_2cef6b933418f084afe1c5e44bcaa4bc'] = 'Du kannst jetzt alle Bearbeitungsaktionen über einen Rechtsklick (Kontextmenü) erreichen.'; // Now you can access all editing actions using right click. +$_MODULE['<{creativeelements}prestashop>_fd27a26bce8b01ecb7f38b4e1d6d2ad5'] = 'Rechtsklick kennenlernen'; // Meet Right Click +$_MODULE['<{creativeelements}prestashop>_02b2a8ed2ee59fb6a1ccf3716c988597'] = 'Gesamten Inhalt kopieren'; // Copy All Content +$_MODULE['<{creativeelements}prestashop>_e86a54e13ae40856b7c38b514dc6974b'] = 'Stil zurücksetzen'; // Reset Style +$_MODULE['<{creativeelements}prestashop>_086efb53f636c4bf4fc83938d9a1d39e'] = 'Stil kopieren'; // Copy Style +$_MODULE['<{creativeelements}prestashop>_5fb63579fc981698f97d55bfecb213ea'] = 'Kopieren'; // Copy +$_MODULE['<{creativeelements}prestashop>_47858182067cd39bac29ead1d6772192'] = 'Vorschau für %s'; // Preview for %s +$_MODULE['<{creativeelements}prestashop>_0f7c6d84b1393efc4b3666e1866a5759'] = 'Widget hierher ziehen'; // Drag widget here +$_MODULE['<{creativeelements}prestashop>filter_control_7f491274a53763ba32b7356ade638e19'] = 'CSS-Filter'; // CSS Filters +$_MODULE['<{creativeelements}prestashop>filter_control_2e3307b9b1a2cc64b48f1cd6977a4b29'] = 'Sättigung'; // Saturation +$_MODULE['<{creativeelements}prestashop>filter_control_c63ecd19a0ca74c22dfcf3063c9805d2'] = 'Kontrast'; // Contrast +$_MODULE['<{creativeelements}prestashop>filter_control_b25323f99788ce64617f018b8a9f5f70'] = 'Helligkeit'; // Brightness +$_MODULE['<{creativeelements}prestashop>filter_control_8b52de510bc5497ac43abfe566be48ab'] = 'Verwischen'; // Blur +$_MODULE['<{creativeelements}prestashop>_889deb44ad445ea359c1285d37f4a498'] = 'Eine Endzeit (in Sekunden) angeben'; // Specify an end time (in seconds) +$_MODULE['<{creativeelements}prestashop>_c91a577b72313356fad611c55f43c10f'] = 'Endzeit'; // End Time +$_MODULE['<{creativeelements}prestashop>_3e06b49da8235ee588abdd3f0b58d040'] = 'Eine Startzeit (in Sekunden) angeben'; // Specify a start time (in seconds) +$_MODULE['<{creativeelements}prestashop>_2bbc845892f400626baab5af687527c5'] = 'Startzeit'; // Start Time +$_MODULE['<{creativeelements}prestashop>page_template_c45746064138c22a117ad58d89d67f4b'] = 'CE Volle Breite'; // CE Full Width +$_MODULE['<{creativeelements}prestashop>page_template_80aef4a77adcb8ced5b137d91a103239'] = 'CE Canvas'; // CE Canvas +$_MODULE['<{creativeelements}prestashop>_bad6a5dd8c28e6b14f8e986615e3dc98'] = 'Deckkraft'; // Opacity +$_MODULE['<{creativeelements}prestashop>_7c7efec2d1dfd66eb653cf98d4cc865c'] = 'Etwas ist schief gelaufen.'; // Something went wrong. +$_MODULE['<{creativeelements}prestashop>_95e942c63e81ac4845c306bf110290a8'] = 'Höchstbreite'; // Max Width +$_MODULE['<{creativeelements}prestashop>_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Position'; // Position +$_MODULE['<{creativeelements}prestashop>_8b1b1aa6c2a4785ab415c8fbf20e70d9'] = '%s löschen'; // Delete %s +$_MODULE['<{creativeelements}prestashop>_95af255a86dc70e932634411b3f91e5f'] = 'Dieses Template enthält den Header, Inhalt in voller Breite und den Footer'; // This template includes the header, full-width content and footer +$_MODULE['<{creativeelements}prestashop>_daaa4b3e4a9000898257ccbe03236593'] = 'Kein Header, kein Footer, nur Creative Elements'; // No header, no footer, just Creative Elements +$_MODULE['<{creativeelements}prestashop>_383478f70ecc7dc313b3653a3724ad5b'] = 'Standard-Seitentemplate von deinem Theme'; // Default Page Template from your theme +$_MODULE['<{creativeelements}prestashop>_47b74b5cb415e0a295404acaa62ff67a'] = 'Seitenlayout'; // Page Layout +$_MODULE['<{creativeelements}prestashop>_222a267cc5778206b253be35ee3ddab5'] = 'Aktuell'; // Current +$_MODULE['<{creativeelements}prestashop>_b6d34b10f9eae474e5843a027603c4a3'] = 'Video abspielen'; // Play Video +$_MODULE['<{creativeelements}prestashop>_0125cf5f3ca38b312ca5d3b511c45a13'] = 'Inline'; // Inline +$_MODULE['<{creativeelements}prestashop>_04b2e4188d4ef8051e4699da8af01335'] = 'Trennzeichen'; // Separator +$_MODULE['<{creativeelements}prestashop>_26d59c8605cb411d04f53ba087fbde7b'] = 'Füge Templates hinzu und verwende sie auf der gesamten Website. Du kannst sie einfach exportieren und in ein anderes Projekt importieren. Damit erhältst du einen optimierten Workflow.'; // Add templates and reuse them across your website. Easily export and import them to any other project, for an optimized workflow. +$_MODULE['<{creativeelements}prestashop>_70bb931768a57accd63e7496c25dfd18'] = 'Dein erstes %s erstellen '; // Create Your First %s +$_MODULE['<{creativeelements}prestashop>_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Alle'; // All +$_MODULE['<{creativeelements}prestashop>template_library_b9390195ecad3986568746a2a9b56354'] = 'Meine Templates'; // My Templates +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Kategorie'; // Category +$_MODULE['<{creativeelements}prestashop>_284716247b12b363fd6b6a71bff0918e'] = 'Weitere Aktionen'; // More actions +$_MODULE['<{creativeelements}prestashop>_10e2fab434f7952f5e61211f6445032a'] = 'Templates suchen:'; // Search Templates: +$_MODULE['<{creativeelements}prestashop>_453aceb005ceaf54a47da15fee8b2a26'] = 'Seiten'; // Pages +$_MODULE['<{creativeelements}prestashop>_04c4f9f595c4f21d1de65eb07056c15a'] = 'Blöcke'; // Blocks +$_MODULE['<{creativeelements}prestashop>_971fd8cc345d8bd9f92e9f7d88fdf20c'] = 'Dynamisch'; // Dynamic +$_MODULE['<{creativeelements}prestashop>_9421c4ccec3719a5d299f1b02862412f'] = 'Kontakt-URL'; // Contact URL +$_MODULE['<{creativeelements}prestashop>_9a99c312fda8b07dbdd8ac72dc0773f8'] = 'Aktuelles Datum und Uhrzeit'; // Current Date Time +$_MODULE['<{creativeelements}prestashop>_4001353741fc405c5786493d252a3991'] = 'Interne Verknüpfung URL'; // Internal URL +$_MODULE['<{creativeelements}prestashop>_e68c1ad1f675e02452d7f79969b9708e'] = 'Seiten Titel'; // Page Title +$_MODULE['<{creativeelements}prestashop>_ca341887d434838f3252e2d73f787680'] = 'Anfrage Parameter'; // Request Parameter +$_MODULE['<{creativeelements}prestashop>_781ee6c523f73dae7044617f7cac3941'] = 'Shop Kontakt'; // Shop Contact +$_MODULE['<{creativeelements}prestashop>_5a43012799d4303730f0c9c32a41b0fd'] = 'Shop URL'; // Shop URL +$_MODULE['<{creativeelements}prestashop>_04e0602d4335e2144468e51e5c424590'] = 'Warenkorbregel'; // Cart Rule +$_MODULE['<{creativeelements}prestashop>_4695483802b27812a65749cccd212b17'] = 'Kategoriename'; // Category Name +$_MODULE['<{creativeelements}prestashop>_9bb87066bdb5b0307d442bd9d1552632'] = 'Kategorie URL'; // Category URL +$_MODULE['<{creativeelements}prestashop>_4232c2deb6ff317abf49721680bd818a'] = 'Markenname'; // Brand Name +$_MODULE['<{creativeelements}prestashop>_cad080cee7f847c07d0a0061b2f5f771'] = 'Marke URL'; // Brand URL +$_MODULE['<{creativeelements}prestashop>_8973510d727af4f8c2ba6c1c84d0b718'] = 'Produkt URL'; // Product URL +$_MODULE['<{creativeelements}prestashop>_e21f91c630214ac206a785cccd853154'] = 'Katalog Preisregel'; // Catalog Price Rule + +$_MODULE['<{creativeelements}prestashop>_b1da34ea28921a8fac7d5f1273327229'] = 'Nächster'; // Next +$_MODULE['<{creativeelements}prestashop>_033658cb7158c3f36bf7cf9c0f44fcde'] = 'Voriger'; // Previous +$_MODULE['<{creativeelements}prestashop>_eab23bbc21bd1fbd1207247a9864592b'] = 'Play'; // Play +$_MODULE['<{creativeelements}prestashop>_74322cb2d5a81d5daa8556673f478d7c'] = 'Pause'; // Pause +$_MODULE['<{creativeelements}prestashop>_f582dc21d5a9ffb1bbfadf74318bc5a6'] = 'Selektor'; // Selector +$_MODULE['<{creativeelements}prestashop>_2c7d98f10667515c7b00403e2b3ff9a5'] = 'Telefon'; // Tel +$_MODULE['<{creativeelements}prestashop>_83dff142c5bc22f9147bc823a52e2b4f'] = 'SMS'; // SMS +$_MODULE['<{creativeelements}prestashop>_56ad595875f55ad4163c2783f11fa964'] = 'Google Kalender'; // Google Calendar +$_MODULE['<{creativeelements}prestashop>_2f4523c3fec77710fbefd831cc1b893b'] = 'Outlook Kalender'; // Outlook Calendar +$_MODULE['<{creativeelements}prestashop>_a63a2923058723e763c1e82c75988f5c'] = 'Yahoo Kalender'; // Yahoo Calendar +$_MODULE['<{creativeelements}prestashop>_251a780878152bc8ea7c44050a46f6a0'] = 'Betreff'; // Subject +$_MODULE['<{creativeelements}prestashop>_7f86db886a07a996fe3378fcbecc8041'] = 'Nachricht'; // Message +$_MODULE['<{creativeelements}prestashop>_b6bda532a7e8a7ea0a75069f35ae864f'] = 'Benutzername'; // Username +$_MODULE['<{creativeelements}prestashop>_d93abbcc3d3ff28056c410d12757aa0a'] = 'Datumsformat'; // Date Format +$_MODULE['<{creativeelements}prestashop>_c0740f55b6724b631052066baddbf7b0'] = 'Zeitformat'; // Time Format +$_MODULE['<{creativeelements}prestashop>_1b4a75284a56a339d132e59456d27e3a'] = 'Benutzerdefiniertes Format'; // Custom Format +$_MODULE['<{creativeelements}prestashop>_169920a350e7960154dcdc875dafc8df'] = 'Dokumentation zur Formatierung von Datum und Uhrzeit'; // Documentation on date and time formatting +$_MODULE['<{creativeelements}prestashop>_df9a7c88f7bf07e724b934716cc790f4'] = 'Suchen & Wählen'; // Search & Select +$_MODULE['<{creativeelements}prestashop>_363507878ffebd26d035aa7ba2093f35'] = 'Typ Produktname / Referenz'; // Type Product Name / Ref +$_MODULE['<{creativeelements}prestashop>_a9c548584e357eca69a0f96e8295e524'] = 'Parameter Name'; // Parameter Name +$_MODULE['<{creativeelements}prestashop>_6ba425ac509bdf319cbb43aae65ee954'] = 'Feld'; // Field +$_MODULE['<{creativeelements}prestashop>_45e41f822b049adbf2eedb23cb170188'] = 'Firma'; // Company +$_MODULE['<{creativeelements}prestashop>_4984ae7378622cd416b9aced4cdc7612'] = 'Adresse'; // Address +$_MODULE['<{creativeelements}prestashop>_a4c7dc56186aaf14cb52b6ad6e320d91'] = 'ID'; // ID +$_MODULE['<{creativeelements}prestashop>_882136c04720783972d2ba15cabb2533'] = 'Anzeigename'; // Display Name +$_MODULE['<{creativeelements}prestashop>_719c34f35eef4e53e7a8060f4ac1f5b0'] = 'Geburtstag'; // Birthday +$_MODULE['<{creativeelements}prestashop>_cf8495c5e163a5edd0c194a344fa0458'] = 'Webseite'; // Website +$_MODULE['<{creativeelements}prestashop>_369ee98b6cc4c2ac77e0c4ed5665a33a'] = 'Von'; // From +$_MODULE['<{creativeelements}prestashop>_a2933e922ff8e0247d44938b93e5bb6a'] = 'Bis'; // To +$_MODULE['<{creativeelements}prestashop>_ef69cf49bb993edf5f654dd21ff63f2a'] = 'Währung'; // Currency +$_MODULE['<{creativeelements}prestashop>_0cac3b5a1b412862847fce41fc8978fe'] = 'Preisbetrag'; // Price Amount +$_MODULE['<{creativeelements}prestashop>_71bd0d3f32c2c668811a52eedc3ee8fc'] = 'Preis Integer'; // Price Integer +$_MODULE['<{creativeelements}prestashop>_c504cce3f32c095020e882875cb77d45'] = 'Preis Dezimalen'; // Price Decimals +$_MODULE['<{creativeelements}prestashop>_d456e04d06b851d54f7dd7782cd7f5a2'] = 'Regulärer Betrag'; // Regular Amount +$_MODULE['<{creativeelements}prestashop>_c3091d709b8b46ce1c89b9d2d7f3f3e1'] = 'Preis pro Einheit'; // Unit Price +$_MODULE['<{creativeelements}prestashop>_d9c0bd850f0d755afe4a2f87790926bc'] = 'Dieser Tag hat keine Einstellungen.'; // This tag has no settings. +$_MODULE['<{creativeelements}prestashop>border_control_a5d7f2d1b78f9222563004a41a616334'] = 'Groove'; // Groove +$_MODULE['<{creativeelements}prestashop>_db71f6e371eb7124134284e029343fbb'] = '%s Einstellungen'; // %s Settings +$_MODULE['<{creativeelements}prestashop>_c9344eb2ff26e96823cc252a90f77de8'] = 'Beitragsbild'; // Featured Image +$_MODULE['<{creativeelements}prestashop>_442444e4a8a066e42bd056d71c649288'] = 'Body-Stil'; // Body Style +$_MODULE['<{creativeelements}prestashop>_0945359809dad1fbf3dea1c95a0da951'] = 'Dokument'; // Document +$_MODULE['<{creativeelements}prestashop>_a130ecd03d333805829b11f98cc9c0f9'] = 'Aktion nicht gefunden.'; // Action not found. +$_MODULE['<{creativeelements}prestashop>_da900198c1a7d78f57e400a23733c8bd'] = 'Beitrag nicht gefunden.'; // Post not found. +$_MODULE['<{creativeelements}prestashop>_8a7e7afe17d1c9c4258d5f80e7b7d224'] = 'Token abgelaufen.'; // Token Expired. +$_MODULE['<{creativeelements}prestashop>_b377dbdf3aeb55f9443947236db71ab3'] = 'Festlegen, wie viele Slides pro Swipe gescrollt werden.'; // Set how many slides are scrolled per swipe. +$_MODULE['<{creativeelements}prestashop>_6cd988821d5e8796c47a32e453c95633'] = 'Hinweis: Fixiertes Hintergrundbild funktioniert nur auf dem Desktop.'; // Note: Attachment Fixed works only on desktop. +$_MODULE['<{creativeelements}prestashop>_b1fce7d76fc2b85bb2203bed78d8514c'] = 'Google Early Access'; // Google Early Access +$_MODULE['<{creativeelements}prestashop>_b3ea5d4962bbcb423b6e3693d7a1ea9f'] = 'Unbekannter Fehler'; // Unknown Error +$_MODULE['<{creativeelements}prestashop>_ce71ffa436bfbe5fd6e1f8af2a0671eb'] = 'Speichern wurde deaktiviert bis wieder eine Internetverbindung existiert.'; // Saving has been disabled until you’re reconnected. +$_MODULE['<{creativeelements}prestashop>_dd9742741ad6a068ce129e4fa97aa294'] = 'Serverfehler'; // Server Error +$_MODULE['<{creativeelements}prestashop>_89b5fd445acdad16cd2ee39330fd90bd'] = 'Internetverbindung getrennt.'; // Connection Lost +$_MODULE['<{creativeelements}prestashop>_9d38dcdc957310dcaab2eda11f46c1f8'] = 'Es existiert eine automatische Sicherung dieses Beitrags, die neuer ist als die untenstehende Version. Du kannst die gespeicherte Version im Revisions-Bereich wiederherstellen.'; // There is an autosave of this post that is more recent than the version below. You can restore the saved data fron the Revisions panel +$_MODULE['<{creativeelements}prestashop>_c81c48c260d8fe33746bb88a06a31b40'] = 'Automatische Sicherung wiederherstellen'; // Restore Auto Saved Data +$_MODULE['<{creativeelements}prestashop>_2bd339d85ee3b33e513359ce781b60cc'] = 'Wiederherstellen'; // Restore +$_MODULE['<{creativeelements}prestashop>_5b008951213ac933cab550ae80b43529'] = 'Aktuelle Version'; // Current Version +$_MODULE['<{creativeelements}prestashop>_95d126b737c78e8f8a4e00c0e0170c3a'] = 'Veröffentlichte bearbeiten'; // Edit Published +$_MODULE['<{creativeelements}prestashop>_9b97514a6cb123cccf70b60ae40f9c92'] = 'Entwurf bearbeiten'; // Edit Draft +$_MODULE['<{creativeelements}prestashop>_94c7a492c400660d0ce730ceea7778a9'] = 'Wenn du den privaten Modus aktivierst, wird YouTube so lange keine Informationen über die Besucher deiner Website speichern, bis diese das Video abspielen.'; // When you turn on privacy mode, YouTube won't store information about visitors on your website unless they play the video. +$_MODULE['<{creativeelements}prestashop>_b8a6d142349b07242bf3d2ec60016c41'] = 'Privater Modus'; // Privacy Mode +$_MODULE['<{creativeelements}prestashop>_cbdfcfddce72f99e436eca187f00b290'] = 'Shortcode eingeben'; // Enter your shortcode +$_MODULE['<{creativeelements}prestashop>_b70b756df7f18d4fee17dd1d38bcc135'] = 'Bildunterschrift eingeben'; // Enter your image caption +$_MODULE['<{creativeelements}prestashop>_16f6c60cf0b840982bc1f595ac1641cb'] = 'Code eingeben'; // Enter your code +$_MODULE['<{creativeelements}prestashop>_2fcd87fc57c33e7fb8a1df657776f274'] = 'Gib hier deine Überschrift ein'; // Add Your Heading Text Here +$_MODULE['<{creativeelements}prestashop>_1909e5c12b63e80afbedfe3a4f5c3363'] = 'Warnung verwerfen'; // Dismiss alert +$_MODULE['<{creativeelements}prestashop>_960fa36947fbb569380aba693b494feb'] = 'Gib deine Beschreibung ein'; // Enter your description +$_MODULE['<{creativeelements}prestashop>_92fb9e9788b3d8cad885c5fe16343c75'] = 'Das ist eine Warnmeldung'; // This is an Alert +$_MODULE['<{creativeelements}prestashop>_cdbf49d6ac280f03cc7d24714bc42a4e'] = 'Aktiv-Icon'; // Active Icon +$_MODULE['<{creativeelements}prestashop>_f0a0314cf8e7c3ad6d977d5adacfeb0d'] = 'Zuletzt am %1$s von %2$s bearbeitet'; // Last edited on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>_4fccea1707d00bf8926ebf0897e4a325'] = 'Entwurf am %1$s von %2$s gespeichert'; // Draft saved on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>revision_date_format_b29ef0e5dad2e3b86cfa343482ce8e9c'] = 'M j, H:i'; // M j, H:i +$_MODULE['<{creativeelements}prestashop>_c8a59e7135a20b362f9c768b09454fdb'] = 'Verwerfen'; // Dismiss +$_MODULE['<{creativeelements}prestashop>_c829769966db94e5478e39391b995ac5'] = 'Alle Revisionen anzeigen'; // View All Revisions +$_MODULE['<{creativeelements}prestashop>_70d4a329d37dc2df41466a420e983966'] = 'Ansehen'; // Have a look +$_MODULE['<{creativeelements}prestashop>_2199472d685d3b90df180760ea665a71'] = 'Weiter bearbeiten'; // Keep Editing +$_MODULE['<{creativeelements}prestashop>_b1b95b84202450b35fd7afb914031d55'] = 'Dies ist nur ein Entwurf. Spiele ein Wenig damit herum und wenn du fertig bist - klicke auf Aktualisieren.'; // This is just a draft. Play around and when you're done - click update. +$_MODULE['<{creativeelements}prestashop>_57986647011dee008f9d492989a90fb1'] = 'Hurra! %s ist veröffentlicht.'; // Hurray! Your %s is live. +$_MODULE['<{creativeelements}prestashop>_a4d3b161ce1309df1c4e25df28694b7b'] = 'Absenden'; // Submit +$_MODULE['<{creativeelements}prestashop>_06933067aafd48425d67bcb01bba5cb6'] = 'Speichern'; // Update +$_MODULE['<{creativeelements}prestashop>_9b9d8a976b42e0bd66381797644943d5'] = 'Veröffentlicht'; // Published +$_MODULE['<{creativeelements}prestashop>_010f371ad222d36015d7ab70f3256160'] = 'Trotzdem fortfahren'; // Proceed Anyway +$_MODULE['<{creativeelements}prestashop>_1a7acf9e1a4485f55a6d75bcc40655e3'] = 'Dein Browser ist nicht mit allen Bearbeitungsfunktionen von Creative Elements kompatibel. Wir empfehlen dir, zu einem anderen Browser wie Chrome oder Firefox, zu wechseln.'; // Your browser isn't compatible with all of Creative Elements' editing features. We recommend you switch to another browser like Chrome or Firefox. +$_MODULE['<{creativeelements}prestashop>_0c6f349a95f4864d65730cad900e3551'] = 'Dein Browser ist nicht kompatibel.'; // Your browser isn't compatible +$_MODULE['<{creativeelements}prestashop>_c12f59e844e6d839ba6ee4cd26e8ea27'] = 'Keine Ergebnisse gefunden'; // No Results Found +$_MODULE['<{creativeelements}prestashop>_f12a625ade1d1349f8d760c137d2e4b8'] = 'Bitte stelle sicher, dass deine Suchbegriffe korrekt buchstabiert sind, oder versuche es mit anderen Begriffen.'; // Please make sure your search is spelled correctly or try a different words. +$_MODULE['<{creativeelements}prestashop>_f44c3ec59688f8173b34c08b1ad961b2'] = 'Keine Lieblingstemplates'; // No Favorite Templates +$_MODULE['<{creativeelements}prestashop>_081a48a2a1f0eee4b209bcdaf54803c0'] = 'Du kannst jedes beliebige vorgefertigte Template als Favorit markieren.'; // You can mark any pre-designed template as a favorite. +$_MODULE['<{creativeelements}prestashop>_fb4fb9b2615dddca1a6cda5ecdfb47c0'] = 'Dokumenten-Einstellungen importieren'; // Import Document Settings +$_MODULE['<{creativeelements}prestashop>_6083cfeb84f702b582e655b5f4168579'] = 'Editor anzeigen'; // Show Panel +$_MODULE['<{creativeelements}prestashop>_b95d3d403307efa40962df363734e941'] = 'Moduleinstellungen'; // Module Settings +$_MODULE['<{creativeelements}prestashop>_1aa14e9f377b528b5537d70fbd35c6a2'] = 'Datei auswählen'; // Select File +$_MODULE['<{creativeelements}prestashop>_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'oder'; // or +$_MODULE['<{creativeelements}prestashop>_1a10f6476e54db68548305a69fdcec09'] = 'Ziehe dein .JSON oder .zip Template hierher.'; // Drag & drop your .JSON or .zip template file +$_MODULE['<{creativeelements}prestashop>_4a66d51c9716349085fc7ea77edfe5c5'] = 'Template in deine Bibliothek importieren'; // Import Template to Your Library +$_MODULE['<{creativeelements}prestashop>_936ccdb97115e9f35a11d35e3d5b5cad'] = 'Hier Klicken'; // Click here +$_MODULE['<{creativeelements}prestashop>_89ba5a0cd9537dd0cd44a3ece29b877a'] = 'Möchtest du mehr über die Template-Bibliothek von Creative Elements erfahren?'; // Want to learn more about the Elementor library? +$_MODULE['<{creativeelements}prestashop>_01165dcf77c191e6c69b31d98b0ec6ff'] = 'Favorit'; // Favorite +$_MODULE['<{creativeelements}prestashop>_52fc7a0ab6328f8aaabb6ef411816b9e'] = 'Erstellungsdatum'; // Creation Date +$_MODULE['<{creativeelements}prestashop>_7b1255f8fdd0cb8751baee55621164e1'] = 'Erstellt von'; // Created By +$_MODULE['<{creativeelements}prestashop>_13348442cc6a27032d2b4aa28b75a5d3'] = 'Suche'; // Search +$_MODULE['<{creativeelements}prestashop>_f2c3119ccf960f54688bf6f227390e36'] = 'Meine Favoriten'; // My Favorites +$_MODULE['<{creativeelements}prestashop>_2cc1943d4c0b46bfcf503a75c44f988b'] = 'Beliebt'; // Popular +$_MODULE['<{creativeelements}prestashop>_349d789f5d11f630c282f547b568d08d'] = 'Trend'; // Trend +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Neu'; // New +$_MODULE['<{creativeelements}prestashop>_a0415b5ba0373565c33828715bba8c8d'] = 'Template importieren'; // Import Template +$_MODULE['<{creativeelements}prestashop>_1063e38cb53d94d386f21227fcd84717'] = 'Löschen'; // Remove +$_MODULE['<{creativeelements}prestashop>_ed75712b0eb1913c28a3872731ffd48d'] = 'Duplizieren'; // Duplicate +$_MODULE['<{creativeelements}prestashop>_9c4d6fcf53fc6c3ad770fed0e57ccc49'] = 'Drag & Drop'; // Drag & Drop +$_MODULE['<{creativeelements}prestashop>_bf16d61e5b485458fa158bfb5584befc'] = 'Editor ausblenden'; // Hide Panel +$_MODULE['<{creativeelements}prestashop>_0bec922eda645e0ac505d942505b9be9'] = 'Als Template speichern'; // Save as Template +$_MODULE['<{creativeelements}prestashop>_5778e182c50cbba1d86e14690c8aa35c'] = 'Als Entwurf speichern'; // Save Draft +$_MODULE['<{creativeelements}prestashop>_23183cd144a4dcc5a599a4b6506f7154'] = 'Optionen speichern'; // Save Options +$_MODULE['<{creativeelements}prestashop>_110a4b01beabd53b661a47d4b44bd7a8'] = 'Speichern'; // Publish +$_MODULE['<{creativeelements}prestashop>_b2e886db4593c5ddc8e369f34d3744f3'] = 'Vorschau der Änderungen'; // Preview Changes +$_MODULE['<{creativeelements}prestashop>_82815a6312a1e5a2ffafff6f1734df30'] = 'Zurück zum Back-Office'; // Exit to Back-office +$_MODULE['<{creativeelements}prestashop>_4bda311edbaa9e54025c057c6c102fba'] = 'Suche-Widget'; // Search Widget: +$_MODULE['<{creativeelements}prestashop>_b0d066425fa39974fe45240b33bbfacb'] = 'Auf Standardeinstellungen zurücksetzen'; // Back to default +$_MODULE['<{creativeelements}prestashop>typography_control_46e52f6310c224aa5846b3a5a5b1c6fe'] = 'Durchstreichen'; // Line Through +$_MODULE['<{creativeelements}prestashop>typography_control_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Überstrich'; // Overline +$_MODULE['<{creativeelements}prestashop>typography_control_852721aa5fc738dfedff2945d71da439'] = 'Unterstreichen'; // Underline +$_MODULE['<{creativeelements}prestashop>typography_control_24365794120e03b807acbd05c0a48db9'] = 'Auszeichnung'; // Decoration +$_MODULE['<{creativeelements}prestashop>_ff0a58d7006cd437862608b39e9cc7fe'] = 'Unverknüpfte Werte'; // Unlinked values +$_MODULE['<{creativeelements}prestashop>_6ca8bf4766b9dc7b1ea8b69562faac3f'] = 'Auszug'; // Excerpt +$_MODULE['<{creativeelements}prestashop>_652122103181aa2752efaecab300edf0'] = 'Zugriff verweigert.'; // Access denied. +$_MODULE['<{creativeelements}prestashop>_87557f11575c0ad78e4e28abedc13b6e'] = 'Ende'; // End +$_MODULE['<{creativeelements}prestashop>_a6122a65eaa676f700ae68d393054a37'] = 'Beginn'; // Start +$_MODULE['<{creativeelements}prestashop>_cf85e0aa6dbff8e1237bc70f6a1da1b2'] = 'Eingabe hier'; // Type Here +$_MODULE['<{creativeelements}prestashop>_289e1087105787353c5bae37c7982aa8'] = 'Seite aktualisieren'; // Reload Page +$_MODULE['<{creativeelements}prestashop>_f9636eccbb10d99e4aabfefe4ebfe479'] = 'Deine Sitzung ist abgelaufen. Bitte aktualisiere die Seite, um mit der Bearbeitung fortzufahren.'; // Your session has expired. Please reload the page to continue editing. +$_MODULE['<{creativeelements}prestashop>_c85a251cc457840f1e032f1b733e9398'] = 'Zeitüberschreitung'; // Timeout +$_MODULE['<{creativeelements}prestashop>_57b4c0031bc5c78e49d0a7e568115ff1'] = 'Es tut uns leid, aber es ist etwas schiefgelaufen. Klicke auf "Mehr erfahren" und befolge jeden einzelnen Schritt, um das Problem zu beheben.'; // We're sorry, but something went wrong. Click on 'Learn more' and follow each of the steps to quickly solve it. +$_MODULE['<{creativeelements}prestashop>_fab4cde10ae2ec07bdee32a6749a3e7c'] = 'Die Vorschau konnte nicht geladen werden'; // The preview could not be loaded +$_MODULE['<{creativeelements}prestashop>_26342c8741f7cf60f979e91ad570b291'] = 'Standardfarben'; // Default Colors +$_MODULE['<{creativeelements}prestashop>_b2f5eb6ce3e6e97e89ec594c52ba48c1'] = 'Unbekannter Wert'; // Unknown Value +$_MODULE['<{creativeelements}prestashop>_351683969bd504e253fb05ef9b542bc8'] = 'Sobald du anfängst zu arbeiten, ist es möglich, jede Änderung, die du im Editor vornimmst, rückgängig zu machen oder zu wiederholen.'; // Once you start working, you'll be able to redo / undo any action you make in the editor. +$_MODULE['<{creativeelements}prestashop>_abb565ed2df80ae405ca35167910924d'] = 'Noch kein Verlauf vorhanden'; // No History Yet +$_MODULE['<{creativeelements}prestashop>_8d7eb55a18265b4dc59ea4f896e7c1ed'] = 'Wechsle zum Revisionen-Tab für ältere Versionen'; // Switch to Revisions tab for older versions +$_MODULE['<{creativeelements}prestashop>_fd88b11cfde6aa5e3c7ff0553b534885'] = 'Revisionen'; // Revisions +$_MODULE['<{creativeelements}prestashop>_06df33001c1d7187fdd81ea1f5b277aa'] = 'Änderungen'; // Actions +$_MODULE['<{creativeelements}prestashop>_95bfdefaaf01553cbf21ccd942855c69'] = 'Verschoben'; // Moved +$_MODULE['<{creativeelements}prestashop>_f29ddbfb905eb2593fdcdfb243f9af85'] = 'Hinzugefügt'; // Added +$_MODULE['<{creativeelements}prestashop>_5b6cf869265c13af8566f192b4ab3d2a'] = 'Dokumentation'; // Documentation +$_MODULE['<{creativeelements}prestashop>_16d2b386b2034b9488996466aaae0b57'] = 'Verlauf'; // History +$_MODULE['<{creativeelements}prestashop>_bf59b07aded13165bea058e8f636a308'] = 'UI Farbe bei Mauszeigerkontakt'; // UI Hover Color +$_MODULE['<{creativeelements}prestashop>_ead9ed73aace2253b77e3455b2105ea3'] = 'UI Farbe'; // UI Color +$_MODULE['<{creativeelements}prestashop>_67ed6ddb7d890b23166c1bef771e9451'] = 'Bearbeitet'; // Edited +$_MODULE['<{creativeelements}prestashop>_01a94df3c831063bf2b04d9c09e2b972'] = 'Bearbeitung begonnen'; // Editing Started +$_MODULE['<{creativeelements}prestashop>text_shadow_control_3f39588bb19e28051d9aedfbb170025c'] = 'Schatten'; // Shadow +$_MODULE['<{creativeelements}prestashop>_00cd7be4cb21c59179316d7844a8cfc4'] = 'Stumm schalten'; // Mute +$_MODULE['<{creativeelements}prestashop>_03ea6664bd8bb744fadc253f84bf32d5'] = 'Wähle eine JSON-Vorlagendatei oder ein .zip-Archiv von Vorlagen aus und füge sie zu den Templates hinzu, die in der Bibliothek zur Verfügung stehen.'; // Choose a JSON template file or a .zip archive of templates, and add them to the list of templates available in your library. +$_MODULE['<{creativeelements}prestashop>text_shadow_control_86e470e0e13bcfec3b2e102c167fe223'] = 'Textschatten'; // Text Shadow +$_MODULE['<{creativeelements}prestashop>_a889e4cafb176aebf2d32a9037cbb227'] = 'Im Editor aktivieren'; // Enable In Editor +$_MODULE['<{creativeelements}prestashop>_a97cc615f64c36e0f7cb6ea6e94c948d'] = 'Öffnet automatisch alle Bilder-Links in der Lightbox. Gilt für alle Bilder, für die die Verlinkung auf die Bilddatei gesetzt wurde.'; // Open all image links in a lightbox popup window. The lightbox will automatically work on any link that leads to an image file. +$_MODULE['<{creativeelements}prestashop>_060e9cb662a63ad93391971af1ced41e'] = 'Bilder-Lightbox'; // Image Lightbox +$_MODULE['<{creativeelements}prestashop>_9a51a007b33a46e553def6423aad8648'] = 'Globale Einstellungen'; // Global Settings +$_MODULE['<{creativeelements}prestashop>_d727e004d42165085a9b12a006cf31fc'] = 'Definiert die Vorgabe für den Abstand zwischen Widgets (Standard-Vorgabe: 20)'; // Sets the default space between widgets (Default: 20) +$_MODULE['<{creativeelements}prestashop>_83473b478b2b3b5ece5200f5f60cb055'] = 'Verzögerung'; // Animation Delay +$_MODULE['<{creativeelements}prestashop>_c626b471f89bc0c52d34a3a3f7df35c5'] = 'Z-Index'; // Z-Index +$_MODULE['<{creativeelements}prestashop>_a585b417342e2b83baa9e0c91631b635'] = 'Übergangsdauer'; // Transition Duration +$_MODULE['<{creativeelements}prestashop>_155731c389e7798846fc9daeb3d4872a'] = 'Übergangsverzögerung'; // Transition Delay +$_MODULE['<{creativeelements}prestashop>_f5b67dd021f56100a6ea99169a67bf5e'] = 'Widget Abstand'; // Widgets Space +$_MODULE['<{creativeelements}prestashop>_b95c09fb28e80cc672fd533a62252d70'] = '%s hinzufügen'; // Add %s +$_MODULE['<{creativeelements}prestashop>_b289b32a5fe99e0c7e9369e56f19700d'] = 'Achtung: Der Import kann bestehende Einstellungen überschreiben.'; // Attention: Importing may override previous settings. +$_MODULE['<{creativeelements}prestashop>_b3f82cf76f55546dc898d561c847b5d9'] = 'Möchtest du auch die Seiteneinstellungen des Templates importieren?'; // Do you want to also import the document settings of the template? +$_MODULE['<{creativeelements}prestashop>_ebbb5896554d13cc4f2e46a9e44eb51e'] = '„nofollow“ hinzufügen'; // Add nofollow +$_MODULE['<{creativeelements}prestashop>_2959ce8aed67d6b6e6f5cefd601f1091'] = 'In einem neuen Fenster öffnen'; // Open in new window +$_MODULE['<{creativeelements}prestashop>_0fb7010ec16c91ec543a440daab8917b'] = 'Link-Optionen'; // Link Options +$_MODULE['<{creativeelements}prestashop>box_shadow_control_606b51cc1c9d0b4af394419a22f2ff1f'] = 'Kontur'; // Outline +$_MODULE['<{creativeelements}prestashop>box_shadow_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Position'; // Position +$_MODULE['<{creativeelements}prestashop>_7dfa8bf72c98a7c1927d689cdbc49ce1'] = '%s bearbeiten'; // Edit %s +$_MODULE['<{creativeelements}prestashop>_39a33ab3ae10c15b5c60328b23512713'] = '%s löschen'; // Remove %s +$_MODULE['<{creativeelements}prestashop>_60b3911c3a666b23f2579c62a6416542'] = '%s duplizieren'; // Duplicate %s +$_MODULE['<{creativeelements}prestashop>_6ed562a0d4381eef12d92c87520f3208'] = 'Widget'; // Widget +$_MODULE['<{creativeelements}prestashop>_ec53a8c4f07baed5d8825072c89799be'] = 'Status'; // Status +$_MODULE['<{creativeelements}prestashop>_d511f8439ecde36647437fbba67a4394'] = 'Abstand'; // Space +$_MODULE['<{creativeelements}prestashop>_cc74161b4d0042cb69688fc031335b36'] = 'Initiale'; // Drop Cap +$_MODULE['<{creativeelements}prestashop>_91ba387c0204e8d0bdfa4e589f850606'] = 'Seitentitel Selektor'; // Page Title Selector +$_MODULE['<{creativeelements}prestashop>_c39aca79ca3cc4558a313f65528a47a7'] = 'Stil einfügen'; // Paste Style +$_MODULE['<{creativeelements}prestashop>_278c491bdd8a53618c149c4ac790da34'] = 'Template'; // Template +$_MODULE['<{creativeelements}prestashop>_4dcd94eeeaad2b446cdea3c97f67c974'] = 'Funktioniert nicht? Du kannst in den Einstellungen einen anderen Selektor eintragen.'; // Not working? You can set a different selector for the title in the Settings page. +$_MODULE['<{creativeelements}prestashop>_d38fd78cc216991579c255174909bd73'] = 'Titel ausblenden'; // Hide Title +$_MODULE['<{creativeelements}prestashop>_7e5d6ab43f675667c7109ecd0ea8dabf'] = 'In den Vordergrund'; // Bring to Front +$_MODULE['<{creativeelements}prestashop>_ee08ead15605dc63a2ad3357d04f5838'] = 'Lightbox'; // Lightbox +$_MODULE['<{creativeelements}prestashop>_5a2cafc2b0fdf3e5242d40a878db7129'] = 'Zwischenraum'; // Space Between +$_MODULE['<{creativeelements}prestashop>_4ee29ca12c7d126654bd0e5275de6135'] = 'Liste'; // List +$_MODULE['<{creativeelements}prestashop>shapes_2b1f94ef23b79bf90eb891cae1df7a90'] = 'Buch'; // Book +$_MODULE['<{creativeelements}prestashop>shapes_8a9e64d86ed12ad40de129bc7f4683b2'] = 'Geteilt'; // Split +$_MODULE['<{creativeelements}prestashop>shapes_0f4e1aaabd074689b7d3ead824d1ee8e'] = 'Pfeil'; // Arrow +$_MODULE['<{creativeelements}prestashop>shapes_2c7642ce7af68f37ad5f82153ec30f2b'] = 'Wellenmuster'; // Waves Pattern +$_MODULE['<{creativeelements}prestashop>shapes_a609a9143e96c90080bddddb3305284f'] = 'Wellen Pinselform'; // Waves Brush +$_MODULE['<{creativeelements}prestashop>shapes_a4b44939aabfe8df39b1ecf05fa95c0a'] = 'Wellen'; // Waves +$_MODULE['<{creativeelements}prestashop>shapes_62d331ed3fa84befe1b7b3a45fe3c630'] = 'Bogen asymmetrisch'; // Curve Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_2cb4d4a3f8dacd623fa045a44febd476'] = 'Bogen'; // Curve +$_MODULE['<{creativeelements}prestashop>shapes_8af1e1ff4512e7d258e9b8ea8e9b48ef'] = 'Fächer transparent'; // Fan Opacity +$_MODULE['<{creativeelements}prestashop>shapes_253761d8ff1b6655697cb0d9962d2537'] = 'Schräge transparent'; // Tilt Opacity +$_MODULE['<{creativeelements}prestashop>shapes_686319a93c35facda5c3da08875fb394'] = 'Schräge'; // Tilt +$_MODULE['<{creativeelements}prestashop>shapes_bef629014564e9ece50fad279b2ab211'] = 'Dreieck asymmetrisch'; // Triangle Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_5e5500cb2b82eb72d550de644bd1b64b'] = 'Dreieck'; // Triangle +$_MODULE['<{creativeelements}prestashop>shapes_ff8e3e7230eb6da5eb9df66861459010'] = 'Pyramiden'; // Pyramids +$_MODULE['<{creativeelements}prestashop>shapes_4fae8be981bd327f1302f4b678afe734'] = 'Zickzack'; // Zigzag +$_MODULE['<{creativeelements}prestashop>shapes_4a8f72b777dc9735afaebac72822c77e'] = 'Wolken'; // Clouds +$_MODULE['<{creativeelements}prestashop>shapes_08fb41620aa4c498a1f2ef09bbc1183c'] = 'Tropfen'; // Drops +$_MODULE['<{creativeelements}prestashop>shapes_8e8c2adc91106422362ffd9b8b44e9a2'] = 'Berge'; // Mountains +$_MODULE['<{creativeelements}prestashop>_9b8958acb7be504bb5f55f17c0eea366'] = 'Umkehren'; // Invert +$_MODULE['<{creativeelements}prestashop>_9ffbd422925a6839ee820ddbc59278c5'] = 'Wenden'; // Flip +$_MODULE['<{creativeelements}prestashop>_3dd971eb0a2385db4f30e71a456daf8a'] = 'Trennlinie Form'; // Shape Divider +$_MODULE['<{creativeelements}prestashop>_48686859ede3505d93db63bedafb649e'] = 'Achtung: Die folgende Farben werden nicht funktionieren, wenn die Standardfarben aktiviert sind.'; // Note: The following colors won't work if Default Colors are enabled. +$_MODULE['<{creativeelements}prestashop>_7d11089c148e5d9b9e686b62454a491e'] = 'Navigations-Breite'; // Navigation Width +$_MODULE['<{creativeelements}prestashop>_eee0168be69b854c20621fc6f01cc3fc'] = 'Hover'; // Hover +$_MODULE['<{creativeelements}prestashop>_d55b3ffa9fc8021e934158ca07e2770e'] = 'Eigene ID OHNE die Raute einfügen. Z.B.: meine-id'; // Add your custom id WITHOUT the Pound key. e.g: my-id +$_MODULE['<{creativeelements}prestashop>_7b366044b5cb5aad6cc2fabb977c8534'] = 'CSS ID'; // CSS ID +$_MODULE['<{creativeelements}prestashop>background_control_45f4ce6c3306644b1efe333f4f8d6929'] = 'Winkel'; // Angle +$_MODULE['<{creativeelements}prestashop>background_control_fdc32a55217f1ca054f1f2b51ef4f6ec'] = 'Radial'; // Radial +$_MODULE['<{creativeelements}prestashop>background_control_32a843da6ea40ab3b17a3421ccdf671b'] = 'Linear'; // Linear +$_MODULE['<{creativeelements}prestashop>background_control_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Art'; // Type +$_MODULE['<{creativeelements}prestashop>background_control_d9eb9d6792d85c5d2433902a63116ad5'] = 'Zweite Farbe'; // Second Color +$_MODULE['<{creativeelements}prestashop>background_control_ce5bf551379459c1c61d2a204061c455'] = 'Position'; // Location +$_MODULE['<{creativeelements}prestashop>background_control_5e59525cb7d1d1cd93be0b9f36e9d09a'] = 'Verlauf'; // Gradient +$_MODULE['<{creativeelements}prestashop>_512fec27328fb722291cf6ecf36fa913'] = 'Die `von` und `zu` URL’s müssen unterschiedlich sein'; // The `from` and `to` URL's must be different +$_MODULE['<{creativeelements}prestashop>_d2b49c98219ccb89d57a87f2a0a4b4c2'] = 'Die `von` und `zu` URLs müssen gültige URLs sein'; // The `from` and `to` URL's must be valid URL's +$_MODULE['<{creativeelements}prestashop>_2b3a87fb1d58406bd4b58eeb2af2f23c'] = 'Diese Revision kann nicht gelöscht werden.'; // Cannot delete this revision. +$_MODULE['<{creativeelements}prestashop>_ee9d01da1e865af1b559fa7c8c047555'] = 'vor %1$s (%2$s)'; // %1$s ago (%2$s) +$_MODULE['<{creativeelements}prestashop>revision_date_format_bd8abeec6fc85d0fa0846a78ef6554b8'] = 'j M @ H:i'; // M j @ H:i +$_MODULE['<{creativeelements}prestashop>_0cc5d0ddd0ea34a8490e6e7fdb2cf924'] = 'Automatische Speicherung'; // Autosave +$_MODULE['<{creativeelements}prestashop>_32c676ac5296556c0573a301ef5ab07b'] = 'Revision'; // Revision +$_MODULE['<{creativeelements}prestashop>_3fb0206d178d45a9b3542587483d4cd2'] = 'Es scheint, als ob die Funktion für Beitrags-Revisionen in deiner Website nicht zur Verfügung steht.'; // It looks like the post revision feature is unavailable in your website. +$_MODULE['<{creativeelements}prestashop>_3c4f26f0975793eb27edab314f670410'] = 'Beginne mit dem Gestalten deiner Seite. Und, du kannst den kompletten Verlauf der Revisionen hier sehen.'; // Start designing your page and you'll be able to see the entire revision history here. +$_MODULE['<{creativeelements}prestashop>_b8c4a80d0eda1423acdda2bd6680be78'] = 'Im Revisionen-Verlauf werden vorherige Versionen deiner Arbeit gespeichert, die du jederzeit wiederherstellen kannst.'; // Revision history lets you save your previous versions of your work, and restore them any time. +$_MODULE['<{creativeelements}prestashop>_53e5aa2c97fef1555d2511de8218c544'] = 'von'; // By +$_MODULE['<{creativeelements}prestashop>_585823316b8534dcef7df30ebeab9951'] = 'Noch keine Revisionen gespeichert'; // No Revisions Saved Yet +$_MODULE['<{creativeelements}prestashop>_cf82b977e27ef9ac33709a3effde83a2'] = 'Tausendertrennzeichen'; // Thousand Separator +$_MODULE['<{creativeelements}prestashop>background_control_7a1920d61156abc05a60135aefe8bc67'] = 'Vorgabe'; // Default +$_MODULE['<{creativeelements}prestashop>_6579fbb112744c89b2c74f479df5f94b'] = 'Mit eigenem CSS kannst du CSS-Code zu jedem Widget hinzufügen. Dies wird dann im Editor sofort angewandt.'; // Custom CSS lets you add CSS code to any widget, and see it render live right in the editor. +$_MODULE['<{creativeelements}prestashop>_42e6feb7f76e910efcda54034ecc83ce'] = 'Eigenes CSS'; // Custom CSS +$_MODULE['<{creativeelements}prestashop>_525e4cfb0dd9f1b84d6018feff823cfe'] = 'Mit dieser Funktion kannst du ein Widget als global speichern und an mehreren Stellen einfügen. Alle Instanzen können dann von einem einzigen Ort aus bearbeitet werden.'; // With this feature, you can save a widget as global, then add it to multiple areas. All areas will be editable from one single place. +$_MODULE['<{creativeelements}prestashop>_d15305d7a4e34e02489c74a5ef542f36'] = 'Aus'; // Off +$_MODULE['<{creativeelements}prestashop>_521c36a31c2762741cf0f8890cbe05e3'] = 'An'; // On +$_MODULE['<{creativeelements}prestashop>_5d4d8771b47d6c5166952822e552f082'] = 'Extra groß'; // Extra Large +$_MODULE['<{creativeelements}prestashop>_581a3d012fd82e4905a9fe0db3b37bfe'] = 'Extra klein'; // Extra Small +$_MODULE['<{creativeelements}prestashop>_52293f13937b8aed21da15967dad191a'] = 'Ungültige Eingabe: Die Template-ID kann nicht dieselbe sein, wie die der akuell bearbeiteten Templates. Bitte eine andere auswählen.'; // Invalid Data: The Template ID cannot be the same as the currently edited template. Please choose a different one. +$_MODULE['<{creativeelements}prestashop>_9313566fe19aca293daefe4ce37942bf'] = 'Oberflächendesign'; // Skin +$_MODULE['<{creativeelements}prestashop>_3c1065e0c6f9907043f41d333a91b80e'] = 'Wähle, welche welche Farben in der Farbauswahl des Editors erscheinen. Dies vereinfacht den Zugriff auf die Farben der Webseite.'; // Choose which colors appear in the editor's color picker. This makes accessing the colors you chose for the site much easier. +$_MODULE['<{creativeelements}prestashop>_280123f6890e1c72895353373d2caf09'] = 'Absteigend sortieren'; // Descending order +$_MODULE['<{creativeelements}prestashop>_a4f0054ae4e726280b463caec716d1e9'] = 'Aufsteigend sortiert'; // Ascending order +$_MODULE['<{creativeelements}prestashop>_22f41f72bb164a942b3320ad48914c00'] = 'ACHTUNG! Es werden ALLE INHALTE DIESER SEITE GELÖSCHT. Bist du sicher, dass du fortfahren möchtest?'; // Attention: We are going to DELETE ALL CONTENT from this page. Are you sure you want to do that? +$_MODULE['<{creativeelements}prestashop>_e0ec11596b5e9fec2ae608c59800cebe'] = 'Alle Inhalte löschen'; // Delete All Content +$_MODULE['<{creativeelements}prestashop>_7ffb0536a7eb8a1924bc8cddd5ebd992'] = '%s sind deaktiviert'; // %s are disabled +$_MODULE['<{creativeelements}prestashop>_c6f6c095c286b1f7a30b3366e22ef17f'] = 'Änderungen der Seite aktualisieren'; // Update changes to page +$_MODULE['<{creativeelements}prestashop>_55fb1b11cc3dbb67782af12731c07206'] = 'Farbwähler'; // Color Picker +$_MODULE['<{creativeelements}prestashop>_bad32986401d36fef61ae1ea7d8c6c4b'] = 'Gib den Selektor für das Eltern-Element ein, welches die seitlich ausgedehnten Abschnitte ausfüllen sollen (z.B. #primary / .wrapper / main usw.). Freilassen, um die ganze Breite der Seite auszufüllen.'; // Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width. +$_MODULE['<{creativeelements}prestashop>_b844b7c80a87be2619f6876933b07aea'] = 'Streckt den Abschnitt auf die passende Größe'; // Stretched Section Fit To +$_MODULE['<{creativeelements}prestashop>_e1e75c2b4e63835910c8aee262af0d02'] = 'Setzt die Standard-Breite des Inhaltsbereichs (Standard: 1140)'; // Sets the default width of the content area (Default: 1140) +$_MODULE['<{creativeelements}prestashop>_b7b6baa53f2fedf6c3b60e0327c95a2f'] = 'Abschnitt mit Tabs'; // Tabbed Section +$_MODULE['<{creativeelements}prestashop>_fbfd467e50aef807cbdabd58a86621d3'] = 'Tab-Leiste'; // Tab Bar +$_MODULE['<{creativeelements}prestashop>_8c5751b7fdbcb82b348c2e5ad90b3183'] = 'Überlauf-Scrolling'; // Overflow Scrolling +$_MODULE['<{creativeelements}prestashop>_7bafc2154ab2b900bbb572c80ba6c423'] = 'Streckt den Abschnitt auf die volle Breite der Seite mithilfe von JS.'; // Stretch the section to the full width of the page using JS. +$_MODULE['<{creativeelements}prestashop>_442a913f95b8efa0a564f8acd5953752'] = 'Abschnitt strecken'; // Stretch Section +$_MODULE['<{creativeelements}prestashop>_d87d1f34e54b9466c18bca47e34b0c37'] = 'Dieses Titelbild ersetzt das Hintergrundvideo auf Smartphones und Tablets.'; // This cover image will replace the background video on mobile and tablet devices. +$_MODULE['<{creativeelements}prestashop>_7a007d6bcd82bb60a6d3e4d45dc61eb4'] = 'Spalten umkehren'; // Reverse Columns +$_MODULE['<{creativeelements}prestashop>_87d17f4624a514e81dc7c8e016a7405c'] = 'Mobil'; // Mobile +$_MODULE['<{creativeelements}prestashop>_aba47e8f90c4d9395507038e9215582f'] = 'Standard-Vorschau'; // Default Preview +$_MODULE['<{creativeelements}prestashop>_bc30b765dbe7cfa8d8cfa4184af2c620'] = 'Werte verknüpfen'; // Link values together +$_MODULE['<{creativeelements}prestashop>_6feadb455c64759731e453380c52fbd9'] = 'Shortcode'; // Shortcode +$_MODULE['<{creativeelements}prestashop>_f8508f576cd3f742dfc268258dcdf0dd'] = 'Entfernt'; // Remote +$_MODULE['<{creativeelements}prestashop>_b9709e1b50c06ed39df03fa0b90d40ab'] = 'Jetzt importieren'; // Import Now +$_MODULE['<{creativeelements}prestashop>_fcbad5f8e00955d4129fe79370802ff1'] = 'Templates importieren'; // Import Templates +$_MODULE['<{creativeelements}prestashop>_e153ba109d2d09abb855127d99ed6f25'] = 'Template exportieren'; // Export Template +$_MODULE['<{creativeelements}prestashop>_2e46eab92bf73b409799a8baaa13f8f2'] = '(kein Titel)'; // (no title) +$_MODULE['<{creativeelements}prestashop>template_library_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Typ'; // Type +$_MODULE['<{creativeelements}prestashop>template_library_c7ae4d8246472b41edae4e734cc323aa'] = 'Keine Templates im Papierkorb gefunden'; // No Templates found in Trash +$_MODULE['<{creativeelements}prestashop>template_library_6d9743b85d09a6bc07b10c70ef974687'] = 'Keine Templates gefunden'; // No Templates found +$_MODULE['<{creativeelements}prestashop>template_library_0e74beca97e711d51cf7a12165d583b7'] = 'Template suchen'; // Search Template +$_MODULE['<{creativeelements}prestashop>template_library_842adbd6cb91017b2ff5a1d89bd7c54f'] = 'Template anschauen'; // View Template +$_MODULE['<{creativeelements}prestashop>template_library_b9e1606876afab10e75fb80740c860a0'] = 'Alle Templates'; // All Templates +$_MODULE['<{creativeelements}prestashop>template_library_01c91564910069ffcc8f67ecb2180d38'] = 'Neues Template'; // New Template +$_MODULE['<{creativeelements}prestashop>template_library_e838b63505c498050eccbcd6090a8262'] = 'Template bearbeiten'; // Edit Template +$_MODULE['<{creativeelements}prestashop>template_library_5a6eb418df400f68052e7725cdc1170a'] = 'Neues Template hinzufügen'; // Add New Template +$_MODULE['<{creativeelements}prestashop>template_library_de9ced9bf5e9829de4a93ad8c9d7a170'] = 'Neu Hinzufügen'; // Add New +$_MODULE['<{creativeelements}prestashop>template_library_278c491bdd8a53618c149c4ac790da34'] = 'Template'; // Template +$_MODULE['<{creativeelements}prestashop>_509820290d57f333403f490dde7316f4'] = 'Lokal'; // Local +$_MODULE['<{creativeelements}prestashop>_917d94376951e7a0fd3d30a655a12f2e'] = 'Template synchronisieren'; // Sync Library +$_MODULE['<{creativeelements}prestashop>_3da44b906269817f50ef58ea29f5f38d'] = 'Bist du sicher, dass du dieses Template löschen möchtest?'; // Are you sure you want to delete this template? +$_MODULE['<{creativeelements}prestashop>_12113ea41be8a8ac8ed3301094d4c007'] = 'Template löschen'; // Delete Template +$_MODULE['<{creativeelements}prestashop>_193cfc9be3b995831c6af2fea6650e60'] = 'Seite'; // Page +$_MODULE['<{creativeelements}prestashop>_64c2250bbf2bc80767d781cd19bb82af'] = 'Deine %s in der Bibliothek speichern'; // Save Your %s to Library +$_MODULE['<{creativeelements}prestashop>_db10a1ce6ae80065018ce639ce2b8989'] = 'Fehler beim Bearbeiten der Anfrage:'; // The following error(s) occurred while processing the request: +$_MODULE['<{creativeelements}prestashop>_a25c753ee3e4be15ec0daa5a40deb7b8'] = 'Ein Fehler ist aufgetreten'; // An error occurred +$_MODULE['<{creativeelements}prestashop>_b10355bde8ffa109adfb72095166e87d'] = 'Der Platz für deine Templates. Erstellen. Speichern. Wiederverwenden.'; // This is where your templates should be. Design it. Save it. Reuse it. +$_MODULE['<{creativeelements}prestashop>_9593b20ca67ef909af17be47183d93d2'] = 'Bisher keine Templates gespeichert?'; // Haven’t Saved Templates Yet? +$_MODULE['<{creativeelements}prestashop>_ad07bae09061eb7eadc703f182e8c889'] = 'Name des Templates eingeben'; // Enter Template Name +$_MODULE['<{creativeelements}prestashop>_d51fd6071c560eaade2f7f5b326bb472'] = 'Deine Designs werden zum Export und für die Wiederverwendung auf beliebigen Seiten oder Webseiten verfügbar sein.'; // Your designs will be available for export and reuse on any page or website +$_MODULE['<{creativeelements}prestashop>_0095a9fa74d1713e43e370a7d7846224'] = 'Export'; // Export +$_MODULE['<{creativeelements}prestashop>_3e30a35f9c0c80e76e91b32e7a59a41c'] = 'Bleib gespannt! Weitere Templates erscheinen bald.'; // Stay tuned! More awesome templates coming real soon. +$_MODULE['<{creativeelements}prestashop>_b8b8e9f67faf0bb214c1686c52166ec4'] = 'Zurück zur Bibliothek'; // Back to Library +$_MODULE['<{creativeelements}prestashop>_a458be0f08b7e4ff3c0f633c100176c0'] = 'Einfügen'; // Insert +$_MODULE['<{creativeelements}prestashop>_b9390195ecad3986568746a2a9b56354'] = 'Meine Templates'; // My Templates +$_MODULE['<{creativeelements}prestashop>_4d70254b3a8e2bc38b6147fa6ee813be'] = 'Bibliothek'; // Library +$_MODULE['<{creativeelements}prestashop>_d3d2e617335f08df83599665eef8a418'] = 'Schließen'; // Close +$_MODULE['<{creativeelements}prestashop>_31a9301fb39db9e093b3894b9eb582d1'] = 'Gespeicherte Templates'; // Saved Templates +$_MODULE['<{creativeelements}prestashop>_45f474dd60a551d4bb0d346df55d1cc4'] = 'Vorlagen Bibliothek'; // Template Library +$_MODULE['<{creativeelements}prestashop>_ec8c82009f9de01c14037e4b85106701'] = 'Wähle deine Struktur'; // Select your Structure +$_MODULE['<{creativeelements}prestashop>_e37f4fc0441c524ee5a89453f12178c8'] = 'Template hinzufügen'; // Add Template +$_MODULE['<{creativeelements}prestashop>_f5395c9793af8a11b406ca7c1ac70da9'] = 'Mehr erfahren'; // Learn More +$_MODULE['<{creativeelements}prestashop>_9de70901d3562acdbec7f907c2ca62e7'] = 'Animation bei Mausberührung'; // Hover Animation +$_MODULE['<{creativeelements}prestashop>_d0799ce2e6e121f7d748fe60ca5ee142'] = 'Objektanpassung'; // Object Fit +$_MODULE['<{creativeelements}prestashop>_dc448aa55848e923ec2cc916305b6d2b'] = 'Scrollen verhindern'; // Prevent Scroll +$_MODULE['<{creativeelements}prestashop>_e16b5b7f26f54214445cbe38d72c2828'] = 'Schnell'; // Fast +$_MODULE['<{creativeelements}prestashop>_efa5397985b8609a5dbeb430a4bcadd3'] = 'Langsam'; // Slow +$_MODULE['<{creativeelements}prestashop>_c78a3584ba81e0cd0ba8c29487e85d10'] = 'Standardschriftarten'; // Default Fonts +$_MODULE['<{creativeelements}prestashop>_b201b2e7e7a20df48b625f20c2f0933e'] = 'Farbpaletten'; // Color Palettes +$_MODULE['<{creativeelements}prestashop>_373492f01889c61ff7d8bb91cf43d1bd'] = 'Eingangsanimation'; // Entrance Animation +$_MODULE['<{creativeelements}prestashop>_f0153907b3a8a6ab6d24ebda1e079951'] = 'Du kannst es über die Moduleinstellungen wieder aktivieren.'; // You can enable it from the module settings page. +$_MODULE['<{creativeelements}prestashop>box_shadow_control_b56d315e49178ba86341ff3b4e337c6b'] = 'Innen'; // Inset +$_MODULE['<{creativeelements}prestashop>box_shadow_control_838389e9675a112e8187aa34a4f61709'] = 'Box-Schatten'; // Box Shadow +$_MODULE['<{creativeelements}prestashop>_06ce2a25e5d12c166a36f654dbea6012'] = 'Vertikal'; // Vertical +$_MODULE['<{creativeelements}prestashop>_c1b5fa03ecdb95d4a45dd1c40b02527f'] = 'Horizontal'; // Horizontal +$_MODULE['<{creativeelements}prestashop>_180bc3b1c5619aaef40e803f49921012'] = 'Ausbreitung'; // Spread +$_MODULE['<{creativeelements}prestashop>_8b52de510bc5497ac43abfe566be48ab'] = 'Unschärfe'; // Blur +$_MODULE['<{creativeelements}prestashop>_a3d68d897c2e60e93783fe59e4da7ebf'] = 'Kurzmitteilung'; // Aside +$_MODULE['<{creativeelements}prestashop>_5289f1a930358cba4623a7234db5c71e'] = 'Empfehlung'; // Testimonial +$_MODULE['<{creativeelements}prestashop>_30e624fbe7c9345f3cdb243bc2eeacfd'] = 'Offizielle Farbe'; // Official Color +$_MODULE['<{creativeelements}prestashop>_bef2481eda40bd121482f1814d72314f'] = 'Abgerundet'; // Rounded +$_MODULE['<{creativeelements}prestashop>_786c4bcb88b15bd37b70d4b9d62ba324'] = 'Soziale Netzwerk-Icons'; // Social Icons +$_MODULE['<{creativeelements}prestashop>_9769396cc39a68db5cb5ff02896596ea'] = 'Meine Fertigkeit'; // My Skill +$_MODULE['<{creativeelements}prestashop>_3f761a65a378ebfdfc28741392606662'] = 'Download Button'; // Download Button +$_MODULE['<{creativeelements}prestashop>_b682e97ce55b3fbc9cc299c667cea845'] = 'Hintergrund Überlagerung'; // Background Overlay +$_MODULE['<{creativeelements}prestashop>_f23578fcd2a868168854ab714e7de537'] = 'Erweitert'; // Extended +$_MODULE['<{creativeelements}prestashop>_812a48ba719daeda82e4da8e812d426c'] = 'Individuelle URL'; // Custom URL +$_MODULE['<{creativeelements}prestashop>_36bb6559696dc9124986ae120515984f'] = 'Einfügen'; // Paste +$_MODULE['<{creativeelements}prestashop>_a9ded1e5ce5d75814730bb4caaf49419'] = 'Hintergrund'; // Background +$_MODULE['<{creativeelements}prestashop>_ec114b1e189d6c3044e5706e93682fa8'] = 'Breiter'; // Wider +$_MODULE['<{creativeelements}prestashop>_0db377921f4ce762c62526131097968f'] = 'Generell'; // General +$_MODULE['<{creativeelements}prestashop>_737e6c4a46563dd9da1557b304178be1'] = 'Autorenzeile'; // Intro Byline +$_MODULE['<{creativeelements}prestashop>_627b24abf27e2d03d38537f84e81cb2e'] = 'Abstände'; // Spacing +$_MODULE['<{creativeelements}prestashop>_76fbf0ccd7fcd64879c2ff2119dc15a4'] = 'Außen'; // Outside +$_MODULE['<{creativeelements}prestashop>_9b6d3000134648fc9f1e71094ae0847d'] = 'Innen'; // Inside +$_MODULE['<{creativeelements}prestashop>_02674a4ef33e11c879283629996c8ff8'] = 'Richtung'; // Direction +$_MODULE['<{creativeelements}prestashop>_a301fb6c9931e5b86a9b36a31b9c9e6d'] = 'Zusätzliche Optionen'; // Additional Options +$_MODULE['<{creativeelements}prestashop>_6649c4b2e13734c911fbd45e025d9431'] = 'Pfeile und Punkte'; // Arrows and Dots +$_MODULE['<{creativeelements}prestashop>_b26ff651c2d7385db87fa44737402935'] = 'Rahmenbreite links'; // Left Border Width +$_MODULE['<{creativeelements}prestashop>_c7f201c52862951afad2ae9802595286'] = 'Animationsdauer'; // Animation Duration +$_MODULE['<{creativeelements}prestashop>_17b04c58b2a994e2a115530681ca25e3'] = 'Bild strecken'; // Image Stretch +$_MODULE['<{creativeelements}prestashop>_35773b27596fe91a749ddbf3e1257966'] = 'Bild Karussell'; // Image Carousel +$_MODULE['<{creativeelements}prestashop>_0dc52fcd265149dd09a6d1f5b0e5a3b5'] = 'Animationsgeschwindigkeit'; // Animation Speed +$_MODULE['<{creativeelements}prestashop>_7b49a3eb804d134cdce5579121787fc3'] = 'Du kannst das originale Bild in jede beliebige Größe zuschneiden. Du kannst auch eine feste Breite oder eine feste Höhe definieren, dadurch bleibt das Seitenverhältnis erhalten.'; // You can crop the original image size to any custom size. You can also set a single value for height or width in order to keep the original size ratio. +$_MODULE['<{creativeelements}prestashop>_f9641a2d9ee9b7d52b4c15b7745c5ad6'] = 'Du musst die ausgewählte Modulposition (Hook) im aktuellen Template einfügen, damit Creative Elements auf dieser Seite funktioniert.'; // You must insert the selected module position (hook) in the current template, in order for CreativeElements to work on this page. +$_MODULE['<{creativeelements}prestashop>_9e24be381f41ce80bb67674e03f7b83a'] = 'Entschuldigung, aber auf dieser Seite wurde kein Inhaltsbereich gefunden. '; // Sorry, the content area was not found in your page. +$_MODULE['<{creativeelements}prestashop>_8250b33e7828c54440743f11d36c2204'] = 'Farbe der Schaltflächen'; // Controls Color +$_MODULE['<{creativeelements}prestashop>_87cd4e8df281e8565913cb1dee924173'] = 'Intro-Portrait'; // Intro Portrait +$_MODULE['<{creativeelements}prestashop>_54f70e7001bba1a2f8b2c7394b7fbc65'] = 'Intro-Titel'; // Intro Title +$_MODULE['<{creativeelements}prestashop>_89d7b10cb4238977d2b523dfd9ea7745'] = 'Endlosschleife'; // Loop +$_MODULE['<{creativeelements}prestashop>_4182f4b55a58f5a6a3e3ee9fdb9b6b88'] = 'Video-Optionen'; // Video Options +$_MODULE['<{creativeelements}prestashop>_34e2d1989a1dbf75cd631596133ee5ee'] = 'Video'; // Video +$_MODULE['<{creativeelements}prestashop>_b9987a246a537f4fe86f1f2e3d10dbdb'] = 'Anzeige'; // Display +$_MODULE['<{creativeelements}prestashop>_1779d23035f16bb6f8a0f548f1eaa6b9'] = 'Medien einfügen'; // Insert Media +$_MODULE['<{creativeelements}prestashop>_849a0c92b921bb7fd3c9f4f6d197f89c'] = '%s Bilder ausgewählt'; // %s Images Selected +$_MODULE['<{creativeelements}prestashop>image_size_control_0e0613e1f93d33fba15773ba3ff6f56a'] = 'Bildgröße'; // Image Dimension +$_MODULE['<{creativeelements}prestashop>image_size_control_90589c47f06eb971d548591f23c285af'] = 'Individuell'; // Custom +$_MODULE['<{creativeelements}prestashop>border_control_eb656e41b6da91494775ecf47a51da91'] = 'Gestrichelt'; // Dashed +$_MODULE['<{creativeelements}prestashop>border_control_90c09393a4c0970bc9a6703ad527781c'] = 'Gepunktet'; // Dotted +$_MODULE['<{creativeelements}prestashop>border_control_d909d38d705ce75386dd86e611a82f5b'] = 'Doppelt'; // Double +$_MODULE['<{creativeelements}prestashop>border_control_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Durchgezogen'; // Solid +$_MODULE['<{creativeelements}prestashop>_04e0385c10aefee8e4681617d2f3ef40'] = 'Überblenden'; // Fade +$_MODULE['<{creativeelements}prestashop>_a62d22910732d5343689f5117999abfa'] = 'Effekt'; // Effect +$_MODULE['<{creativeelements}prestashop>image_size_control_bbd47109890259c0127154db1af26c75'] = 'Originalgröße'; // Full +$_MODULE['<{creativeelements}prestashop>_d3eea2f5aca8f6254f0938b5e8a33506'] = 'Vertikale Ausrichtung'; // Vertical Alignment +$_MODULE['<{creativeelements}prestashop>_431c060088b62effa79dd9c710d20b00'] = 'Endlosschleife'; // Infinite Loop +$_MODULE['<{creativeelements}prestashop>_4c72d232d1a1406e6c26251bbf6c3b25'] = 'Punkte'; // Dots +$_MODULE['<{creativeelements}prestashop>_8c38c6601843e340c9e290746e5f92cc'] = 'Struktur zurücksetzen'; // Reset Structure +$_MODULE['<{creativeelements}prestashop>image_size_control_7d25feb59b8a44341084a00840d860d1'] = 'Bildgröße'; // Image Size +$_MODULE['<{creativeelements}prestashop>typography_control_6adf97f83acf6453d4a6a4b1070f3754'] = 'Keine'; // None +$_MODULE['<{creativeelements}prestashop>_59a1c1ca0188302c39e06c1ceaf9b4d5'] = 'Titel HTML Tag'; // Title HTML Tag +$_MODULE['<{creativeelements}prestashop>_33f5f59c40d41e206fd9af76ba81f8a2'] = 'Klicke den Bearbeitungs-Button um diesen Text zu verändern. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'; // Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo. +$_MODULE['<{creativeelements}prestashop>_b4dbdac374f627ca60f562d1dd368e97'] = 'Dies ist die Überschrift'; // This is the heading +$_MODULE['<{creativeelements}prestashop>_ddedab99da4615aa6cb108466ba35bf1'] = 'Füge deine eigene Klasse OHNE den Punkt hinzu, z. B.: meine-klasse '; // Add your custom class WITHOUT the dot. e.g: my-class +$_MODULE['<{creativeelements}prestashop>_46c613087b2b4545ce4ef4ca82dc579c'] = 'Achtung: Die Anzeige-Einstellungen (Zeige/Verstecke für Handy, Tablet, Desktop) wirken sich nur aus, sobald du auf der Vorschau- oder Live-Seite bist, und nicht während du dich in Creative Elements im Bearbeitungs-Modus befindest.'; // Attention: The display settings (show/hide for mobile, tablet or desktop) will only take effect once you are on the preview or live page, and not while you're in editing mode in Elementor. +$_MODULE['<{creativeelements}prestashop>_5e8fe619138eb3ea59cbc11b4e977a3c'] = 'Liste der verwendeten Schriftarten, wenn die ausgewählte Schriftart nicht verfügbar ist.'; // The list of fonts used if the chosen font is not available. +$_MODULE['<{creativeelements}prestashop>_527173285a0e8a11e07da121e3dc9493'] = 'Generische Standardschriftarten'; // Default Generic Fonts +$_MODULE['<{creativeelements}prestashop>_a1a1577b9a9dddef5aa6644847575ef0'] = 'Youtube-Link oder Video-File (mp4 wird empfohlen).'; // YouTube link or video file (mp4 is recommended). +$_MODULE['<{creativeelements}prestashop>_aa56a2e65d8106aef3c61e4f6bf94fdb'] = 'Elemente'; // Elements +$_MODULE['<{creativeelements}prestashop>_7070a8e837fa8d255ec7aff468edb08d'] = 'Der am weitesten entwickelte Frontend Drag & Drop Page Builder. Erstelle hochwertige, pixelperfekte Websites in Rekordzeit. Mit jedem Theme, auf jeder Seite und mit jedem Design.'; // The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design. +$_MODULE['<{creativeelements}prestashop>_f4f70727dc34561dfde1a3c529b6205c'] = 'Einstellungen'; // Settings +$_MODULE['<{creativeelements}prestashop>typography_control_12a8e47062ed3272e04dc0b991e38466'] = 'Schräg gestellt'; // Oblique +$_MODULE['<{creativeelements}prestashop>typography_control_1d874710ccdcd46b95397049d2e7500c'] = 'Kursiv'; // Italic +$_MODULE['<{creativeelements}prestashop>typography_control_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normal'; // Normal +$_MODULE['<{creativeelements}prestashop>typography_control_97a62b5e6d3cae255036b6bc37b87b44'] = 'Großschreibung'; // Capitalize +$_MODULE['<{creativeelements}prestashop>typography_control_dc1ff975a46c75335d6d640abdc0c3a6'] = 'Kleinschreibung'; // Lowercase +$_MODULE['<{creativeelements}prestashop>typography_control_621e7b8ece62fecc55e883252ff2fbe7'] = 'Versalien'; // Uppercase +$_MODULE['<{creativeelements}prestashop>_512e805300422d5e8a86031b665ef28c'] = 'Start-Icon'; // Play Icon +$_MODULE['<{creativeelements}prestashop>_9bcffa546758e012c3379c285a9e95c4'] = 'Bild-Überlagerung'; // Image Overlay +$_MODULE['<{creativeelements}prestashop>_3248e7a58c1ea530e42933f72bb676e6'] = 'Player-Buttons'; // Player Controls +$_MODULE['<{creativeelements}prestashop>_ee17cbac55d446219173726589867db9'] = 'Vorgeschlagene Videos'; // Suggested Videos +$_MODULE['<{creativeelements}prestashop>_ac97682c8f12cd9e67d121e87da0338d'] = 'Seitenverhältnis'; // Aspect Ratio +$_MODULE['<{creativeelements}prestashop>_9690ccd809b1cbdb861d0bad3c0802c9'] = 'Inhalt umschalten'; // Toggle Content +$_MODULE['<{creativeelements}prestashop>_ccf67c36b837af38fd05d41dec1b47ec'] = 'Titel umschalten'; // Toggle Title +$_MODULE['<{creativeelements}prestashop>_a1be4433701f8936cdf49569eb44e3ab'] = 'Umschalter #2'; // Toggle #2 +$_MODULE['<{creativeelements}prestashop>_0eb925daf423fe1169c3f6720e3c74c0'] = 'Umschalter #1'; // Toggle #1 +$_MODULE['<{creativeelements}prestashop>_f2a9f78110ca6de657f70b3ee9cd5320'] = 'Elemente umschalten'; // Toggle Items +$_MODULE['<{creativeelements}prestashop>_a8875bbe4272c0bdd786cfaaedf77921'] = 'Umschalter'; // Toggle +$_MODULE['<{creativeelements}prestashop>_e0f1691bdb67d9859e5a6a8d7c26e6a1'] = 'Text-Editor'; // Text Editor +$_MODULE['<{creativeelements}prestashop>_5a9bf0bc2b910b5e03c3f85d363838e7'] = 'Tab-Inhalt'; // Tab Content +$_MODULE['<{creativeelements}prestashop>_3acb228e77768f2611ae59e04595a90d'] = 'Tab-Titel'; // Tab Title +$_MODULE['<{creativeelements}prestashop>_ef6bec3512b7dee69f91f853f5fe7292'] = 'Tab #2'; // Tab #2 +$_MODULE['<{creativeelements}prestashop>_d9acb2b50c1ced5fe56790e1518532b2'] = 'Tab #1'; // Tab #1 +$_MODULE['<{creativeelements}prestashop>_30eb111c6722ac96a4239a87dddfe5ae'] = 'Tab-Elemente'; // Tabs Items +$_MODULE['<{creativeelements}prestashop>_7015777bcc86cd0c5e4819310d62b040'] = 'Tabs'; // Tabs +$_MODULE['<{creativeelements}prestashop>_6533b60847609ca99607d99753b6ea9b'] = 'Pausieren bei Hover'; // Pause on Hover +$_MODULE['<{creativeelements}prestashop>_7396285ad8822a609e7d737cc82f6076'] = 'Abspielgeschwindigkeit'; // Autoplay Speed +$_MODULE['<{creativeelements}prestashop>_4e05974b02cc4aa95db4d85baef6b6b4'] = 'Pfeile'; // Arrows +$_MODULE['<{creativeelements}prestashop>_6160a53ece50ce6d4f5ef4452549835e'] = 'Slide'; // Slide +$_MODULE['<{creativeelements}prestashop>_3cc101db14264780bd1e84bc80d588f1'] = 'Titel-Stil'; // Title Style +$_MODULE['<{creativeelements}prestashop>_2bf376babbb3b4d6d1158aabc5b49109'] = 'Farbe des inneren Textes'; // Inner Text Color +$_MODULE['<{creativeelements}prestashop>_90d254b1e4a44ef82a0eff5ce2dd30bf'] = 'Webdesigner'; // Web Designer +$_MODULE['<{creativeelements}prestashop>_8eb7d29b13b3a8389bef4c465053f63f'] = 'z.B. Webdesigner'; // e.g. Web Designer +$_MODULE['<{creativeelements}prestashop>_2ffe8a03531a12477e27a146bc15a3ba'] = 'Innerer Text'; // Inner Text +$_MODULE['<{creativeelements}prestashop>_e7832ab13448cc6894f4262dc1e05d0d'] = 'Prozentsatz anzeigen'; // Display Percentage +$_MODULE['<{creativeelements}prestashop>_37be07209f53a5d636d5c904ca9ae64c'] = 'Prozent'; // Percentage +$_MODULE['<{creativeelements}prestashop>_8e4a53e769f15496d5c8f4fe9d0729df'] = 'Fortschrittsbalken'; // Progress Bar +$_MODULE['<{creativeelements}prestashop>_1fec9f77e87864f1bc863596105c295d'] = 'Beispielsweise: Über mich'; // For Example: About +$_MODULE['<{creativeelements}prestashop>_697b67a9f0a74057bdbb8743bbb3c46e'] = 'Die ID des Menü-Ankers.'; // The ID of Menu Anchor. +$_MODULE['<{creativeelements}prestashop>_704fe059b7613cbd3353262998cdf836'] = 'Diese ID ist die CSS-ID, die du ohne das "#" in deiner Seite verwenden musst.'; // This ID will be the CSS ID you will have to use in your own page, Without #. +$_MODULE['<{creativeelements}prestashop>_a34285645af2703a9501db6fc881e5df'] = 'Anker'; // Anchor +$_MODULE['<{creativeelements}prestashop>_7551d2d59d73e7d2650f7e2b9959efbf'] = 'Menü-Anker'; // Menu Anchor +$_MODULE['<{creativeelements}prestashop>_13c31590d98cc452fc3794eaf0811e4d'] = 'Bild-Position'; // Image Position +$_MODULE['<{creativeelements}prestashop>_ac2c0f8fbfcea1d561d0dbbfafc1747d'] = 'Bild-Abstand'; // Image Spacing +$_MODULE['<{creativeelements}prestashop>_7d25feb59b8a44341084a00840d860d1'] = 'Bildgröße'; // Image Size +$_MODULE['<{creativeelements}prestashop>_fb07b027d8d8c04f512f1a6a0f7bc365'] = 'Bilder-Box'; // Image Box +$_MODULE['<{creativeelements}prestashop>_37e929a6d14b3e6eeb834900e8216c6e'] = 'Icon bei Mauszeigerkontakt'; // Icon Hover +$_MODULE['<{creativeelements}prestashop>_757e8d7a69c388d1b39efa9bd3d54d4d'] = 'Rahmenbreite'; // Border Width +$_MODULE['<{creativeelements}prestashop>_8d2de5368588552fbae54044ac5c7b3d'] = 'Drehung'; // Rotate +$_MODULE['<{creativeelements}prestashop>_020a9f6a979825fc9349eccc66bef6db'] = 'Sekundäre Farbe'; // Secondary Color +$_MODULE['<{creativeelements}prestashop>_f951a1e1ff1ed0d24a2758b6441a3431'] = 'Primäre Farbe'; // Primary Color +$_MODULE['<{creativeelements}prestashop>_ceb46ca115d05c51aa5a16a8867c3304'] = 'Quadrat'; // Square +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Kreis'; // Circle +$_MODULE['<{creativeelements}prestashop>_880c1273b27d27cfc82004c3a4b205c9'] = 'Darstellung'; // Shape +$_MODULE['<{creativeelements}prestashop>_6b73ad372508225645eb96a2e505a602'] = 'Gerahmt'; // Framed +$_MODULE['<{creativeelements}prestashop>_29b733fdb4bddeda910b3b4a659c2fef'] = 'Gestapelt'; // Stacked +$_MODULE['<{creativeelements}prestashop>_0c03306ef001b4e3d7f76ee2faad389e'] = 'Text-Einrückung'; // Text Indent +$_MODULE['<{creativeelements}prestashop>_3f7b121ec5cc19cf6676a28656e0d5b8'] = 'Listenelement'; // List Item +$_MODULE['<{creativeelements}prestashop>_8d35756b5a8f878d9d20f3ba0851786d'] = 'Listenelement #3'; // List Item #3 +$_MODULE['<{creativeelements}prestashop>_043fd607b45939749a567bcb850978bc'] = 'Listenelement #2'; // List Item #2 +$_MODULE['<{creativeelements}prestashop>_88e38f5c21b56f5f87896476088a1783'] = 'Listenelement #1'; // List Item #1 +$_MODULE['<{creativeelements}prestashop>_591180770b39c5f069a1b2f9e643952c'] = 'Icon-Liste'; // Icon List +$_MODULE['<{creativeelements}prestashop>_0c02adc8335c386e48c48be7304d6f9e'] = 'https://dein-link.de'; // https://your-link.com +$_MODULE['<{creativeelements}prestashop>_917aedb05020a5ad03b91720c66d1900'] = 'Icon-Abstand'; // Icon Spacing +$_MODULE['<{creativeelements}prestashop>_3902b5474a18ab7e9f8ce952a8f8123f'] = 'Icon-Box'; // Icon Box +$_MODULE['<{creativeelements}prestashop>_e0ec89dede7dfb470b66327694fcd96c'] = 'HTML-Code'; // HTML Code +$_MODULE['<{creativeelements}prestashop>_4c4ad5fca2e7a3f74dbb1ced00381aa4'] = 'HTML'; // HTML +$_MODULE['<{creativeelements}prestashop>_022586563e1d7808a2dcc1adf7d31cdd'] = 'HTML-Tag'; // HTML Tag +$_MODULE['<{creativeelements}prestashop>_d8e4922dd15f21a02528d54926dcceac'] = 'Gib den gewünschten Titel ein'; // Enter your title +$_MODULE['<{creativeelements}prestashop>_0101316665d4f82adaa26d86fbbb2d6e'] = 'Überschrift'; // Heading +$_MODULE['<{creativeelements}prestashop>_ec6d39989d44bfedcd0ddaa3651fa194'] = 'Brandenburger Tor, Berlin, Deutschland'; // London Eye, London, United Kingdom +$_MODULE['<{creativeelements}prestashop>_46f3ea056caa3126b91f3f70beea068c'] = 'Karte'; // Map +$_MODULE['<{creativeelements}prestashop>_272ba7d164aa836995be6319a698be84'] = 'Bildunterschrift'; // Caption +$_MODULE['<{creativeelements}prestashop>_fff0d600f8a0b5e19e88bfb821dd1157'] = 'Bilder'; // Images +$_MODULE['<{creativeelements}prestashop>_64663f4646781c9c0110838b905daa23'] = 'Zufall'; // Random +$_MODULE['<{creativeelements}prestashop>_6e475c4e40cb8bdfd54c18345937bc9a'] = 'Medien-Datei'; // Media File +$_MODULE['<{creativeelements}prestashop>_6861444ec5168a915bf147d856ecb91b'] = 'Anhangs-Seite'; // Attachment Page +$_MODULE['<{creativeelements}prestashop>_d33c208fe1458eff399189b5b0515025'] = 'Bilder hinzufügen'; // Add Images +$_MODULE['<{creativeelements}prestashop>_9cc51a9ca0ed0404f8b9125ad563ade9'] = 'Bildergalerie'; // Image Gallery +$_MODULE['<{creativeelements}prestashop>_466b98ca0f38bd8bf2260246c91f6882'] = 'Lücke'; // Gap +$_MODULE['<{creativeelements}prestashop>_cb5feb1b7314637725a2e73bdc9f7295'] = 'Farbe'; // Color +$_MODULE['<{creativeelements}prestashop>_8c489d0946f66d17d73f26366a4bf620'] = 'Breite'; // Weight +$_MODULE['<{creativeelements}prestashop>_6ab9a295c00f945cf4881fd7667a0334'] = 'Abstand'; // Spacer +$_MODULE['<{creativeelements}prestashop>_2908050e771fb91a3afbb7809972e90c'] = 'Trenner'; // Divider +$_MODULE['<{creativeelements}prestashop>_b2ee912b91d69b435159c7c3f6df7f5f'] = 'Zahl'; // Number +$_MODULE['<{creativeelements}prestashop>_7776af0e9a7220bb12e18bbb20d49314'] = 'Wahnsinns-Zahl'; // Cool Number +$_MODULE['<{creativeelements}prestashop>_32ba78fe43257d3e7f88e3935a8ea0d4'] = 'Plus'; // Plus +$_MODULE['<{creativeelements}prestashop>_5b122ce454e4b9f39a663d8d8ed6e85c'] = 'Suffix der Nummer'; // Number Suffix +$_MODULE['<{creativeelements}prestashop>_83294d77029945fdb8dc4a5388829d27'] = 'Präfix der Nummer'; // Number Prefix +$_MODULE['<{creativeelements}prestashop>_0cb5ed4f4d6f3d8b739d1f10fec8d36d'] = 'Zielnummer'; // Ending Number +$_MODULE['<{creativeelements}prestashop>_ededf9a7b5f65a321a5f20ebf58e9517'] = 'Startnummer'; // Starting Number +$_MODULE['<{creativeelements}prestashop>_64d129224a5377b63e9727479ec987d9'] = 'Zähler'; // Counter +$_MODULE['<{creativeelements}prestashop>_05b1dc77590105a18fc4c02526fe0c7a'] = 'Automatisch abspielen'; // Autoplay +$_MODULE['<{creativeelements}prestashop>_059910d00f03f1aad921ecef33b1deb7'] = 'Scrollbare Slides'; // Slides to Scroll +$_MODULE['<{creativeelements}prestashop>_d7b5e50ef2050d92c3972793da595f49'] = 'Anzuzeigende Slides'; // Slides to Show +$_MODULE['<{creativeelements}prestashop>_10bf609ae34aa1c82f39f0e90cf6ffaf'] = 'Bild wählen'; // Choose Image +$_MODULE['<{creativeelements}prestashop>_be53a0541a6d36f6ecb879fa2c584b08'] = 'Bild'; // Image +$_MODULE['<{creativeelements}prestashop>_070554647306343cbea29ebfdd278ba8'] = 'Rahmen'; // Border +$_MODULE['<{creativeelements}prestashop>_7bfcadb5535fe8aad5032762b7bfe159'] = 'Nachher'; // After +$_MODULE['<{creativeelements}prestashop>_9060587edeb01a63e3d3edc959678d1e'] = 'Vorher'; // Before +$_MODULE['<{creativeelements}prestashop>_f26664db07487754bb4b21355caad9ca'] = 'Icon Ausrichtung'; // Icon Position +$_MODULE['<{creativeelements}prestashop>_817434295a673aed431435658b65d9a7'] = 'Icon'; // Icon +$_MODULE['<{creativeelements}prestashop>_6f6cb72d544962fa333e2e34ce64f719'] = 'Größe'; // Size +$_MODULE['<{creativeelements}prestashop>_058cc077563d4b47b43ae642a6478159'] = 'Ausgerichtet'; // Justified +$_MODULE['<{creativeelements}prestashop>_a63706eecfa33f67b315f978392ad7ae'] = 'Ausrichtung'; // Alignment +$_MODULE['<{creativeelements}prestashop>_e737584ec6ea30637b1e2b1dde624fbe'] = 'XXL'; // XXL +$_MODULE['<{creativeelements}prestashop>_a7a4ccc5e1a068d87f4965e014329201'] = 'XL'; // XL +$_MODULE['<{creativeelements}prestashop>_3a69b34ce86dacb205936a8094f6c743'] = 'Groß'; // Large +$_MODULE['<{creativeelements}prestashop>_87f8a6ab85c9ced3702b4ea641ad4bb5'] = 'Mittel'; // Medium +$_MODULE['<{creativeelements}prestashop>_2660064e68655415da2628c2ae2f7592'] = 'Klein'; // Small +$_MODULE['<{creativeelements}prestashop>_87b7760f14fbff78d8819291f36ab9a0'] = 'Button'; // Button +$_MODULE['<{creativeelements}prestashop>_7dce122004969d56ae2e0245cb754d35'] = 'Bearbeiten'; // Edit +$_MODULE['<{creativeelements}prestashop>_8c51f4baf5c75864896a9984fdd085ed'] = 'Auf Smartphones verbergen'; // Hide On Mobile +$_MODULE['<{creativeelements}prestashop>_4365dd761ee313b7154369721242ca54'] = 'Auf Tablets verbergen'; // Hide On Tablet +$_MODULE['<{creativeelements}prestashop>_c936f9927e7b00ada48d5b571b74ff7d'] = 'Auf Computern verbergen'; // Hide On Desktop +$_MODULE['<{creativeelements}prestashop>_b80517a37221cf35ccdfb5dfe99e57df'] = 'Eckenradius'; // Border Radius +$_MODULE['<{creativeelements}prestashop>_b5a7adde1af5c87d7fd797b6245c2a39'] = 'Beschreibung'; // Description +$_MODULE['<{creativeelements}prestashop>_b78a3223503896721cca1303f776159b'] = 'Titel'; // Title +$_MODULE['<{creativeelements}prestashop>_75e7422f2fe253fc69d3f6c148d197ee'] = 'Hintergrundfarbe'; // Background Color +$_MODULE['<{creativeelements}prestashop>_62a5e490880a92eef74f167d9dc6dca0'] = 'Verstecken'; // Hide +$_MODULE['<{creativeelements}prestashop>_498f79c4c5bbde77f1bceb6c86fd0f6d'] = 'Zeigen'; // Show +$_MODULE['<{creativeelements}prestashop>_5c6dc399ce706d7c8114864dfe2e85cd'] = 'Verwerfen Button'; // Dismiss Button +$_MODULE['<{creativeelements}prestashop>_53d7e9d912b9a2e0eb070e2f6ac8185b'] = 'Ich bin eine Beschreibung. Drücke den Bearbeiten-Button um den Text zu ändern.'; // I am a description. Click the edit button to change this text. +$_MODULE['<{creativeelements}prestashop>_70124948c153a25f90f234807d432051'] = 'Titel und Beschreibung'; // Title & Description +$_MODULE['<{creativeelements}prestashop>_990816b607ebf99b1415760965e4d564'] = 'Gefahr'; // Danger +$_MODULE['<{creativeelements}prestashop>_0eaadb4fcb48a0a0ed7bc9868be9fbaa'] = 'Warnung'; // Warning +$_MODULE['<{creativeelements}prestashop>_505a83f220c02df2f85c3810cd9ceb38'] = 'Erfolgsmeldung'; // Success +$_MODULE['<{creativeelements}prestashop>_4059b0251f66a18cb56f544728796875'] = 'Information'; // Info +$_MODULE['<{creativeelements}prestashop>_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Typ'; // Type +$_MODULE['<{creativeelements}prestashop>_b92071d61c88498171928745ca53078b'] = 'Warnung'; // Alert +$_MODULE['<{creativeelements}prestashop>_779a68e20d5ee1a07b0968deda651684'] = 'Aktive Farbe'; // Active Color +$_MODULE['<{creativeelements}prestashop>_475c80ecff56299d3527cf51af68e48c'] = 'Rahmenfarbe'; // Border Color +$_MODULE['<{creativeelements}prestashop>_4351cfebe4b61d8aa5efa1d020710005'] = 'Anzeige'; // View +$_MODULE['<{creativeelements}prestashop>_01fa2fa7f98169b137677336c3f670f0'] = 'Akkordeon Inhalt'; // Accordion Content +$_MODULE['<{creativeelements}prestashop>_708714aa8d5537518f5a8a8439012354'] = 'Akkordeon Titel'; // Accordion Title +$_MODULE['<{creativeelements}prestashop>_7ad033dd18a58e91f283103cdcd98d24'] = 'Akkordeon #2'; // Accordion #2 +$_MODULE['<{creativeelements}prestashop>_228e7e4cc19e59ae320bd052cd12aeb3'] = 'Akkordeon Nr. 1'; // Accordion #1 +$_MODULE['<{creativeelements}prestashop>_ff3defaa406e66b49d1fd11ecebe07aa'] = 'Akkordeon-Elemente'; // Accordion Items +$_MODULE['<{creativeelements}prestashop>_4d5aae0b218a0bb62ff4513b66fc34d0'] = 'Akkordeon'; // Accordion +$_MODULE['<{creativeelements}prestashop>_49ee3087348e8d44e1feda1917443987'] = 'Name'; // Name +$_MODULE['<{creativeelements}prestashop>_bafd7322c6e97d25b6299b5d6fe8920b'] = 'Nein'; // No +$_MODULE['<{creativeelements}prestashop>_93cba07454f06a4a960172bbd6e2a435'] = 'Ja'; // Yes +$_MODULE['<{creativeelements}prestashop>_52f4393e1b52ba63e27310ca92ba098c'] = 'Allgemeine Einstellungen'; // General Settings +$_MODULE['<{creativeelements}prestashop>_5096bb1a69971401c543c0fd182777e9'] = 'Hervorgehobener Text'; // Accent Text +$_MODULE['<{creativeelements}prestashop>_c1800412bc0184dd8339a641907b549f'] = 'Haupttext'; // Body Text +$_MODULE['<{creativeelements}prestashop>_c3cc351e0f5298324ba1af3535b17e97'] = 'Sekundäre Überschrift'; // Secondary Headline +$_MODULE['<{creativeelements}prestashop>_ecb45ba774122b23aa38ed2072872c19'] = 'Primäre Überschrift'; // Primary Headline +$_MODULE['<{creativeelements}prestashop>_c900e1bd8e22771d610bd2a5861b544f'] = 'Accent'; // Accent +$_MODULE['<{creativeelements}prestashop>_9dffbf69ffba8bc38bc4e01abf4b1675'] = 'Text'; // Text +$_MODULE['<{creativeelements}prestashop>_0c7d6cf19426e01dcfa32434828ed266'] = 'Secondary'; // Secondary +$_MODULE['<{creativeelements}prestashop>_074de7e7c226d5c60f8af14c20725352'] = 'Primary'; // Primary +$_MODULE['<{creativeelements}prestashop>_846495f9ceed11accf8879f555936a7d'] = 'Navigation'; // Navigation +$_MODULE['<{creativeelements}prestashop>_972e73b7a882d0802a4e3a16946a2f94'] = 'Grundlegend'; // Basic +$_MODULE['<{creativeelements}prestashop>_205a36f1b372fa213113504073738be0'] = 'Position des Inhalts'; // Content Position +$_MODULE['<{creativeelements}prestashop>_b1ca34f82e83c52b010f86955f264e05'] = 'Mitte'; // Middle +$_MODULE['<{creativeelements}prestashop>_fbb09a82eafab60150d0996e8fe46560'] = 'Dehnen'; // Stretch +$_MODULE['<{creativeelements}prestashop>_a36618027461bc0fd7bb6868929ffaec'] = 'Spaltenposition'; // Column Position +$_MODULE['<{creativeelements}prestashop>_4565b790baf0d98c20e624636451a43f'] = 'Mindesthöhe'; // Minimum Height +$_MODULE['<{creativeelements}prestashop>_c7a7e65064fdd9a2e9aa712fa88e9878'] = 'Min. Höhe'; // Min Height +$_MODULE['<{creativeelements}prestashop>_3232bb2700bece80661b7b9f834be06d'] = 'An Bildschirm anpassen'; // Fit To Screen +$_MODULE['<{creativeelements}prestashop>_eec6c4bdbd339edf8cbea68becb85244'] = 'Höhe'; // Height +$_MODULE['<{creativeelements}prestashop>_e7c770a61dbdf81ca922ae0260e327c1'] = 'Breit'; // Wide +$_MODULE['<{creativeelements}prestashop>_4a7ab319be06025840ef3389301424b9'] = 'Schmal'; // Narrow +$_MODULE['<{creativeelements}prestashop>_845366c74d6395b273fa175bc2e057c3'] = 'Keine Lücke'; // No Gap +$_MODULE['<{creativeelements}prestashop>_58b95bbe80c80c7dc3f16d8db0c506e8'] = 'Spaltenabstand'; // Columns Gap +$_MODULE['<{creativeelements}prestashop>_399df326b0ba3630641583807b229bfe'] = 'Inhaltsbreite'; // Content Width +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Volle Breite'; // Full Width +$_MODULE['<{creativeelements}prestashop>_6d1ca8184c6a1f11ecccfa17f8f9048a'] = 'Boxed'; // Boxed +$_MODULE['<{creativeelements}prestashop>_32954654ac8fe66a1d09be19001de2d4'] = 'Breite'; // Width +$_MODULE['<{creativeelements}prestashop>_ebd9bec4d70abc789d439c1f136b0538'] = 'Layout'; // Layout +$_MODULE['<{creativeelements}prestashop>_02fbde656ea799c09d5d647dc0f5960a'] = 'Neue Spalte erstellen '; // Add New Column +$_MODULE['<{creativeelements}prestashop>_4f5f086e367315e5f52722c8c8e9b3e3'] = 'Spaltenbreite'; // Column Width +$_MODULE['<{creativeelements}prestashop>_9a64f91eb059eb9a1ecf038d3467e09f'] = 'CSS-Klassen'; // CSS Classes +$_MODULE['<{creativeelements}prestashop>_a10443964156b9e87c95e74c8f9baf15'] = 'Padding'; // Padding +$_MODULE['<{creativeelements}prestashop>_98369609669478919c74c916440e9978'] = 'Margin'; // Margin +$_MODULE['<{creativeelements}prestashop>_4f1f6016fc9f3f2353c0cc7c67b292bd'] = 'Center'; // Center +$_MODULE['<{creativeelements}prestashop>_b14a348d14021b3f79da6be488d63253'] = 'Textausrichtung'; // Text Align +$_MODULE['<{creativeelements}prestashop>_8435207e2ede48cf57a3a26e10a9e7a3'] = 'Linkfarbe bei Hover'; // Link Hover Color +$_MODULE['<{creativeelements}prestashop>_59ece6dc07b89f5c61320dd130579a7f'] = 'Linkfarbe'; // Link Color +$_MODULE['<{creativeelements}prestashop>_0a06bdec3ccc4e4b6f6401881cf922f6'] = 'Überschriftfarbe'; // Heading Color +$_MODULE['<{creativeelements}prestashop>_8903861290617267b361478ab7f16f31'] = 'Textfarbe'; // Text Color +$_MODULE['<{creativeelements}prestashop>_603850e072131401265c4fc01027db93'] = 'Typografie'; // Typography +$_MODULE['<{creativeelements}prestashop>_93f07b720ebf7d1246512569761a5804'] = 'Gelöscht'; // Removed +$_MODULE['<{creativeelements}prestashop>_1976d7f704de389d9fe064e08ea35b2d'] = 'Spalte'; // Column +$_MODULE['<{creativeelements}prestashop>_d2c24d59e0baff4d0155fbdf62590867'] = 'Abschnitt'; // Section +$_MODULE['<{creativeelements}prestashop>_dc4c71563b9bc39a65be853457e6b7b6'] = 'Struktur'; // Structure +$_MODULE['<{creativeelements}prestashop>_b2b2df378a7c7ade199bbaf944cb3f35'] = 'Responsive'; // Responsive +$_MODULE['<{creativeelements}prestashop>_9b6545e4cea9b4ad4979d41bb9170e2b'] = 'Erweitert'; // Advanced +$_MODULE['<{creativeelements}prestashop>_ae284f900f9d6e21ba69144cfc91e41b'] = 'Stil'; // Style +$_MODULE['<{creativeelements}prestashop>_f15c1cae7882448b3fb0404682e17e61'] = 'Inhalt'; // Content +$_MODULE['<{creativeelements}prestashop>_168b82d33f8073018c50a4f658a02559'] = 'Spalten'; // Columns +$_MODULE['<{creativeelements}prestashop>_6ed482754b5780176fd1ba9dd789dea3'] = 'Über Creative Elements'; // About Creative Elements +$_MODULE['<{creativeelements}prestashop>_e0583393371074d791e836b0087dcbae'] = 'Revisions Historie'; // Revision History +$_MODULE['<{creativeelements}prestashop>_b5ccb7d52b4f221253779a94cd40e902'] = 'Bald'; // Soon +$_MODULE['<{creativeelements}prestashop>_5d50889672f6f860d14f502de3de1957'] = 'Farben'; // Colors +$_MODULE['<{creativeelements}prestashop>_d3b67861c9d313014761beb38d771889'] = 'Achtung: Alle nicht gespeicherten Änderungen gehen verloren.'; // Please note: All unsaved changes will be lost. +$_MODULE['<{creativeelements}prestashop>_248336101b461380a4b2391a7625493d'] = 'Gespeichert'; // Saved +$_MODULE['<{creativeelements}prestashop>_4f2f5e1d6e2a13469ad431474a68ab82'] = 'Zurück'; // Go Back +$_MODULE['<{creativeelements}prestashop>_2e83ec658a7776a62a320cdee2690826'] = 'Übernehmen'; // Take Over +$_MODULE['<{creativeelements}prestashop>_ea4788705e6873b424c65e91c2846b19'] = 'Abbruch'; // Cancel +$_MODULE['<{creativeelements}prestashop>_47748fe5d78900c50f5bfe078cd3d44d'] = '%s hat übernommen und bearbeitet gerade. Möchtest du die Bearbeitung dieser Seite übernehmen?'; // %s has taken over and is currently editing. Do you want to take over this page editing? +$_MODULE['<{creativeelements}prestashop>_a5dd7c693ee0caedf9aa691116106572'] = 'Bist du sicher, dass du dieses %s entfernen willst?'; // Are you sure you want to remove this %s? +$_MODULE['<{creativeelements}prestashop>_040814c79beb48a59a293776e292ccb9'] = 'Weitere Paletten'; // More Palettes +$_MODULE['<{creativeelements}prestashop>_5463fe6752b217567e3f1ab1921dd3cc'] = 'Farbpalette'; // Color Palette +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Anwenden'; // Apply +$_MODULE['<{creativeelements}prestashop>_d94b42030b9785fd754d5c1754961269'] = 'Verwerfen'; // Discard +$_MODULE['<{creativeelements}prestashop>_526d688f37a86d3c3f27d0c5016eb71d'] = 'Zurücksetzen'; // Reset +$_MODULE['<{creativeelements}prestashop>_31fde7b05ac8952dacf4af8a704074ec'] = 'Vorschau'; // Preview +$_MODULE['<{creativeelements}prestashop>_c9cc8cce247e49bae79f15173ce97354'] = 'Speichern'; // Save +$_MODULE['<{creativeelements}prestashop>_36384a9ea3ec791e6bd4ab6b36f2ff2a'] = 'Tablet'; // Tablet +$_MODULE['<{creativeelements}prestashop>_2310408a63388fe57e3a4177168a8798'] = 'Desktop'; // Desktop +$_MODULE['<{creativeelements}prestashop>_628cef8c7f89a898c3c70b431700841b'] = 'Responsive Modus'; // Responsive Mode +$_MODULE['<{creativeelements}prestashop>_e4b846392f10f46b032cf155c39a0eaf'] = 'Seite anzeigen'; // View Page +$_MODULE['<{creativeelements}prestashop>_dd1a7e71effdaeffedeebbd060621250'] = 'Widgetpanel'; // Widgets Panel +$_MODULE['<{creativeelements}prestashop>_b61541208db7fa7dba42c85224405911'] = 'Menü'; // Menu +$_MODULE['<{creativeelements}prestashop>_9804fe0d898c7de798c4e175f59f6672'] = 'Widget suchen... '; // Search Widget... +$_MODULE['<{creativeelements}prestashop>_1907bd03c6adcacb7ad68404b14ca18b'] = 'Neuen Abschnitt hinzufügen'; // Add New Section +$_MODULE['<{creativeelements}prestashop>_16bfbf9c462762cf1cba4134ec53c504'] = 'Wird geladen'; // Loading +$_MODULE['<{creativeelements}prestashop>_5230001af73bfa7b6518d06ce7328efa'] = 'Weitere Strukturen'; // More Structures +$_MODULE['<{creativeelements}prestashop>_138103c4e1d9c846d0afd000e5b928c8'] = 'Element hinzufügen'; // Add Item +$_MODULE['<{creativeelements}prestashop>_f2a6c498fb90ee345d997f888fce3b18'] = 'Löschen'; // Delete +$_MODULE['<{creativeelements}prestashop>_fe146ea3246d82386939d718b5869c88'] = 'Icon auswählen'; // Select Icon +$_MODULE['<{creativeelements}prestashop>_90589c47f06eb971d548591f23c285af'] = 'Custom'; // Custom +$_MODULE['<{creativeelements}prestashop>typography_control_81cb1a74d81616f475b029b26a548cc9'] = 'Zeichenabstand (Laufweite)'; // Letter Spacing +$_MODULE['<{creativeelements}prestashop>typography_control_2ea0cce3b1e76eb9a13c814937e7d295'] = 'Zeilenhöhe'; // Line-Height +$_MODULE['<{creativeelements}prestashop>_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normal'; // Normal +$_MODULE['<{creativeelements}prestashop>typography_control_ae284f900f9d6e21ba69144cfc91e41b'] = 'Stil'; // Style +$_MODULE['<{creativeelements}prestashop>typography_control_2ff4148554480a37f85efd299df04850'] = 'Umwandlung'; // Transform +$_MODULE['<{creativeelements}prestashop>typography_control_8c489d0946f66d17d73f26366a4bf620'] = 'Schriftschnitt'; // Weight +$_MODULE['<{creativeelements}prestashop>typography_control_cefc4f7cbc8c34762e0f76703e7e174e'] = 'Schriftfamilie'; // Family +$_MODULE['<{creativeelements}prestashop>typography_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Größe'; // Size +$_MODULE['<{creativeelements}prestashop>border_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Farbe'; // Color +$_MODULE['<{creativeelements}prestashop>border_control_32954654ac8fe66a1d09be19001de2d4'] = 'Breite'; // Width +$_MODULE['<{creativeelements}prestashop>_eb656e41b6da91494775ecf47a51da91'] = 'Gestrichelt'; // Dashed +$_MODULE['<{creativeelements}prestashop>_90c09393a4c0970bc9a6703ad527781c'] = 'Gepunktet'; // Dotted +$_MODULE['<{creativeelements}prestashop>_d909d38d705ce75386dd86e611a82f5b'] = 'Doppelt'; // Double +$_MODULE['<{creativeelements}prestashop>_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Durchgezogen'; // Solid +$_MODULE['<{creativeelements}prestashop>_6adf97f83acf6453d4a6a4b1070f3754'] = 'Keine'; // None +$_MODULE['<{creativeelements}prestashop>border_control_f142def200da13d2a17cd85d74258d54'] = 'Rahmen'; // Border Type +$_MODULE['<{creativeelements}prestashop>background_control_16619cb16904fc183583f843307c4645'] = 'Hintergrund Fallback'; // Background Fallback +$_MODULE['<{creativeelements}prestashop>background_control_69620f6919f430e72c0f67207535605b'] = 'Video Link'; // Video Link +$_MODULE['<{creativeelements}prestashop>background_control_db3e3f51c9107e26c9bccf9a188ce2ed'] = 'Füllen'; // Fill +$_MODULE['<{creativeelements}prestashop>background_control_c795dfff10a7c952f4c5438951e9ece9'] = 'Cover'; // Cover +$_MODULE['<{creativeelements}prestashop>background_control_0e75eff17752bae4ab31af7ad9b45484'] = 'Eingepasst'; // Contain +$_MODULE['<{creativeelements}prestashop>background_control_06b9281e396db002010bde1de57262eb'] = 'Auto'; // Auto +$_MODULE['<{creativeelements}prestashop>background_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Größe'; // Size +$_MODULE['<{creativeelements}prestashop>background_control_cfb23be94c536c4a0bc7e9a1e9b902fb'] = 'Repeat-y'; // Repeat-y +$_MODULE['<{creativeelements}prestashop>background_control_f57da73b22e4c4b324499f5a19c8b782'] = 'Repeat-x'; // Repeat-x +$_MODULE['<{creativeelements}prestashop>background_control_08b9e4f31c7aa3c1cfc97736ed8e6f81'] = 'No-repeat'; // No-repeat +$_MODULE['<{creativeelements}prestashop>background_control_7020426cfb0a204051be4b3053d2acc8'] = 'Repeat'; // Repeat +$_MODULE['<{creativeelements}prestashop>background_control_4457d440870ad6d42bab9082d9bf9b61'] = 'Fixed'; // Fixed +$_MODULE['<{creativeelements}prestashop>background_control_105078d294d30c978ca2badf7f376934'] = 'Scroll'; // Scroll +$_MODULE['<{creativeelements}prestashop>background_control_e9cb217697088a98b1937d111d936281'] = 'Anhang'; // Attachment +$_MODULE['<{creativeelements}prestashop>background_control_4d297f5df921dca388a17e3336cad50f'] = 'Unten Rechts'; // Bottom Right +$_MODULE['<{creativeelements}prestashop>background_control_a088c172f6a893ef408116488ef672cd'] = 'Unten Mitte'; // Bottom Center +$_MODULE['<{creativeelements}prestashop>background_control_7eb5542553fa5e5db4656e1c16f1316d'] = 'Unten Links'; // Bottom Left +$_MODULE['<{creativeelements}prestashop>background_control_d7afdc5ae6dccbb16e24d9cac4067b41'] = 'Mitte Rechts'; // Center Right +$_MODULE['<{creativeelements}prestashop>background_control_cac17249ab9a6f510f995b5005dc94a2'] = 'Mitte Mitte'; // Center Center +$_MODULE['<{creativeelements}prestashop>background_control_617e1d17c0297a4b2c409f397618737e'] = 'Mitte Links'; // Center Left +$_MODULE['<{creativeelements}prestashop>background_control_5f9f678446e1abe7e062b056e755e059'] = 'Oben Rechts'; // Top Right +$_MODULE['<{creativeelements}prestashop>background_control_a20c9be95933e1fcf306b4b62d3792ea'] = 'Oben Mitte'; // Top Center +$_MODULE['<{creativeelements}prestashop>background_control_ac71274aea488e58bea2a8c716fc578f'] = 'Oben Links'; // Top Left +$_MODULE['<{creativeelements}prestashop>background_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Position'; // Position +$_MODULE['<{creativeelements}prestashop>background_control_abd809c9e3c1c08e97740f86b8ceabfb'] = 'Hintergrundbild'; // Background Image +$_MODULE['<{creativeelements}prestashop>background_control_be53a0541a6d36f6ecb879fa2c584b08'] = 'Bild'; // Image +$_MODULE['<{creativeelements}prestashop>background_control_75e7422f2fe253fc69d3f6c148d197ee'] = 'Hintergrundfarbe'; // Background Color +$_MODULE['<{creativeelements}prestashop>background_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Farbe'; // Color +$_MODULE['<{creativeelements}prestashop>background_control_8278a49e7da177e78b606cd1fae2f08f'] = 'Hintergrundtyp'; // Background Type +$_MODULE['<{creativeelements}prestashop>background_control_32954654ac8fe66a1d09be19001de2d4'] = 'Breite'; // Width +$_MODULE['<{creativeelements}prestashop>background_control_06504aee6c05f084754e10986c07d51e'] = 'Hintergrundvideo'; // Background Video +$_MODULE['<{creativeelements}prestashop>background_control_d35b51b639528d580362ca7042de6a0e'] = 'Klassisch'; // Classic +$_MODULE['<{creativeelements}prestashop>_a45da96d0bf6575970f2d27af22be28a'] = 'System'; // System +$_MODULE['<{creativeelements}prestashop>_97e7c9a7d06eac006a28bf05467fcc8b'] = 'Link'; // Link +$_MODULE['<{creativeelements}prestashop>_945d5e233cf7d6240f6b783b36a374ff'] = 'Links'; // Left +$_MODULE['<{creativeelements}prestashop>_2ad9d63b69c4a10a5cc9cad923133bc4'] = 'Unten'; // Bottom +$_MODULE['<{creativeelements}prestashop>_92b09c7c48c520c3c55e497875da437c'] = 'Rechts'; // Right +$_MODULE['<{creativeelements}prestashop>_a4ffdcf0dc1f31b9acaf295d75b51d00'] = 'Oben'; // Top +$_MODULE['<{creativeelements}prestashop>_7a1920d61156abc05a60135aefe8bc67'] = 'Vorgabe'; // Default +$_MODULE['<{creativeelements}prestashop>backoffice_header_36f76decda17622c3cca1592a5a5bbb5'] = 'Mit Creative Elements bearbeiten'; // Edit with Creative Elements +$_MODULE['<{creativeelements}prestashop>backoffice_header_fbf27983c033a1a3a9567cb19b10df48'] = 'Zurück zum PrestaShop Editor'; // Back to PrestaShop Editor +$_MODULE['<{creativeelements}prestashop>creativeelements_1352b53a1f0602c4682ed452b411bac1'] = 'Bitte speichern Sie das Formular, bevor Sie es mit Creative Elements bearbeiten.'; // Please save the form before editing with Creative Elements +$_MODULE['<{creativeelements}prestashop>creativeelements_58e1cede60a89e8489918834221dfe2e'] = 'Der Shop befindet sich im Wartungsmodus. Bitte geben Sie Ihre IP-Adresse in die Whitelist ein.'; // The shop is in maintenance mode, please whitelist your IP +$_MODULE['<{creativeelements}prestashop>creativeelements_5972f8e1a9936ed85e8ad83b600bcc35'] = 'Sie können keine Elemente bearbeiten, die nicht angezeigt werden, da eine Überschreibungsdatei fehlt. Bitte kontaktieren Sie uns unter https://addons.prestashop.com'; // You can not edit items which are not displayed, because an override file is missing. Please contact us on https://addons.prestashop.com +$_MODULE['<{creativeelements}prestashop>_9988f25f46a8a5fbf780ea53f748841e'] = 'Undefinierte Position!'; // Undefined Position! +$_MODULE['<{creativeelements}prestashop>_ad8e46819e3ac7ff26d3db6a887164e6'] = 'Platz Inhalt überall'; // Place Content Anywhere +$_MODULE['<{creativeelements}prestashop>_f7f19392da30e81c3abf433ce7b8ca38'] = 'Erstellt am'; // Created on +$_MODULE['<{creativeelements}prestashop>_155d14c40d6267b444be21ad136c5f60'] = 'Geändert am'; // Modified on +$_MODULE['<{creativeelements}prestashop>_49ed4f70af1d8e7ba23a097c3daa9b6b'] = 'Vorlagenliste'; // Templates List +$_MODULE['<{creativeelements}prestashop>_5a6eb418df400f68052e7725cdc1170a'] = 'Neues Template hinzufügen'; // Add New Template +$_MODULE['<{creativeelements}prestashop>_e838b63505c498050eccbcd6090a8262'] = 'Template bearbeiten'; // Edit Template +$_MODULE['<{creativeelements}prestashop>_a14e0a7ee36fa87535472a963ba30bea'] = 'Vorlagendatei'; // Template file +$_MODULE['<{creativeelements}prestashop>_bf50d5e661106d0abe925af3c2e6f7e7'] = 'Kopfzeile'; // Header +$_MODULE['<{creativeelements}prestashop>_ded40f2a77c30efc6062db0cbd857746'] = 'Fusszeile'; // Footer +$_MODULE['<{creativeelements}prestashop>_cfe6e34a4c7f24aad32aa4299562f5b1'] = 'Startseite'; // Home Page +$_MODULE['<{creativeelements}prestashop>_b60d1950a4271a0e4dd4f647d479dfa4'] = 'Kontaktseite'; // Contact Page +$_MODULE['<{creativeelements}prestashop>_6a015ba06ba180aa8a893610dbf1061a'] = '404 Seite'; // 404 Page +$_MODULE['<{creativeelements}prestashop>_235e8d1a54ecddcf1d3ff533331ed416'] = 'Produktseite'; // Product Page +$_MODULE['<{creativeelements}prestashop>_70f23ff594252e51839210b6cc9641fc'] = 'Vorschau'; // Quick View +$_MODULE['<{creativeelements}prestashop>_15cff73eea419d7365dc3b88e95e7367'] = 'Produkt Miniatur'; // Product Miniature +$_MODULE['<{creativeelements}prestashop>_7bf70debc40b3303954a6c18ae1aea62'] = 'Miniatur'; // Miniature +$_MODULE['<{creativeelements}prestashop>_88331ec25a3ecf67656071351edacce5'] = 'Vorschau Einstellungen'; // Preview Settings +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Übernehmen & Vorschau'; // Apply & Preview +$_MODULE['<{creativeelements}prestashop>_20928185e5bc74a3b872efdb77a2d806'] = 'An Inhalt anpassen'; // Fit To Content +$_MODULE['<{creativeelements}prestashop>_6b551379c3c0b59326abdaf3b4395bd3'] = 'Überlagerung'; // Overlay +$_MODULE['<{creativeelements}prestashop>_31e0a3a16f717e60e27cb65195dcb128'] = 'Schließen Button'; // Close Button +$_MODULE['<{creativeelements}prestashop>_e873d89b2c012e5f3d22f8540180bd0e'] = 'Themen Einstellungen'; // Theme Settings +$_MODULE['<{creativeelements}prestashop>_c14300d0aebc9cf1a8da9f6bd83e700c'] = 'Liste der Schriftarten'; // Fonts List +$_MODULE['<{creativeelements}prestashop>_630bd947659ab07c114e5ccef701a7af'] = 'Neue Schriftart hinzufügen'; // Add New Font +$_MODULE['<{creativeelements}prestashop>_486841ebd4c0bc17e6fc279da5268645'] = 'Schriftart bearbeiten'; // Edit Font +$_MODULE['<{creativeelements}prestashop>_8ab72d49e1108ccb328f74491ea49c03'] = 'Schriftartenname'; // Font Name +$_MODULE['<{creativeelements}prestashop>_729d37b0c80d21143c60b3a877b88f43'] = 'Schriftfamilie eingeben'; // Enter Font Family +$_MODULE['<{creativeelements}prestashop>_e52ada68529abb857b61e9f2cf3ea369'] = 'Schriftdateien'; // Font Files +$_MODULE['<{creativeelements}prestashop>_2eb11617fc1cce6c73173d413f9c271c'] = 'Schriftart Variante hinzufügen'; // Add Font Variation +$_MODULE['<{creativeelements}prestashop>_729a51874fe901b092899e9e8b31c97a'] = 'Bist du sicher?'; // Are you sure? +$_MODULE['<{creativeelements}prestashop>_0d9c8dfe174c5be68d35a4055031de0d'] = '%s Datei'; // %s File +$_MODULE['<{creativeelements}prestashop>_d68a6107129a6d62c76f49d59ffe9800'] = 'Das Web Open Schriftart Format, Verwendet von modernen Browsern'; // The Web Open Font Format, Used by Modern Browsers +$_MODULE['<{creativeelements}prestashop>_73e633e5de0477512fcb1b06f8a6ab89'] = 'Das Web Open Schriftart Format 2, Verwendet von Super moderne Browsers'; // The Web Open Font Format 2, Used by Super Modern Browsers +$_MODULE['<{creativeelements}prestashop>_fc4106231d0296304e3cafd5d7296d12'] = 'TrueType-Schriftarten, zur besseren Unterstützung von Safari, Android, iOS'; // TrueType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_d6abbfda58c20a18061c96fda4408779'] = 'OpenType-Schriftarten, zur besseren Unterstützung von Safari, Android, iOS'; // OpenType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_794df3791a8c800841516007427a2aa3'] = 'Licence'; // License +$_MODULE['<{creativeelements}prestashop>_c5985660600c4825c7a02653cdd26fe1'] = 'Lizenz aktivieren'; // Activate License +$_MODULE['<{creativeelements}prestashop>_684b15c2f38b9147cc86e0af9d62ed53'] = 'Bitte aktivieren Sie Ihre Lizenz, um uneingeschränkten Zugriff auf die Vorlagenbibliothek zu erhalten.'; // Please activate your license to get unlimited access to the template library. +$_MODULE['<{creativeelements}prestashop>_4a4fdd49ee2bc115b68859296441fe43'] = 'Lizenzstatus:'; // License Status: +$_MODULE['<{creativeelements}prestashop>_924272e395a0e2d3acf641224d5c67d8'] = 'Ihre Website ist aktiviert. Möchten Sie diese Website mit einer anderen Lizenz aktivieren?'; // Your website is activated. Want to activate this website by a different license? +$_MODULE['<{creativeelements}prestashop>_63cfad19115e3d7777f7767827160582'] = 'CSS erneuern'; // Regenerate CSS +$_MODULE['<{creativeelements}prestashop>_be99e107a4ef9dfbfa2f80d5d1ea1ab7'] = 'In Creative Elements eingestellte Styles werden in CSS-Dateien gespeichert. Diese Dateien entsprechend den aktuellsten Einstellungen wiederherstellen.'; // Styles set in Creative Elements are saved in CSS files. Recreate those files, according to the most recent settings. +$_MODULE['<{creativeelements}prestashop>_2846a86c26360bf5060ad147ae5e5757'] = 'URL ersetzen'; // Replace URL +$_MODULE['<{creativeelements}prestashop>_727ce4730bb0818c4b26f8fffc8f68d9'] = 'Websiteadresse (URL) aktualisieren'; // Update Site Address (URL) +$_MODULE['<{creativeelements}prestashop>_15fa88522f8cb6d0c1fc3a9ac8010731'] = 'It is strongly recommended that you backup your database before using Replace URL.'; // It is strongly recommended that you backup your database before using Replace URL. +$_MODULE['<{creativeelements}prestashop>_fea9d3952e7afb5f07cee1d876907752'] = 'Inserisci il vecchio e il nuovo URL della tua installazione di PrestaShop, per aggiornare tutti i dati di Creative Elements (importate per i trasferimenti di dominio o per spostarlo su ’HTTPS’).'; // Enter your old and new URLs for your PrestaShop installation, to update all Creative Elements data (Relevant for domain transfers or move to 'HTTPS'). +$_MODULE['<{creativeelements}prestashop>_e60cf455794a35c95ea8d1fef0472731'] = 'Bearbeitungssymbol im Frontend anzeigen'; // Show Edit Icon on Frontend +$_MODULE['<{creativeelements}prestashop>_604354d5a72ee39a59fea613aef87e41'] = 'Zeigt ein Bearbeitungssymbol im Frontend an, während der Mitarbeiter eine aktive Sitzung hat. Durch Klicken auf dieses Symbol wird der Live-Editor geöffnet.'; // Displays an edit icon on frontend while employee has active session. By clicking on this icon the live editor will open. +$_MODULE['<{creativeelements}prestashop>_f02c1c38095f6c8954522d0ce7a22695'] = 'Revisionen begrenzen'; // Limit Revisions +$_MODULE['<{creativeelements}prestashop>_f1a68d0a9ec7321ff122615cda20e15c'] = 'Legt die maximale Anzahl von Revisionen pro Inhalt.'; // Sets the maximum number of revisions per content. +$_MODULE['<{creativeelements}prestashop>_ee75e395394c62827452484b6762a3c3'] = 'Deactivieren Revisions Historie'; // Disable Revision History +$_MODULE['<{creativeelements}prestashop>_4606c5e64748843a35978c392679fded'] = 'Standardfarben deaktivieren'; // Disable Default Colors +$_MODULE['<{creativeelements}prestashop>_d43bf721ede9d072d2301ca64c8625d8'] = 'Wenn du die Farben lieber von Ihrem Thema erben möchten, kanst du diese Funktion deaktivieren.'; // If you prefer to inherit the colors from your theme, you can disable this feature. +$_MODULE['<{creativeelements}prestashop>_e04e5c4768c5991e460a58f2cabdc6d3'] = 'Standardschriftarten deaktivieren'; // Disable Default Fonts +$_MODULE['<{creativeelements}prestashop>_c9915f4e48ec2247d30af2034ec81f24'] = 'Wenn du die Schriftarten lieber von Ihrem Thema erben möchten, kanst du diese Funktion hier deaktivieren.'; // If you prefer to inherit the fonts from your theme, you can disable this feature here. +$_MODULE['<{creativeelements}prestashop>_aace7931afa15411153641f4fb5dd0fa'] = 'Stileinstellungen'; // Style Settings +$_MODULE['<{creativeelements}prestashop>_c6083c97affb33b00b4236fc08125b4e'] = 'Du kannst den Titel unter Dokumenteinstellungen ausblenden. Das funktioniert bei allen Themes, die den „%s“-Selektor verwenden. Sollte dein Theme einen anderen Selektor verwenden, kannst du ihn hier eintragen.'; // You can hide the title at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_8a756d3484d64b800c304144d79ff78e'] = 'Content Wrapper Selektor'; // Content Wrapper Selector +$_MODULE['<{creativeelements}prestashop>_4550c700c57cabfc47b677f26d598c14'] = 'Du kannst in den Dokumenteinstellungen Rand, Füllung und maximale Breite aus dem Inhalts-Wrapper entfernen. Das funktioniert bei allen Themes, die den „%s“-Selektor verwenden. Sollte dein Theme einen anderen Selektor verwenden, kannst du ihn hier eintragen.'; // You can clear margin, padding, max-width from content wrapper at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_4038e06d3f1c2ed9a8b8ba1418842203'] = 'Tablet-Breakpoint'; // Tablet Breakpoint +$_MODULE['<{creativeelements}prestashop>_df1a7f57a6d0fa52039a36b1ee55851c'] = 'Legt den Breakpoint zwischen Desktop-Geräten und Tablets fest. Unterhalb dieses Breakpointes wird das Tablet-Layout erscheinen (Standard: %dpx).'; // Sets the breakpoint between desktop and tablet devices. Below this breakpoint tablet layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_5b23136cd3711bdae57560b72e66e923'] = 'Mobile-Breakpoint'; // Mobile Breakpoint +$_MODULE['<{creativeelements}prestashop>_4f663f113b83a55f1218b5403739d9e0'] = 'Legt den Breakpoint zwischen Tablets und Smartphones fest. Unterhalb dieses Breakpointes wird das mobile Layout (Smartphone) erscheinen (Standard: %dpx).'; // Sets the breakpoint between tablet and mobile devices. Below this breakpoint mobile layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_9ffc3ccc968a96d902af963c6d7b4e97'] = 'Erweiterte Einstellungen'; // Advanced Settings +$_MODULE['<{creativeelements}prestashop>_d626d902c43ae80039304aaabb577ebe'] = 'Ändern Sie diese Optionen nicht ohne Erfahrung. Falsche Einstellungen können Ihre Website beschädigen.'; // Do not change these options without experience, incorrect settings might break your site. +$_MODULE['<{creativeelements}prestashop>_8b682d779569cdb4f8eac8f8113882b6'] = 'CSS-Ausgabemethode'; // CSS Print Method +$_MODULE['<{creativeelements}prestashop>_86921a38b6b13f5bac7815b64261bfc3'] = 'Verwendet externe CSS-Dateien für alle erzeugten Stylesheets. Einstellung für bessere Performance (empfohlen).'; // Use external CSS files for all generated stylesheets. Choose this setting for better performance (recommended). +$_MODULE['<{creativeelements}prestashop>_df46e4e4a37b992335889fe0bcc9fbc2'] = 'Externe Dateien'; // External File +$_MODULE['<{creativeelements}prestashop>_8654f2b13455edc295f7ce17c14c9887'] = 'Inline platziert'; // Internal Embedding +$_MODULE['<{creativeelements}prestashop>_b49eb11b7c3a0762a6df47f7424c4d99'] = 'Bearbeitungs-Icons'; // Editing Handles +$_MODULE['<{creativeelements}prestashop>_8fabaa06bc2da9ec5a25a0b9ee554e99'] = 'Bearbeitungs-Icons bei Mauszeigerkontakt der Bearbeiten-Buttons eines Elements anzeigen'; // Show editing handles when hovering over the element edit button +$_MODULE['<{creativeelements}prestashop>_7e6a43ce8ac6c832c95ecedb00a6064e'] = 'Kategorien vom Modul Widget ausschließen'; // Exclude Categories from Module widget +$_MODULE['<{creativeelements}prestashop>_723d690837af8a91be989751fadab183'] = 'Laden FontAwesome Bibliothek'; // Load FontAwesome Library +$_MODULE['<{creativeelements}prestashop>_c1a1c7d11028c7a1436198ca59331944'] = 'Mit FontAwesome erhalten Sie skalierbare Vektorsymbole, die sofort angepasst werden können - Größe, Farbe, Schlagschatten und alles, was mit CSS möglich ist.'; // FontAwesome gives you scalable vector icons that can instantly be customized - size, color, drop shadow, and anything that can be done with the power of CSS. +$_MODULE['<{creativeelements}prestashop>_0016eea9e78adc9ba06072ac9b6a1b75'] = 'Laden Waypoints Bibliothek'; // Load Waypoints Library +$_MODULE['<{creativeelements}prestashop>_498b278c8d4479bdedb1bb77be02b4f2'] = 'Waypoints Bibliothek ist der einfachste Weg, eine Funktion auszulösen, wenn Sie zu einem Element scrollen.'; // Waypoints library is the easiest way to trigger a function when you scroll to an element. +$_MODULE['<{creativeelements}prestashop>_03ee559731e9434a9740773f516a38df'] = 'Laden Slick Bibliothek'; // Load Slick Library +$_MODULE['<{creativeelements}prestashop>_050ddbb779fbf2dc5b64861639b5eb41'] = 'Slick ist ein jQuery-Plugin zum Erstellen vollständig anpassbarer, reaktionsschneller und mobiler Karussells / Schieberegler, die mit allen HTML-Elementen funktionieren.'; // Slick is a jQuery plugin for creating fully customizable, responsive and mobile friendly carousels/sliders that work with any HTML elements. +$_MODULE['<{creativeelements}prestashop>_4829262cecb9828817b33e0f9c907f91'] = 'Experimente'; // Experiments +$_MODULE['<{creativeelements}prestashop>_84f8df76775e37ae5a4a2b857220f90b'] = 'Greifen Sie auf neue und experimentelle Funktionen von Creative Elements zu, bevor sie offiziell veröffentlicht werden. Da sich diese Funktionen noch in der Entwicklung befinden, werden sie sich wahrscheinlich ändern, weiterentwickeln oder sogar ganz entfernt werden.'; // Access new and experimental features from Creative Elements before they're officially released. As these features are still in development, they are likely to change, evolve or even be removed altogether. +$_MODULE['<{creativeelements}prestashop>_f1dbba0d570fb6cc1b5dcf7c2f7cb374'] = 'Versteckte Elemente entfernen'; // Remove Hidden Elements +$_MODULE['<{creativeelements}prestashop>_cafe73a877fb194de8fe2fb509502f61'] = 'Wenn Sie Elemente auf der "Erweitert-Tab" / "Responsive-Abschnitt" ausblenden, wird ihr Markup aus dem DOM entfernt.'; // When you hide elements on "Advanced tab / Responsive section" their markup will be removed from DOM. +$_MODULE['<{creativeelements}prestashop>_0000495ba408d49c02c05686a067646c'] = 'Abschnitt Sichtbarkeit'; // Visibility Section +$_MODULE['<{creativeelements}prestashop>_d2d862f4b4341afe63f8164ca80f0373'] = 'Wenn Sie Elemente planen oder nach ausgewählten Kundengruppen filtern möchten, ist diese Funktion praktisch. Es wird auf der Registerkarte Erweitert angezeigt.'; // If you would like to schedule elements or filter them by selected customer groups, then this feature will be handy. It will appear under Advanced tab. +$_MODULE['<{creativeelements}prestashop>_1729a56cfc89021478498fe0c89a843a'] = 'Sichtbarkeit'; // Visibility +$_MODULE['<{creativeelements}prestashop>_25f7347236b51a5eae4ba01a7862cb55'] = 'Zeitplan'; // Schedule +$_MODULE['<{creativeelements}prestashop>_08b02383dce834815c99539f02f0fd89'] = 'Kundengruppe'; // Customer Group +$_MODULE['<{creativeelements}prestashop>_1c0d77992f834a9640d9e094e7a73fb9'] = 'Anzeigen für'; // Show for +$_MODULE['<{creativeelements}prestashop>_449ca279e02730b90da2695e4261c154'] = 'Ausblenden für'; // Hide for +$_MODULE['<{creativeelements}prestashop>_777475dcd2749b94375fe07762d9d76f'] = 'Wähle...'; // Select... +$_MODULE['<{creativeelements}prestashop>_e18056ef5b17ae8dda5f90f67c9e8533'] = '%s Jahr'; // %s year +$_MODULE['<{creativeelements}prestashop>_2fa7fca44cb89fd199a257dc02b3b1e5'] = '%s Jahre'; // %s years +$_MODULE['<{creativeelements}prestashop>_f44e927446959585ff1c59871ec2d5a3'] = '%s Monat'; // %s month +$_MODULE['<{creativeelements}prestashop>_7a9362f7b668d13007042dfeb04377f0'] = '%s Monate'; // %s months +$_MODULE['<{creativeelements}prestashop>_059fb9aa56ea0f60a309243c0f1b7584'] = '%s Woche'; // %s week +$_MODULE['<{creativeelements}prestashop>_a6a22726bcd37b84a44dcb29adcd9028'] = '%s Wochen'; // %s weeks +$_MODULE['<{creativeelements}prestashop>_cc0c6aa19f38a763c6138695ea957edc'] = '%s Tag'; // %s day +$_MODULE['<{creativeelements}prestashop>_b95227314c538383cf221dae2172b047'] = '%s Tagen'; // %s days +$_MODULE['<{creativeelements}prestashop>_0aaff30699e63ba9bf8133d98b1d6832'] = '%s Stunde'; // %s hour +$_MODULE['<{creativeelements}prestashop>_99e8d9aecac65d9833e10a2d3bbee4f7'] = '%s Stunden'; // %s hours +$_MODULE['<{creativeelements}prestashop>_b3f066d7b12126d9a43fc20a691994bb'] = '%s Minute'; // %s min +$_MODULE['<{creativeelements}prestashop>_9bd57b1597a0cd2a2d7e9a10ea01b41d'] = '%s Minuten'; // %s mins +$_MODULE['<{creativeelements}prestashop>_6c5505b168fe8a3f3acc9ab255fc8f29'] = '%s Sekunde'; // %s sec +$_MODULE['<{creativeelements}prestashop>_0174b36c22db64939888c723079becd9'] = '%s Sekunden'; // %s secs +$_MODULE['<{creativeelements}prestashop>_88183b946cc5f0e8c96b2e66e1c74a7e'] = 'Unbekannt'; // Unknown +$_MODULE['<{creativeelements}prestashop>_89ee97029bec768357951c7583ff541e'] = 'Es funktioniert nicht? Du kannst unter Website-Einstellungen einen anderen Selektor für den Inhalt Wrapper festlegen.'; // Not working? You can set a different selector for the content wrapper in the Settings page. +$_MODULE['<{creativeelements}prestashop>_00d23a76e43b46dae9ec7aa9dcbebb32'] = 'Aktiviert'; // Enabled +$_MODULE['<{creativeelements}prestashop>_b9f5c797ebbf55adccdd8539a65a0241'] = 'Deaktiviert'; // Disabled +$_MODULE['<{creativeelements}prestashop>_303efff2ee73c68202a22c21e900df83'] = 'http://docs.webshopworks.com/creative-elements?gt=de'; +$_MODULE['<{creativeelements}prestashop>_4994a8ffeba4ac3140beb89e8d41f174'] = 'Sprache'; // Language +$_MODULE['<{creativeelements}prestashop>_c10ffb2e13c40ebe8294e296b7d499b2'] = 'Scrolling-Effekte'; // Scrolling Effects +$_MODULE['<{creativeelements}prestashop>_1e7581a778b92c0a0090b551a1a8d068'] = 'Vertikales Scrollen'; // Vertical Scroll +$_MODULE['<{creativeelements}prestashop>_4467c46a4d7150d5fb2079bd0fde510c'] = 'Horizontales Scrollen'; // Horizontal Scroll +$_MODULE['<{creativeelements}prestashop>_6f7956741d5d673ff0c8eacc8d8c961c'] = 'Transparenz'; // Transparency +$_MODULE['<{creativeelements}prestashop>_85a7cd587d6142dbfc1a4de05af7b75d'] = 'Skala'; // Scale +$_MODULE['<{creativeelements}prestashop>_a0db49ba470c1c9ae2128c3470339153'] = 'Level'; // Level +$_MODULE['<{creativeelements}prestashop>_f3b666f2a16c1deb05bd6aa7eacfeb92'] = 'X Ankerpunkt'; // X Anchor Point +$_MODULE['<{creativeelements}prestashop>_b41864fcc199583ca5c19b10e0afc25a'] = 'Y Ankerpunkt'; // Y Anchor Point +$_MODULE['<{creativeelements}prestashop>_85cfe2037fb50aaf0632e12e655ce3db'] = 'Effekte anwenden auf'; // Apply Effects On +$_MODULE['<{creativeelements}prestashop>_31978abc991a7e1367f73b112e817c7d'] = 'Effekte relativ zu'; // Effects Relative To +$_MODULE['<{creativeelements}prestashop>_8d6f3510a5cca2c1281c9c6afe7e0da2'] = 'Vista'; // Viewport +$_MODULE['<{creativeelements}prestashop>_b670b69ddb8e225df6bb7ad005d3c33e'] = 'Gesamte Seite'; // Entire Page +$_MODULE['<{creativeelements}prestashop>_c26f05fe62ad1f8fc2a83eddd105285b'] = 'Maus-Effekte'; // Mouse Effects +$_MODULE['<{creativeelements}prestashop>_96c30ab1599bf72dca1549df71fe32af'] = 'Maus Spur'; // Mouse Track +$_MODULE['<{creativeelements}prestashop>_8ac8e312b9397d6c7a2c5b1b63967803'] = '3D Neigung'; // 3D Tilt +$_MODULE['<{creativeelements}prestashop>_fd1dd0c603be8170f9eae0be9f2f6afb'] = 'Direkt'; // Direct +$_MODULE['<{creativeelements}prestashop>_d8d76e03141ed1cf0d5704df71efbfef'] = 'Gegenüber'; // Opposite +$_MODULE['<{creativeelements}prestashop>_d8f6d391ba573fe747a3360afb99904d'] = 'Sticky'; // Sticky +$_MODULE['<{creativeelements}prestashop>_79441290f51f6ddfd0bd605d31b5d913'] = 'Sticky Ein'; // Sticky On +$_MODULE['<{creativeelements}prestashop>_6db6ce4ce0746f333c58972e1e3682bf'] = 'Offset Effekte'; // Effects Offset +$_MODULE['<{creativeelements}prestashop>_9218088d5225c7174f7299cb339ebce9'] = 'In der Spalte bleiben'; // Stay In Column +$_MODULE['<{creativeelements}prestashop>_f2f52cbf3a183f750f261f615e25d622'] = 'Ausblenden beim Blättern'; // Hide on Scroll +$_MODULE['<{creativeelements}prestashop>_c1171931c7b83ccac8c962e368963010'] = 'Sticked'; // Sticked +$_MODULE['<{creativeelements}prestashop>_2ff4148554480a37f85efd299df04850'] = 'Transformieren'; // Transform +$_MODULE['<{creativeelements}prestashop>_33a9fad969f69834a37b94c729d98b2a'] = '3D Drehung'; // 3D Rotate +$_MODULE['<{creativeelements}prestashop>_b78a58fa389c15e3e9676406754bb1df'] = 'Drehung X'; // Rotate X +$_MODULE['<{creativeelements}prestashop>_0d10ed97cb17c5220132a845f6a78d0a'] = 'Drehung Y'; // Rotate Y +$_MODULE['<{creativeelements}prestashop>_a80420eef88d11f77532f1b9cb467fa3'] = 'Perspektive'; // Perspective +$_MODULE['<{creativeelements}prestashop>_85702e5968e1616bd5c577cf306b9806'] = 'Versatz X'; // Offset X +$_MODULE['<{creativeelements}prestashop>_73411f5996beaef37222d8cac0b89b71'] = 'Versatz Y'; // Offset Y +$_MODULE['<{creativeelements}prestashop>_2d69a9a5782855ac84602cc45863f342'] = 'Proportionen halten'; // Keep Proportions +$_MODULE['<{creativeelements}prestashop>_df1195616b85f74c8828e20c5781cdd7'] = 'Skala X'; // Scale X +$_MODULE['<{creativeelements}prestashop>_979de706f6ea1f9eb5fba71c83a56c99'] = 'Skala Y'; // Scale Y +$_MODULE['<{creativeelements}prestashop>_2f2227d480b0c69364d7fddfecb82bd0'] = 'Skew'; // Skew +$_MODULE['<{creativeelements}prestashop>_8bf35b556bf5a142730e8a8ed3d8137a'] = 'Skew X'; // Skew X +$_MODULE['<{creativeelements}prestashop>_15c7890285219037e6f29c0814063128'] = 'Skew Y'; // Skew Y +$_MODULE['<{creativeelements}prestashop>_fb7d5e3a3f491ac9d3b6711daa32cd00'] = 'Horizontal spiegeln'; // Flip Horizontal +$_MODULE['<{creativeelements}prestashop>_5b83f92ddc4d4ff9e3a211c23268665d'] = 'Vertikal spiegeln'; // Flip Vertical +$_MODULE['<{creativeelements}prestashop>_29d94dad2c561873cffebf8d5ee4ba0c'] = 'Auslösen durch'; // Trigger By +$_MODULE['<{creativeelements}prestashop>_690c6e22d9a3b56d19e83710af87da0a'] = 'Fügen Sie Ihre eigene CSS hier'; // Add your own custom CSS here +$_MODULE['<{creativeelements}prestashop>_c5c6bcf867da29493e4bb1bd4b6b0a78'] = 'Verwenden Sie "selector", um das Wrapper-Element anzuvisieren. Beispiele:'; // Use "selector" to target wrapper element. Examples: +$_MODULE['<{creativeelements}prestashop>_756bcf5c0d47a6c968964d25f0eeaf57'] = "/* Für Hauptelement */\nselector { color: red; }\n/* Für Kind-Element */\nselector .child-element { margin: 10px; }\n/* Für benutzerdefinierte Selektor */\n.my-class { text-align: center; }"; +$_MODULE['<{creativeelements}prestashop>_80460385b65514494dcbb9fe041905d1'] = 'Klicke den Bearbeitungs-Button um diesen Text zu verändern. Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; +$_MODULE['<{creativeelements}prestashop>_756b97abbc9f4c13c541b1adf847eaf0'] = 'Facebook-Seite'; // Facebook Page +$_MODULE['<{creativeelements}prestashop>_d8a2783eec9416dc80f620f6dfba578c'] = 'Facebook Schaltfläche'; // Facebook Button +$_MODULE['<{creativeelements}prestashop>_c859113fb39b64631ca542ac10b0a7d5'] = 'Flip Box'; // Flip Box +$_MODULE['<{creativeelements}prestashop>_a601e28fb6c693bef281e5e63179674d'] = 'Call to Action'; // Call to Action +$_MODULE['<{creativeelements}prestashop>_e64465da4a42d65847b321045b155602'] = 'Countdown'; // Countdown +$_MODULE['<{creativeelements}prestashop>_c4d22d7c40de128eb983fcf5f2ae2674'] = 'Empfehlungs-Karussell'; // Testimonial Carousel +$_MODULE['<{creativeelements}prestashop>_dbade2f6a2f7257aa7377edb1c2f1c4a'] = 'Bild-Hotspot'; // Image Hotspot +$_MODULE['<{creativeelements}prestashop>_0016012d63bde0bbb9a8c4e7e5ba113f'] = 'Ajax-Suche'; // AJAX Search +$_MODULE['<{creativeelements}prestashop>_b0c309bbd6756d4e0d4dbb491dee248a'] = 'TrustedShops Bewertungen'; // TrustedShops Reviews +$_MODULE['<{creativeelements}prestashop>_5d2d75cb0a2913351601b255eaa17bb6'] = 'Produktgitter'; // Product Grid +$_MODULE['<{creativeelements}prestashop>_aeb0c8a362126a14711eb2441769f851'] = 'Produktkarussell'; // Product Carousel +$_MODULE['<{creativeelements}prestashop>_2e9436e79e59f39483f89ddeb4c9fac6'] = 'Produktbox'; // Product Box +$_MODULE['<{creativeelements}prestashop>_396cfc95445a375fa678d71c6657fd21'] = 'Bild-Slider'; // Image Slider +$_MODULE['<{creativeelements}prestashop>_1e56256dd5d600c0f0bf54ca1259139d'] = 'Newsletter-Anmeldung'; // Email Subscription +$_MODULE['<{creativeelements}prestashop>_2750dfebe7e01be17a0aaadf6b5effcc'] = 'Kategoriebaum'; // Category Tree +$_MODULE['<{creativeelements}prestashop>_e55f75a29310d7b60f7ac1d390c8ae42'] = 'Module'; // Module +$_MODULE['<{creativeelements}prestashop>_a7c83a652241f74e9e8c13d4a8e77327'] = 'Shop-Logo'; // Shop Logo +$_MODULE['<{creativeelements}prestashop>_c62ada394e70783b9d5c00bc249af5a6'] = 'Shop-Titel'; // Shop Title +$_MODULE['<{creativeelements}prestashop>_b75443a19207ed3a3552edda86536857'] = 'Warenkorb'; // Shopping Cart +$_MODULE['<{creativeelements}prestashop>_ca9085e1c300127e6d45bb7cc9a00a1c'] = 'Navigationsmenü'; // Nav Menu +$_MODULE['<{creativeelements}prestashop>_6e9accb242f0c478ccd34428e96c782b'] = 'Sprachauswahl'; // Language Selector +$_MODULE['<{creativeelements}prestashop>_162a8c580f44c2fe1357f6aab84ef88a'] = 'Währungsauswahl'; // Currency Selector +$_MODULE['<{creativeelements}prestashop>_b9aefa40a54680bb258f9f9569290fae'] = 'Produktname'; // Product Name +$_MODULE['<{creativeelements}prestashop>_646911b123e94f0fb11d711926dd2c4b'] = 'Produktabzeichen'; // Product Badges +$_MODULE['<{creativeelements}prestashop>_76dd13f20840d624f3da3784f9d72c92'] = 'Produktbilder'; // Product Images +$_MODULE['<{creativeelements}prestashop>_3c38027cd61ce6345509574bc269f54c'] = 'Produktbild'; // Product Image +$_MODULE['<{creativeelements}prestashop>_e4cc585947db6303293acd6e50e23abd'] = 'Produktpreis'; // Product Price +$_MODULE['<{creativeelements}prestashop>_a3598f51ebb4d31d7e7811fc0fbd358f'] = 'Produktbewertung'; // Product Rating +$_MODULE['<{creativeelements}prestashop>_4cc55681d14e73c3febdf5dd0566315c'] = 'Rabatt-Countdown'; // Sale Countdown +$_MODULE['<{creativeelements}prestashop>_2eb2d7fb081e1ae3127a46c53f10119e'] = 'Markenzeichen'; // Brand Image +$_MODULE['<{creativeelements}prestashop>_d20724dd5e4e41245018a3626478e81e'] = 'Produkt Metadaten'; // Product Meta +$_MODULE['<{creativeelements}prestashop>_36e3402e4ddef43e92b99aef016c057e'] = 'Kurze Beschreibung'; // Short Description +$_MODULE['<{creativeelements}prestashop>_c12b4ee170ad3dbeda03b91102c76da2'] = 'Produktvariationen'; // Product Variations +$_MODULE['<{creativeelements}prestashop>_d0629ccdf9ac5d63566c3f46f375b4a8'] = 'Produktbestand'; // Product Stock +$_MODULE['<{creativeelements}prestashop>_608315af4932b03356df72ac18092446'] = 'Produktmenge'; // Product Quantity +$_MODULE['<{creativeelements}prestashop>_638f592f71fc3fac3351534e69f9d29f'] = 'In den Warenkorb'; // Add to Cart +$_MODULE['<{creativeelements}prestashop>_87f3cd376f8aa27326148860be759c19'] = 'Produktmerkmale'; // Product Features +$_MODULE['<{creativeelements}prestashop>_6a5373df703ab2827a4ba7facdfcf779'] = 'Zur Wunschliste hinzufügen'; // Add to Wishlist +$_MODULE['<{creativeelements}prestashop>_854ee576475a63775d79cbfd6e4b13b6'] = 'Produktbeschreibung'; // Product Description +$_MODULE['<{creativeelements}prestashop>_a1e3a46a20f81b1e21b30156a2370812'] = 'Produktanhänge'; // Product Attachments +$_MODULE['<{creativeelements}prestashop>_167881850315c4df68e31d56fd9dd5d9'] = 'Produkt teilen'; // Product Share +$_MODULE['<{creativeelements}prestashop>_1d845dde77864747f09c10275b281f1a'] = 'Produktblock'; // Product Block +$_MODULE['<{creativeelements}prestashop>_01f00f96696da28ccd6583f819385e71'] = 'Textpfad'; // Text Path +$_MODULE['<{creativeelements}prestashop>_03ac26b00f3492797a3c8d54f0337c9b'] = 'Füge hier deinen kurvenreichen Text hinzu'; // Add Your Curvy Text Here +$_MODULE['<{creativeelements}prestashop>_233017ea023bfe5ee5cebc8a7970f06c'] = 'Pfad-Typ'; // Path Type +$_MODULE['<{creativeelements}prestashop>_d911b34823c7674c292556dc56148c27'] = 'Welle'; // Wave +$_MODULE['<{creativeelements}prestashop>_2b73f91683611c489560a1d163e37902'] = 'Kreisbogen'; // Arc +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Kreis'; // Circle +$_MODULE['<{creativeelements}prestashop>_4803e6b9e63dabf04de980788d6a13c4'] = 'Linie'; // Line +$_MODULE['<{creativeelements}prestashop>_01733ae48f19ae284165e55dd2934b61'] = 'Oval'; // Oval +$_MODULE['<{creativeelements}prestashop>_c978545ade9f5ce21bfa0353c04feda9'] = 'Spirale'; // Spiral +$_MODULE['<{creativeelements}prestashop>_22c6682f4ddd4efe02aafd67ba1896e6'] = 'Möchtest du eigene Textpfade erstellen?'; // Want to create custom text paths? +$_MODULE['<{creativeelements}prestashop>_e96dee4d699a25d7033bbd706a416ee9'] = 'Textausrichtung'; // Text Direction +$_MODULE['<{creativeelements}prestashop>_ae2023195822977b20f4557cb2c231e5'] = 'Pfad anzeigen'; // Show Path +$_MODULE['<{creativeelements}prestashop>_a11b6ae4ff43bc27097fa1899010cd4a'] = 'Wortabstand'; // Word Spacing +$_MODULE['<{creativeelements}prestashop>_c9fc5918d5031ae2a84dc85c1392d236'] = 'Startpunkt'; // Starting Point +$_MODULE['<{creativeelements}prestashop>_ac70412e939d72a9234cdebb1af5867b'] = 'Pfad'; // Path +$_MODULE['<{creativeelements}prestashop>_8e763d9065582268c9ffa345a3f81f5f'] = 'Strichstärke'; // Stroke +$_MODULE['<{creativeelements}prestashop>_e72cd05de3b0f5e87e01f1043d250226'] = 'Text-Strich'; // Text Stroke +$_MODULE['<{creativeelements}prestashop>_fb4e932947262c76d46e7671a667eb03'] = 'Strichfarbe'; // Stroke Color +$_MODULE['<{creativeelements}prestashop>_1ec22a9ec8fc7840e53abdf9f2761db4'] = 'Trage die URL der Facebook-Seite ein.'; // Paste the URL of the Facebook page. +$_MODULE['<{creativeelements}prestashop>_3d1f92a565d3b1a61880236e33c49bf3'] = 'Zeitleiste'; // Timeline +$_MODULE['<{creativeelements}prestashop>_87f9f735a1d36793ceaecd4e47124b63'] = 'Events'; // Events +$_MODULE['<{creativeelements}prestashop>_41de6d6cfb8953c021bbe4ba0701c8a1'] = 'Nachrichten'; // Messages +$_MODULE['<{creativeelements}prestashop>_f4629a6a3f69f39737e590fe9072a20f'] = 'Kleiner Kopfbereich'; // Small Header +$_MODULE['<{creativeelements}prestashop>_7e109af3848e4849f6230a1a04d45859'] = 'Profilbilder'; // Profile Photos +$_MODULE['<{creativeelements}prestashop>_cd7c1196d2d970d5cfb3f84af649a5ee'] = 'Eigene CTA Schaltfläche'; // Custom CTA Button +$_MODULE['<{creativeelements}prestashop>_cab1fe09bb50a19ae3975657afeec8f4'] = 'Empfehlen'; // Recommend +$_MODULE['<{creativeelements}prestashop>_3903aab323863bd2e9b68218a7a65ebd'] = 'Folgen'; // Follow +$_MODULE['<{creativeelements}prestashop>_eb6d8ae6f20283755b339c0dc273988b'] = 'Standard'; // Standard +$_MODULE['<{creativeelements}prestashop>_85967e33b3ebf9c859f2b50ef9bf151d'] = 'Schaltfläche Anzahl'; // Button Count +$_MODULE['<{creativeelements}prestashop>_f2f81540eb0898cdbbbbeae97e17c3e0'] = 'Box Anzahl'; // Box Count +$_MODULE['<{creativeelements}prestashop>_f4a216cd03ef98f742fa9dffedc6f1f9'] = 'Teilen-Button'; // Share Button +$_MODULE['<{creativeelements}prestashop>_e64df1d7c22b9638f084ce8a4aff3ff3'] = 'Ziel URL'; // Target URL +$_MODULE['<{creativeelements}prestashop>_f88589c3e803217e3f6fe9d8e740e6e8'] = 'Derzeitige Seite'; // Current Page +$_MODULE['<{creativeelements}prestashop>_5835bab1ade0060909e31a06af2e2cde'] = 'Vorderseite'; // Front +$_MODULE['<{creativeelements}prestashop>_0557fa923dcee4d0f86b1409f5c2167f'] = 'Rückseite'; // Back +$_MODULE['<{creativeelements}prestashop>_2a458f5ab135bec8376047e4fd5bec7b'] = 'Grafisches Element'; // Graphic Element +$_MODULE['<{creativeelements}prestashop>_714341d9339756588d1dc724991c2b9a'] = 'Hier klicken'; // Click Here +$_MODULE['<{creativeelements}prestashop>_63295c99f929bee9eed51f39328abd5e'] = 'Link anwenden auf'; // Apply Link on +$_MODULE['<{creativeelements}prestashop>_eceba382c8d2965c9969f3c50e38fd1d'] = 'Nur Button'; // Button Only +$_MODULE['<{creativeelements}prestashop>_3974ce153db569952e044cdfdfbc83cd'] = 'Ganze Box'; // Whole Box +$_MODULE['<{creativeelements}prestashop>_0f714135a0bce5c010291b55524b0f2e'] = 'Flip-Effekt'; // Flip Effect +$_MODULE['<{creativeelements}prestashop>_67727c06d3264f409d0e11009b322911'] = 'Effekt-Richtung'; // Flip Direction +$_MODULE['<{creativeelements}prestashop>_258f49887ef8d14ac268c92b02503aaa'] = 'Oben'; // Up +$_MODULE['<{creativeelements}prestashop>_08a38277b0309070706f6652eeae9a53'] = 'Unten'; // Down +$_MODULE['<{creativeelements}prestashop>_a0157ad2638ad23725b7ab940ea92500'] = '3D Tiefe'; // 3D Depth +$_MODULE['<{creativeelements}prestashop>_3cfce651e667ab85486dd42a8185f98a'] = 'Box'; // Box +$_MODULE['<{creativeelements}prestashop>_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normal'; // Normal +$_MODULE['<{creativeelements}prestashop>_eee0168be69b854c20621fc6f01cc3fc'] = 'Hover'; // Hover +$_MODULE['<{creativeelements}prestashop>_e24ee2487879116dcab772c0ac4fe341'] = 'Fokus'; // Focus +$_MODULE['<{creativeelements}prestashop>_f309bf4bccf801eb2fe4541107671578'] = 'Banderole'; // Ribbon +$_MODULE['<{creativeelements}prestashop>_5b469fd01889ec12f1e84c6e66829fc1'] = 'Über'; // Above +$_MODULE['<{creativeelements}prestashop>_45b5de8fb2930cf2cc1dc2c6d20bd72a'] = 'Button-Text'; // Button Text +$_MODULE['<{creativeelements}prestashop>_de6e9435dd82a9bf0416380e2b093166'] = 'Button-Ikone'; // Button Icon +$_MODULE['<{creativeelements}prestashop>_d6fec62129acbb27535963e1bab40acc'] = 'Mindestbreite'; // Min. Width +$_MODULE['<{creativeelements}prestashop>_a282e4564a52e78b82e904ffb22ec983'] = 'Mindesthöhe'; // Min. Height +$_MODULE['<{creativeelements}prestashop>_d35b51b639528d580362ca7042de6a0e'] = 'Klassisch'; // Classic +$_MODULE['<{creativeelements}prestashop>_c795dfff10a7c952f4c5438951e9ece9'] = 'Ausfüllen'; // Cover +$_MODULE['<{creativeelements}prestashop>_021cee4b91f9ef9dccdbc396c88fbc96'] = 'Vertikale Position'; // Vertical Position +$_MODULE['<{creativeelements}prestashop>_3338cc479e22ce066463f8a571039a1b'] = 'Hover Effekte'; // Hover Effects +$_MODULE['<{creativeelements}prestashop>_d7f3c1bb6150f237c08a4ab1e69c5ba9'] = 'Sequenzielle Animation'; // Sequenced Animation +$_MODULE['<{creativeelements}prestashop>_3711e805016ec3364cac6040610418ae'] = 'Überlagerungs-Farbe'; // Overlay Color +$_MODULE['<{creativeelements}prestashop>_86176e1d3dd3649de183dc33b7750f62'] = 'Überblendmodus'; // Blend Mode +$_MODULE['<{creativeelements}prestashop>_a585b417342e2b83baa9e0c91631b635'] = 'Übergangsdauer'; // Transition Duration +$_MODULE['<{creativeelements}prestashop>_14c841eea7774b78caf79c58989f9625'] = 'Geburtstermin'; // Due Date +$_MODULE['<{creativeelements}prestashop>_5e27ff9d1365046388c9422316d0aecb'] = 'Datum entsprechend Ihrer Zeitzone eingestellt: %s.'; // Date set according to your timezone: %s. +$_MODULE['<{creativeelements}prestashop>_e807d3ccf8d24c8c1a3d86db5da78da8'] = 'Tage'; // Days +$_MODULE['<{creativeelements}prestashop>_6a7e73161603d87b26a8eac49dab0a9c'] = 'Stunden'; // Hours +$_MODULE['<{creativeelements}prestashop>_f670ea66cfb0e90bd6090472ad692694'] = 'Minuten'; // Minutes +$_MODULE['<{creativeelements}prestashop>_8f19a8c7566af54ea8981029730e5465'] = 'Sekunden'; // Seconds +$_MODULE['<{creativeelements}prestashop>_91e23f92acf00ad0c0a49d05a0412473'] = 'Benutzerdefinierte Beschriftung'; // Custom Label +$_MODULE['<{creativeelements}prestashop>_3c1bb91f28c38aed22a0b45bc185efda'] = 'Aktionen nach Ablauf'; // Actions After Expire +$_MODULE['<{creativeelements}prestashop>_4202ef115ebede37eb22297113f5fb32'] = 'Umleiten'; // Redirect +$_MODULE['<{creativeelements}prestashop>_dea4346d3e834aa308004b9d9a3bddd0'] = 'Zeige Nachricht'; // Show Message +$_MODULE['<{creativeelements}prestashop>_13ea583f6474cdce6c0c9b289b652ffe'] = 'Témoignages'; // Testimonials +$_MODULE['<{creativeelements}prestashop>_9a56fece0f74241ee0ad926dae7142af'] = 'Bild innen'; // Image Inline +$_MODULE['<{creativeelements}prestashop>_6d8a959b6100d1127c23225c11fa883b'] = 'Bild gestapelt'; // Image Stacked +$_MODULE['<{creativeelements}prestashop>_0feb1fedcd7c19a716f395aaaee18724'] = 'Bild oben'; // Image Above +$_MODULE['<{creativeelements}prestashop>_225bf3d9290b5f536b2e442259e78652'] = 'Carousel'; // Carousel +$_MODULE['<{creativeelements}prestashop>_11b2f0f6f0bc356b0016cef1f65d43f7'] = 'Hotspot-Elemente'; // Hotspots +$_MODULE['<{creativeelements}prestashop>_1ba9660cdf805a4d401168d890e267f0'] = 'TrustedShops-ID'; // TrustedShops Id +$_MODULE['<{creativeelements}prestashop>_96a3a918504b7fc5557a988a909b8731'] = 'Sie haben Ihre persönliche TS-ID erhalten, als Sie sich bei Trusted Shops registriert haben.'; // You received your personal TS ID when you registered with Trusted Shops. +$_MODULE['<{creativeelements}prestashop>_19c1a6a025c55f0f62ace3d44736df57'] = 'Bewertungen filtern'; // Filter Reviews +$_MODULE['<{creativeelements}prestashop>_eb92025cb8c66f1850c13a9b602a1856'] = 'Zeige alles'; // Show all +$_MODULE['<{creativeelements}prestashop>_7ed67a77aee0decb9cad36d739c734ad'] = 'Zeigen von %d Sternen'; // Show from %d Stars +$_MODULE['<{creativeelements}prestashop>_34e80a799d144cfe4af46815e103f017'] = 'Bewertungen'; // Reviews +$_MODULE['<{creativeelements}prestashop>_44749712dbec183e983dcd78a7736c41'] = 'Datum'; // Date +$_MODULE['<{creativeelements}prestashop>_0be8406951cdfda82f00f79328cf4efc'] = 'Kommentar'; // Comment +$_MODULE['<{creativeelements}prestashop>_56ee3495a32081ccb6d2376eab391bfa'] = 'Auflistung'; // Listing +$_MODULE['<{creativeelements}prestashop>_cf8156f1f57a8603cd6b3a28c9c2c61b'] = 'Vorgestellte Produkte'; // Featured Products +$_MODULE['<{creativeelements}prestashop>_7f82cf6868d89ca72d670092caedfb86'] = 'Angebote'; // Prices Drop +$_MODULE['<{creativeelements}prestashop>_1529636c2dd134b028a08f7b131115b5'] = 'Neue Artikel'; // New Products +$_MODULE['<{creativeelements}prestashop>_e4e3e01496bc4f69bb08fc7da19f6d45'] = 'Verkaufshits'; // Best Sales +$_MODULE['<{creativeelements}prestashop>_534ed3f39af7a636f6cf7a59f74fe824'] = 'Zuletzt angesehen'; // Recently Viewed +$_MODULE['<{creativeelements}prestashop>_347da0da598694c57fff1cbaa197d615'] = 'Ähnliche Produkte'; // Related Products +$_MODULE['<{creativeelements}prestashop>_640925b217801653719fa252c768f21e'] = 'Produkte nach Marke'; // Products by Brand +$_MODULE['<{creativeelements}prestashop>_a086d764f6d125919a1f1ae36610be98'] = 'Produkte nach Lieferanten'; // Products by Supplier +$_MODULE['<{creativeelements}prestashop>_3543501e965f5cae13f8257f51c96bf7'] = 'Produkte angeben'; // Custom Products +$_MODULE['<{creativeelements}prestashop>_8a4f5a66d0fcc9d13614516db6e3d47a'] = 'Produkte derselben Kategorie'; // Products in the same category +$_MODULE['<{creativeelements}prestashop>_704d59dbf9c0f798de6d48d9514f8c93'] = 'Produkte mit der gleichen Marke'; // Products with the same brand +$_MODULE['<{creativeelements}prestashop>_39a3224a7760b9e3963f1d91b2a1679c'] = 'Produkte mit demselben Lieferanten'; // Products with the same supplier +$_MODULE['<{creativeelements}prestashop>_64b7a126e62d47bb341dff4b51ef8ee4'] = 'Aktuelles Produkt'; // Current Product +$_MODULE['<{creativeelements}prestashop>_068f80c7519d0528fb08e82137a72131'] = 'Produkte'; // Products +$_MODULE['<{creativeelements}prestashop>_deb10517653c255364175796ace3553f'] = 'Produkt'; // Product +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Kategorie'; // Category +$_MODULE['<{creativeelements}prestashop>_801322095c363689f7620e0147e3fd14'] = 'Sortieren nach'; // Order By +$_MODULE['<{creativeelements}prestashop>_e22269bb51f9f2394e148716babbafbb'] = 'Popularität'; // Popularity +$_MODULE['<{creativeelements}prestashop>_f8a385c7fdc1e711a02ad3054f7d6107'] = 'Verkaufsvolumen'; // Sales Volume +$_MODULE['<{creativeelements}prestashop>_885b3c534ec909cf87987897bfba2235'] = 'Ankunft'; // Arrival +$_MODULE['<{creativeelements}prestashop>_78d3b698da1e3dead203cce8f05e98d9'] = 'Auftragsrichtung'; // Order Direction +$_MODULE['<{creativeelements}prestashop>_cf3fb1ff52ea1eed3347ac5401ee7f0c'] = 'Aufsteigend'; // Ascending +$_MODULE['<{creativeelements}prestashop>_e3cf5ac19407b1a62c6fccaff675a53b'] = 'Absteigend'; // Descending +$_MODULE['<{creativeelements}prestashop>_bac39878c1766a7a8552263903b9eeb9'] = 'Zufällig'; // Randomize +$_MODULE['<{creativeelements}prestashop>_5d1dba09dcca2334ab1c3345824e2141'] = 'Produktlimit'; // Product Limit +$_MODULE['<{creativeelements}prestashop>_9e9116fc9c6c97bf62e851175f2be9a1'] = 'Zweites Bild'; // Second Image +$_MODULE['<{creativeelements}prestashop>_21c9820a0ca58c27fc6c2da73e1a2641'] = 'Zweites Bild beim Hover anzeigen, falls vorhanden'; // Show second image on hover if exists +$_MODULE['<{creativeelements}prestashop>_8df278efb191bfec176ff8dd42668fa9'] = 'Max. Länge'; // Max. Length +$_MODULE['<{creativeelements}prestashop>_d090bb34c5334e3f8307d4d14295dbc0'] = 'Regulärer Preis'; // Regular Price +$_MODULE['<{creativeelements}prestashop>_ff5627f178b47dbd65d0cc229a956c4e'] = 'Abzeichen'; // Badges +$_MODULE['<{creativeelements}prestashop>_f2cd171bd42220283b7a595c3ff2aaaf'] = 'Rabatt'; // Sale +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Neu'; // New +$_MODULE['<{creativeelements}prestashop>_4492081ca02b059f9e8af4ddaf0f7292'] = 'Pack'; // Pack +$_MODULE['<{creativeelements}prestashop>_2ef464d50f6acd767fb3424910995218'] = 'Out-of-Stock'; // Out-of-Stock +$_MODULE['<{creativeelements}prestashop>_50155057b32fd0eac6419c9303a484a6'] = 'Reihen Abstand'; // Row Gap +$_MODULE['<{creativeelements}prestashop>_72f2d9457fc51fdf260b4bc7a467d537'] = 'Mehrzeilig zulassen'; // Allow Multiline +$_MODULE['<{creativeelements}prestashop>_fb5befd93e30eba6a71fef4b32a65e9a'] = 'Top Entfernung'; // Top Distance +$_MODULE['<{creativeelements}prestashop>_271e53cc1d1dfb05e14b2dc83b4edb9e'] = 'Linke Entfernung'; // Left Distance +$_MODULE['<{creativeelements}prestashop>_965cbdf786f774c2d426dcc19a039aa4'] = 'Rechts Entfernung'; // Right Distance +$_MODULE['<{creativeelements}prestashop>_3f65d6e17a11466983fd177702cf6a71'] = 'Kontakt Formular'; // Contact Form +$_MODULE['<{creativeelements}prestashop>_3481dc97ec8ba3c605cdc753aff1fcf0'] = 'Formular Felder'; // Form Fields +$_MODULE['<{creativeelements}prestashop>_e0626222614bdee31951d84c64e5e9ff'] = 'Wähle'; // Select +$_MODULE['<{creativeelements}prestashop>_b021df6aac4654c454f46c77646e745f'] = 'Beschriftung'; // Label +$_MODULE['<{creativeelements}prestashop>_68753d36ec0c4d7768b20993268d68d1'] = 'Platzhalter'; // Placeholder +$_MODULE['<{creativeelements}prestashop>_530f488f7a9800411efc6926ab189708'] = 'Reihen'; // Rows +$_MODULE['<{creativeelements}prestashop>_902b0d55fddef6f8d651fe1035b7d4bd'] = 'Error'; // Error +$_MODULE['<{creativeelements}prestashop>_4f8222964f9a317cef99dddc23a121bd'] = 'Kontrollkästchen'; // Checkbox +$_MODULE['<{creativeelements}prestashop>_b22aeaf14deafb2ea0d4517349e59a8c'] = 'Karusselleinstellungen'; // Carousel Settings +$_MODULE['<{creativeelements}prestashop>_44877c6aa8e93fa5a91c9361211464fb'] = 'Geschwindigkeit'; // Speed +$_MODULE['<{creativeelements}prestashop>_70ab55fc8ac90620143b01c453be77a3'] = 'Endlosschleife'; // Loop forever +$_MODULE['<{creativeelements}prestashop>_52c697d185b28f19449ff8a4755f7d20'] = 'Bilderliste'; // Lista Diapositive +$_MODULE['<{creativeelements}prestashop>_ceb94b5ba288f75b442e17df5e2f386e'] = 'Modul konfigurieren'; // Configure Module +$_MODULE['<{creativeelements}prestashop>_fafd952418c73bbc20286f8b0ec5bd6a'] = 'Startkategorie'; // Category Root +$_MODULE['<{creativeelements}prestashop>_76519eb2c98e529ec632474488e618d0'] = 'Start-Kategorie'; // Home Category +$_MODULE['<{creativeelements}prestashop>_7e95adf6587633010eba9b602dc43817'] = 'Aktuelle Kategorie'; // Current Category +$_MODULE['<{creativeelements}prestashop>_4e98e60e38a29ab7bd94ea815c4f2ef2'] = 'Eltern-Kategorie'; // Parent Category +$_MODULE['<{creativeelements}prestashop>_ff571d9fd8c0039b08b1a6106f650e70'] = 'Maximale Tiefe'; // Maximum Depth +$_MODULE['<{creativeelements}prestashop>_6b46ae48421828d9973deec5fa9aa0c3'] = 'Sortieren'; // Sort +$_MODULE['<{creativeelements}prestashop>_2e958161e121e44beb3cc40325adf32a'] = 'Nach Name'; // By Name +$_MODULE['<{creativeelements}prestashop>_7d7ab8b7ee9f5fa61c94baca04eab51c'] = 'Nach Position'; // By Position +$_MODULE['<{creativeelements}prestashop>_c20cc8f5bb7d26404f80b1c990c8a7fd'] = 'Sortierung'; // Sort Order +$_MODULE['<{creativeelements}prestashop>_6404a73edb680a8c8ef91c6604295a9f'] = 'Neuen Slider erstellen'; // Create New Slider +$_MODULE['<{creativeelements}prestashop>_50dbffc1e2883d38ccf6841e2bb32041'] = 'Nennen Sie Ihren neuen Slider'; // Name your new slider +$_MODULE['<{creativeelements}prestashop>_2d9b9a764fb0be4be10e1b2fce63f561'] = 'Slider'; // Slider +$_MODULE['<{creativeelements}prestashop>_3c311933c000b6aab612c1f5944f4388'] = 'Bearbeiten Slider'; // Edit Slider +$_MODULE['<{creativeelements}prestashop>_cd4bb13b29348d29bad8b60ca5358726'] = 'Vorgenommenen Änderungen können nicht gespeichert werden, sind Sie sicher, dass Sie schließen?'; // Changes you made may not be saved, are you sure you want to close? +$_MODULE['<{creativeelements}prestashop>_b9b371458ab7c314f88b81c553f6ce51'] = 'Andockpunkt (Hook)'; // Hook +$_MODULE['<{creativeelements}prestashop>_e6c8da8ca137d6c8c67d2911cb39a7df'] = 'Geben Sie den gewünschten Andockpunkt, wenn nötig.'; // Specify the required hook if needed. +$_MODULE['<{creativeelements}prestashop>_1bacb9caa60813ee730288d7dd95e7fc'] = 'Site-URL'; // Site URL +$_MODULE['<{creativeelements}prestashop>_30fc6bbba82125243ecf4ddb27fee645'] = 'Minimal'; // Minimal +$_MODULE['<{creativeelements}prestashop>_4d5098c1fcd4aad3e501e7d48ba6678a'] = 'Oberleiste'; // Topbar +$_MODULE['<{creativeelements}prestashop>_324118a6721dd6b8a9b9f4e327df2bf5'] = 'Eingabe'; // Input +$_MODULE['<{creativeelements}prestashop>_3601146c4e948c32b6424d2c0a7f0118'] = 'Preis'; // Price +$_MODULE['<{creativeelements}prestashop>_a6b9b2b91d590b3b3ee18a918f1e0019'] = 'Ergebnisliste'; // Result List +$_MODULE['<{creativeelements}prestashop>_fad52b41b8afc9dd3abfe62ddf2619ad'] = 'Max-Linien'; // Max Lines +$_MODULE['<{creativeelements}prestashop>_0b60a73d19a81f2c1d7317facbb190cb'] = 'Icon Größe'; // Icon Size +$_MODULE['<{creativeelements}prestashop>_d865317d1c523409ecfeb7fe4b36b022'] = 'Rahmenbreite'; // Border Size +$_MODULE['<{creativeelements}prestashop>_219ff7705d67d0c798779951dcf82e95'] = 'Seitenleiste'; // Sidebar +$_MODULE['<{creativeelements}prestashop>_4eb86eb205d6b3d881389109cf04f5a2'] = 'Leere Nachricht'; // Empty Message +$_MODULE['<{creativeelements}prestashop>_47fffe3e93fbb9948af64f5669fa228a'] = 'Keine Produkte im Einkaufswagen.'; // No products in the cart. +$_MODULE['<{creativeelements}prestashop>_8fb5243396b45a73c0edda2c7216a520'] = 'Versandkosten'; // Shipping Price +$_MODULE['<{creativeelements}prestashop>_6ab3dc1c702beaee933398ab684ed0f5'] = 'Artikelanzeige'; // Items Indicator +$_MODULE['<{creativeelements}prestashop>_b6230dfc594205d0ea15d5890ac22d7f'] = 'Blase'; // Bubble +$_MODULE['<{creativeelements}prestashop>_76d19c2a8909c1336a839cc4aa86fa71'] = 'Nicht anzeigen wenn leer'; // Hide Empty +$_MODULE['<{creativeelements}prestashop>_2194aaec8cc7086ab0e93f74547e5f53'] = 'Gesamt'; // Subtotal +$_MODULE['<{creativeelements}prestashop>_4e0604a7752f38f11cc085a88d86560f'] = 'In den Warenkorb Aktion'; // Add To Cart Action +$_MODULE['<{creativeelements}prestashop>_4766ca6cee31e96506d90b68e2dcd095'] = 'Modal anzeigen'; // Show Modal +$_MODULE['<{creativeelements}prestashop>_bde17a3981c83c8c5967d989f40a7a27'] = 'Warenkorb öffnen'; // Open Shopping Cart +$_MODULE['<{creativeelements}prestashop>_b54ebc45d5968196122274ca0d93d849'] = 'Produktattribute'; // Product Attributes +$_MODULE['<{creativeelements}prestashop>_488b35d8ad1e08e668ac0f2d3d463f68'] = 'Artikel Symbol entfernen'; // Remove Item Icon +$_MODULE['<{creativeelements}prestashop>_290612199861c31d1036b185b4e69b75'] = 'Zusammenfassung'; // Summary +$_MODULE['<{creativeelements}prestashop>_5b3ec15499a125805b5bbf8e4afcec8c'] = 'Boutons'; // Buttons +$_MODULE['<{creativeelements}prestashop>_5b3ec15499a125805b5bbf8e4afcec8c'] = 'Schaltflächen'; // Buttons +$_MODULE['<{creativeelements}prestashop>_59fc69e031ecb0f82efe467fd6692383'] = 'Warenkorb'; // View Cart +$_MODULE['<{creativeelements}prestashop>_e404dd0bece5f7c53d80edaa70513eec'] = 'Hauptmenü'; // Main Menu +$_MODULE['<{creativeelements}prestashop>_b5750478c3c490d2c1df5dfdfdd6b7a4'] = 'Linkliste'; // Link List +$_MODULE['<{creativeelements}prestashop>_3f2a535406fb0b67258851e0b8816caa'] = 'Gehen Sie zum %s-Modul, um Ihre Menüelemente zu verwalten.'; // Go to the %s module to manage your menu items. +$_MODULE['<{creativeelements}prestashop>_7498c445a737312f3678aa1494e01a38'] = 'Aufklappen'; // Dropdown +$_MODULE['<{creativeelements}prestashop>_61cf8510205077b6f5491d38cd44c0f7'] = 'Zeiger'; // Pointer +$_MODULE['<{creativeelements}prestashop>_852721aa5fc738dfedff2945d71da439'] = 'Strich unterhalb'; // Underline +$_MODULE['<{creativeelements}prestashop>_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Strich oberhalb'; // Overline +$_MODULE['<{creativeelements}prestashop>_14cc8634a5bfab35b6e853c9198925f7'] = 'Doppelte Linie'; // Double Line +$_MODULE['<{creativeelements}prestashop>_d6b6b668dbca9d4fe774bb654226ebe3'] = 'Animation'; // Animation +$_MODULE['<{creativeelements}prestashop>_bb339e17211e92f514b07c1951d06e72'] = 'Untermenü Indikator'; // Submenu Indicator +$_MODULE['<{creativeelements}prestashop>_a1e4659d43cc7eab28edeac2e9f75bc4'] = 'Untermenü Ausrichten'; // Submenu Align +$_MODULE['<{creativeelements}prestashop>_ead153a06f04c12e720c5aa0cffe0729'] = 'Untermenü anzeigen'; // Show Submenu +$_MODULE['<{creativeelements}prestashop>_9ccbedea8cb99c482cb42bbae12a75ea'] = 'auf Hover'; // On Hover +$_MODULE['<{creativeelements}prestashop>_6ddd42699e63792e32b11959de64ff6c'] = 'auf Klick'; // On Click +$_MODULE['<{creativeelements}prestashop>_98c9ea2e311ff0ddd10aa4a50c5cc04b'] = 'Mobiles Ausklapp-Menü'; // Mobile Dropdown +$_MODULE['<{creativeelements}prestashop>_7129472c5eb598faf47e4e877f2618fd'] = 'Umbruch bei'; // Breakpoint +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Volle Breite'; // Full Width +$_MODULE['<{creativeelements}prestashop>_29e7cdd1ed01040595b903308c492d8b'] = 'Strecke das aufgeklappte Menü auf die volle Breite.'; // Stretch the dropdown of the menu to full width. +$_MODULE['<{creativeelements}prestashop>_91eb91e653c97c3600e5ee786226e68b'] = 'Umschaltknopf'; // Toggle Button +$_MODULE['<{creativeelements}prestashop>_7aa99f13e44dd25f7de294bc71abe4ff'] = 'Hamburger'; // Hamburger +$_MODULE['<{creativeelements}prestashop>_f15f18ce20de4f5948ecb46b1958e7ea'] = 'Horizontaler Innenabstand'; // Horizontal Padding +$_MODULE['<{creativeelements}prestashop>_55f2842d1d6cd77c91e84ae5e4d1aea2'] = 'Vertikaler Innenabstand'; // Vertical Padding +$_MODULE['<{creativeelements}prestashop>_0b1081024cf0544ac21de69d1b6a0f21'] = 'Zeigerbreite'; // Pointer Width +$_MODULE['<{creativeelements}prestashop>_b1c6469beab5f226ceb51402e429215e'] = 'Zeigerfarbe'; // Pointer Color +$_MODULE['<{creativeelements}prestashop>_d11ed49f634022147a3ab4a0ac7e8f1d'] = 'In der Desktopansicht betrifft dies das Untermenü, in der mobilen Ansicht das ganze Menü.'; // On desktop, this will affect the submenu. On mobile, this will affect the entire menu. +$_MODULE['<{creativeelements}prestashop>_8a84bf5a983ed52ea6aca9188f21c927'] = 'Unterzeichnet in'; // Signed in +$_MODULE['<{creativeelements}prestashop>_bc910f8bdf70f29374f496f05be0330c'] = 'Vorname'; // First Name +$_MODULE['<{creativeelements}prestashop>_77587239bf4c54ea493c7033e1dbf636'] = 'Nachname'; // Last Name +$_MODULE['<{creativeelements}prestashop>_50346473cb92c34ef84e58f727a6a911'] = 'Benutzermenü'; // Usermenu +$_MODULE['<{creativeelements}prestashop>_d95cf4ab2cbf1dfb63f066b50558b07d'] = 'Ihr Kundenbereich'; // My account +$_MODULE['<{creativeelements}prestashop>_0fd8dc8abb2404ad11af4182f10643c1'] = 'Profil'; // Personal info +$_MODULE['<{creativeelements}prestashop>_284b47b0bb63ae2df3b29f0e691d6fcf'] = 'Adressen'; // Addresses +$_MODULE['<{creativeelements}prestashop>_df96fcb565aa7ca076514dfb1f7d94a7'] = 'Neue Adresse'; // New Address +$_MODULE['<{creativeelements}prestashop>_782c8b38bce4f2f6975ca7f33ac8189b'] = 'Bestellverlauf'; // Order history +$_MODULE['<{creativeelements}prestashop>_cf3bae95c5f6023d5a10fe415b205a45'] = 'Rechnungskorrektur'; // Credit slip +$_MODULE['<{creativeelements}prestashop>_95d2137c196c7f84df5753ed78f18332'] = 'Rabatt'; // My vouchers +$_MODULE['<{creativeelements}prestashop>_9b0af1b39d6dff87b095d7041924e7b8'] = 'Länderflagge'; // Country Flag +$_MODULE['<{creativeelements}prestashop>_ad68f9bafd9bf2dcf3865dac55662fd5'] = 'ISO-Code'; // ISO code +$_MODULE['<{creativeelements}prestashop>_81ca343ca02154e6d9d0b1428a9dd2f6'] = 'Kein Bild'; // No Image +$_MODULE['<{creativeelements}prestashop>_e833b5e560bdc737fe850bc50d0c5f0c'] = 'Slideshow'; // Slideshow +$_MODULE['<{creativeelements}prestashop>_a296104f0c61a9cf39f4824d05315e12'] = 'Würfel'; // Cube +$_MODULE['<{creativeelements}prestashop>_e8b4b2443c2f0e19957e1e77c3c92c12'] = 'Blättern-Ansicht'; // Coverflow +$_MODULE['<{creativeelements}prestashop>_acc66e14d297c1bfc20986bf593cb054'] = 'Vorschaubilder'; // Thumbnails +$_MODULE['<{creativeelements}prestashop>_f63af7ab801158241f45d82e519df16d'] = 'Zoomen bei Hover'; // Zoom on Hover +$_MODULE['<{creativeelements}prestashop>_882277bdf25efaeb8295e842ebcb3d11'] = 'Fallback'; // Fallback +$_MODULE['<{creativeelements}prestashop>_d2203cb1237cb6460cbad94564e39345'] = 'Regulär'; // Regular +$_MODULE['<{creativeelements}prestashop>_19c562a36aeb455d09534f93b4f5236f'] = 'Stück'; // Unit +$_MODULE['<{creativeelements}prestashop>_58ef6750a23ba432fc1377b7de085d9f'] = 'zzgl. MwSt.'; // Tax excl. +$_MODULE['<{creativeelements}prestashop>_4b78ac8eb158840e9638a3aeb26c4a9d'] = 'Steuer'; // Tax +$_MODULE['<{creativeelements}prestashop>_104d9898c04874d0fbac36e125fa1369'] = 'Rabatt'; // Discount +$_MODULE['<{creativeelements}prestashop>_a586532c728620b9fed5f6baa415ee64'] = 'Bewertung durchschnittlich '; // Average Grade +$_MODULE['<{creativeelements}prestashop>_71d7a3826df386366c89230976b16aca'] = 'Kommentarnummer'; // Comments Number +$_MODULE['<{creativeelements}prestashop>_9934bb23bbec740cca05409a9cd33d7f'] = 'Kommentar posten'; // Post Comment +$_MODULE['<{creativeelements}prestashop>_1be6f9eb563f3bf85c78b4219bf09de9'] = 'Marke'; // Brand +$_MODULE['<{creativeelements}prestashop>_91e85212ab7a0d0295d40e7b03ef4f1c'] = 'Lieferant'; // Supplier +$_MODULE['<{creativeelements}prestashop>_205b01b3197cf06688f6ed574faf5664'] = 'Lieferzeit '; // Delivery Time +$_MODULE['<{creativeelements}prestashop>_241c3f2af65370ced61a874c5725e348'] = 'Lieferdatum'; // Availability Date +$_MODULE['<{creativeelements}prestashop>_9e2941b3c81256fac10392aaca4ccfde'] = 'Zustand'; // Condition +$_MODULE['<{creativeelements}prestashop>_d95867deadfe690e40f42068d6b59df8'] = 'Artikelnummern'; // References +$_MODULE['<{creativeelements}prestashop>_6665e3761028c84e1d228de3432229ed'] = 'Artikel-Nr.'; // SKU +$_MODULE['<{creativeelements}prestashop>_3ccf74d463f8895cef06727cb9709d83'] = 'Doppelpunkt'; // Colon +$_MODULE['<{creativeelements}prestashop>_0a045d39aea567664edf2daaa25860ff'] = 'Drop-down-Liste'; // Drop-down List +$_MODULE['<{creativeelements}prestashop>_7041d69f9024a46791714e59812fa68f'] = 'Optionsfelder'; // Radio Buttons +$_MODULE['<{creativeelements}prestashop>_eaec849a5ffecf1b13b1ca2490cdb4e1'] = 'Farb-/Textur-Buttons'; // Color/Texture Buttons +$_MODULE['<{creativeelements}prestashop>_c1f52fba179ff982b10e3881670b61ef'] = 'Kaufe jetzt'; // Buy Now +$_MODULE['<{creativeelements}prestashop>_515c06a3b32dc640a16385b52ae67c56'] = 'Artikel mit Varianten'; // Product with Combinations +$_MODULE['<{creativeelements}prestashop>_d248b7896bffb1d7bc56d6378930affb'] = 'Alle Details anzeigen'; // View Full Details +$_MODULE['<{creativeelements}prestashop>_9abdae4fa5d93330363a88ed8a5e7946'] = 'Cursor'; // Cursor +$_MODULE['<{creativeelements}prestashop>_37b6bd7fe61d651735cec3d3b0356c66'] = 'Ungerade'; // Odd +$_MODULE['<{creativeelements}prestashop>_35537fbc25d87ffe59e4f35fefcd34b7'] = 'Gerade'; // Even +$_MODULE['<{creativeelements}prestashop>_689202409e48743b914713f96d93947c'] = 'Wert'; // Value +$_MODULE['<{creativeelements}prestashop>_eec89088ee408b80387155272b113256'] = 'Network'; // Network +$_MODULE['<{creativeelements}prestashop>_e2d9081a3961cdb83db1d1fa7582ad04'] = 'Produkt-Cover'; // Product Cover +$_MODULE['<{creativeelements}prestashop>_01b9e63c9fbfec3fe4863e79d46956fc'] = 'Produktanpassung'; // Product Customization +$_MODULE['<{creativeelements}prestashop>_f63e07e0b80ccecfebdc36e6fe11c876'] = 'Produkt-Pack'; // Product Pack +$_MODULE['<{creativeelements}prestashop>_3b67fc912569438cec7b2cc96eb415a9'] = 'Produktrabatte'; // Product Discounts +$_MODULE['<{creativeelements}prestashop>_87421dbd18a1eb6349fefd26db3a717d'] = 'Produktaktionen'; // Product Actions +$_MODULE['<{creativeelements}prestashop>_8bb5496d7ab4e19058067c0fa40d45ef'] = 'Produktverfügbarkeit'; // Product Availability +$_MODULE['<{creativeelements}prestashop>_841368ddc1cc8ee4e5c8d010b62d3dd5'] = 'Mindestmenge'; // Minimum Quantity +$_MODULE['<{creativeelements}prestashop>_e5c548d29f23c379b1452c40a208c445'] = 'Zusätzliche Information'; // Additional Info +$_MODULE['<{creativeelements}prestashop>_1c2df820420d0376965fb9da04eca4df'] = 'Beruhigung'; // Reassurance +$_MODULE['<{creativeelements}prestashop>_75fa820aebc10bf31b310065b38447c7'] = 'Produkt-Tabs'; // Product Tabs +$_MODULE['<{creativeelements}prestashop>_b8900d8adf598b6653bb8c071bc49a1d'] = 'Produktdetails'; // Product Details +$_MODULE['<{creativeelements}prestashop>_623a9a1f669b091dd76bead27c3252ed'] = 'Mengen'; // Quantities +$_MODULE['<{creativeelements}prestashop>_4594f39c6dac58760daeb19d79389576'] = 'Spezifische Referenzen'; // Specific References +$_MODULE['<{creativeelements}prestashop>_da1b85e60d23d8d59c77d31af402acda'] = 'Produktzubehör'; // Product Accessories +$_MODULE['<{creativeelements}prestashop>_9787028383eef1dfde2f09093a851373'] = 'Produktfußzeile'; // Product Footer +$_MODULE['<{creativeelements}prestashop>_9909f0bb3eb94634e3f8cd0164dbacac'] = 'Sie haben alle Shops oder eine Shopgruppe ausgewählt. Änderungen wirken sich auf alle ausgewählten Shops aus.'; // You are in a multistore context: any modification will impact all your shops, or each shop of the active group. diff --git a/modules/creativeelements/translations/es.php b/modules/creativeelements/translations/es.php new file mode 100644 index 00000000..dfb7c04c --- /dev/null +++ b/modules/creativeelements/translations/es.php @@ -0,0 +1,1275 @@ +_71d8a11f3a1853ee785d61e210485c28'] = 'Creative Elements 2.5 introduce cambios clave para el diseño usando CSS Flexbox. Puede que tus páginas existentes se vean afectadas así que, por favor, revisa tu página antes de publicar.'; // Creative Elements 2.5 introduces key changes to the layout using CSS Flexbox. Your existing pages might have been affected, please review your page before publishing. +$_MODULE['<{creativeelements}prestashop>_20fe34eafdf840c5f35e60d4bdfd3876'] = 'Nota: Cambios a Flexbox'; // Note: Flexbox Changes +$_MODULE['<{creativeelements}prestashop>_65b3710ad99ada6c018a6d36d23ff656'] = 'Orientación vertical'; // Vertical Orientation +$_MODULE['<{creativeelements}prestashop>_dfd0a82c4bf37b1e90b690a22a20692e'] = 'Compensación'; // Offset +$_MODULE['<{creativeelements}prestashop>_1b6f6fe2f7bc999abb893e7bea077f4c'] = 'Orientación horizontal'; // Horizontal Orientation +$_MODULE['<{creativeelements}prestashop>_4457d440870ad6d42bab9082d9bf9b61'] = 'Fijo'; // Fixed +$_MODULE['<{creativeelements}prestashop>_b51ca26c6c89cfc9bec338f7a0d3e0c8'] = 'Absoluto'; // Absolute +$_MODULE['<{creativeelements}prestashop>_0ee951833c18c2a27c2967d5490ab899'] = 'La posición personalizada no se considera una buena práctica para el diseño web adaptable y no debería usarse tan frecuentemente.'; // Custom positioning is not considered best practice for responsive web design and should not be used too frequently. +$_MODULE['<{creativeelements}prestashop>_d95c4d0d7d8f6a51de4c86208c3b35b1'] = '¡Por favor, ten en cuenta!'; // Please note! +$_MODULE['<{creativeelements}prestashop>_56419bfabc4807a765543d23f357d55e'] = 'Ancho personalizado'; // Custom Width +$_MODULE['<{creativeelements}prestashop>_506555a17a9375eb4a701c4fa22ab93c'] = 'Calcular'; // Calculate +$_MODULE['<{creativeelements}prestashop>_1dcb5758bddf39c3c93a63bec8d7655a'] = 'Orden'; // Order +$_MODULE['<{creativeelements}prestashop>_f13af8b45701da62165a903a828eb26a'] = 'Orden personalizado'; // Custom Order +$_MODULE['<{creativeelements}prestashop>_7acdf85c69cc3c5305456a293524386e'] = 'Oculto'; // Hidden +$_MODULE['<{creativeelements}prestashop>_129e8109f319870e328cc7a1d5b5cae3'] = 'Desbordamiento'; // Overflow +$_MODULE['<{creativeelements}prestashop>_a7f391c54b912211cd510fd1098e5308'] = 'Efectos de movimiento'; // Motion Effects +$_MODULE['<{creativeelements}prestashop>_cdd416d7a24537ed830732917e74410d'] = 'Alineación horizontal'; // Horizontal Align +$_MODULE['<{creativeelements}prestashop>_daa3a8e38d3417760fe479ba9a956f21'] = 'Espaciado uniforme'; // Space Evenly +$_MODULE['<{creativeelements}prestashop>_48ad0b896ae6d7004eb87bad5a125d71'] = 'Espaciado alrededor'; // Space Around +$_MODULE['<{creativeelements}prestashop>_692af12e687aba7f0845b9a49b515c9d'] = 'Alineación vertical'; // Vertical Align +$_MODULE['<{creativeelements}prestashop>_d7f3d71483d1424cf1edaed61be43f40'] = 'Nota: El ID de enlace sólo acepta estos caracteres: %s'; // Note: The ID link ONLY accepts these chars: %s +$_MODULE['<{creativeelements}prestashop>_e635032a5f71d809146d3872389f5b0c'] = 'Elegir archivo'; // Choose File +$_MODULE['<{creativeelements}prestashop>_48b6dc1949d063860c1765ebd06bbc95'] = 'URL externa'; // External URL +$_MODULE['<{creativeelements}prestashop>_801322095c363689f7620e0147e3fd14'] = 'Ordenar por'; // Order By +$_MODULE['<{creativeelements}prestashop>_ce5bf551379459c1c61d2a204061c455'] = 'Ubicación'; // Location +$_MODULE['<{creativeelements}prestashop>_71bfb711908ea603a75e86c3e5dbb47a'] = 'Sigue leyendo %s'; // Continue reading %s +$_MODULE['<{creativeelements}prestashop>_54d0d7ad584d2f68657459fa49b9fa80'] = '(más…)'; // (more…) +$_MODULE['<{creativeelements}prestashop>template_library_42d00bc24fd43cfe3e2e30d01f39ee95'] = 'Filtrar por categoría'; // Filter by category +$_MODULE['<{creativeelements}prestashop>template_library_a6a2a55bea8760389dfca77132905b7c'] = 'Todas las categorías'; // All Categories +$_MODULE['<{creativeelements}prestashop>template_library_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Categoría'; // Category +$_MODULE['<{creativeelements}prestashop>template_library_af1b98adf7f686b84cd0b443e022b7a0'] = 'Categorías'; // Categories +$_MODULE['<{creativeelements}prestashop>template_library_7df96b18c230f90ada0a9e2307226338'] = 'Plantillas'; // Templates +$_MODULE['<{creativeelements}prestashop>background_control_e7492ba5c0e269d4b32aecd208c0fbff'] = 'Posición Y'; // Y Position +$_MODULE['<{creativeelements}prestashop>background_control_21e84455e7383dee4e606afc7ae6af83'] = 'Posición X'; // X Position +$_MODULE['<{creativeelements}prestashop>background_control_90589c47f06eb971d548591f23c285af'] = 'Personalizado'; // Custom +$_MODULE['<{creativeelements}prestashop>_0d4c14a20b4d98a5de54e1480bf99a25'] = 'Ventana emergente'; // Popup +$_MODULE['<{creativeelements}prestashop>_487df467aed02a8dd4a50648141fed82'] = 'Maquetador de temas'; // Theme Builder +$_MODULE['<{creativeelements}prestashop>_c3320c3457dfdfbada4a611a68854ea6'] = 'No compatible'; // Not Supported +$_MODULE['<{creativeelements}prestashop>_95fc8385f09a0cb6cae00e2047ce8430'] = 'Cualquier vídeo'; // Any Video +$_MODULE['<{creativeelements}prestashop>_ba1f922207e50bf1fa2ee2b917e63a2b'] = 'Canal de vídeo actual'; // Current Video Channel +$_MODULE['<{creativeelements}prestashop>_b46c2db25162b51009aba9c0317c2435'] = 'Color sin marcar'; // Unmarked Color +$_MODULE['<{creativeelements}prestashop>_d37c550d781bfb93b0088a2470598bcf'] = 'Estrellas'; // Stars +$_MODULE['<{creativeelements}prestashop>_606b51cc1c9d0b4af394419a22f2ff1f'] = 'Trazado'; // Outline +$_MODULE['<{creativeelements}prestashop>_7cdd5cfacc3e9c4fd0d1458df3d444f6'] = 'Estilo sin marcar'; // Unmarked Style +$_MODULE['<{creativeelements}prestashop>_a1718ae9e0cbbac49b74f68a8a21cad2'] = 'Escala de valoración'; // Rating Scale +$_MODULE['<{creativeelements}prestashop>_dda9c06f33071c9b6fc237ee164109d8'] = 'Valoración'; // Rating +$_MODULE['<{creativeelements}prestashop>_3d9d629289199cf23663a21c7a96190e'] = 'Valoración de estrellas'; // Star Rating +$_MODULE['<{creativeelements}prestashop>_6a244a63f35840539994ca1b7d224a9c'] = 'Leyenda personalizada'; // Custom Caption +$_MODULE['<{creativeelements}prestashop>_1c91473a92d118fb1929d3e6975f6a90'] = 'Leyenda del adjunto'; // Attachment Caption +$_MODULE['<{creativeelements}prestashop>_0d82790b0612935992bd564a17ce37d6'] = 'Abandonar'; // Quit +$_MODULE['<{creativeelements}prestashop>_5f405eb9720e7065c9c383de4d40e664'] = 'Atajos de teclado'; // Keyboard Shortcuts +$_MODULE['<{creativeelements}prestashop>_0441244fcc68971ded749fe3c45fab92'] = 'Mostrar / Ocultar panel'; // Show / Hide Panel +$_MODULE['<{creativeelements}prestashop>_94764bde0434a9467c2452999bffc499'] = 'Ir a'; // Go To +$_MODULE['<{creativeelements}prestashop>_5afeaba074ef570dc720caaa855d49f6'] = 'Rehacer'; // Redo +$_MODULE['<{creativeelements}prestashop>_1cdc076b28f70afac5fcedadf99fa119'] = 'Deshacer'; // Undo +$_MODULE['<{creativeelements}prestashop>_d151508da8d36994e1635f7875594424'] = 'Buscador'; // Finder +$_MODULE['<{creativeelements}prestashop>_adff855173c9b92b5478129af7d39e03'] = 'Futuro'; // Future +$_MODULE['<{creativeelements}prestashop>_9157994442d3884a185e82b5df0931bd'] = 'Poster'; // Poster +$_MODULE['<{creativeelements}prestashop>_452a5c072ecdd2a6d27bb1cbb9108f8a'] = 'Carga diferida'; // Lazy Load +$_MODULE['<{creativeelements}prestashop>_be8342af4ac5a74ec8d73f8cacec021d'] = 'Introduce tu URL'; // Enter your URL +$_MODULE['<{creativeelements}prestashop>_12737e0ac21826611dba8b42ce43a4a6'] = 'Sección interior'; // Inner Section +$_MODULE['<{creativeelements}prestashop>_0333d78f654f5c73ed8a1ac6866b94ef'] = 'Una vez que llenes tu página de contenido, esta ventana te dará una vista general de todos los elementos de la página. Así podrás mover fácilmente las distintas secciones, columnas y widgets.'; // Once you fill your page with content, this window will give you an overview display of all the page elements. This way, you can easily move around any section, column, or widget. +$_MODULE['<{creativeelements}prestashop>_d3db55a0ce1256f4a2121677fff695fb'] = '¡Ya está aquí la navegación sencilla!'; // Easy Navigation is Here! +$_MODULE['<{creativeelements}prestashop>_ce2c8aed9c2fa0cfbed56cbda4d8bf07'] = 'Vacío'; // Empty +$_MODULE['<{creativeelements}prestashop>_7392e5a07cc56647b45a9598ce4d646d'] = 'Navigator'; // Navigator +$_MODULE['<{creativeelements}prestashop>_72ef2b9b6965d078e3c7f95487a82d1c'] = 'Saltar'; // Skip +$_MODULE['<{creativeelements}prestashop>_5c3a475e00e0f928bebed9b03118a7fb'] = 'Pega la URL o escribe'; // Paste URL or type +$_MODULE['<{creativeelements}prestashop>filter_control_fb5d805f5b3b22e4fd4a1bc66875dbe3'] = 'Tono'; // Hue +$_MODULE['<{creativeelements}prestashop>_4252b72e6ebcd4d4b4c2e46a786f03d2'] = 'Zoom'; // Zoom +$_MODULE['<{creativeelements}prestashop>_66ba162102bbf6ae31b522aec561735e'] = 'Individual'; // Single +$_MODULE['<{creativeelements}prestashop>_ca0de64bfaed84cff1811c8a557460e8'] = 'Todo el contenido'; // All Content +$_MODULE['<{creativeelements}prestashop>_771beb30ea03f1a09209a509ba0a95e7'] = 'Restablecer estilo'; // Style Reset +$_MODULE['<{creativeelements}prestashop>_f373922b0d1d9582e2e01632fa435be2'] = 'Estilo pegado'; // Style Pasted +$_MODULE['<{creativeelements}prestashop>_8c2857a9ad1d8f31659e35e904e20fa6'] = 'Logotipo'; // Logo +$_MODULE['<{creativeelements}prestashop>_bdc558034c3fa1f53c632cb2b4a081eb'] = 'Marca modesta'; // Modest Branding +$_MODULE['<{creativeelements}prestashop>_28f69ec829f28c18234aeb9b4bf84085'] = 'Información del vídeo'; // Video Info +$_MODULE['<{creativeelements}prestashop>_e6b391a8d2c4d45902a23a8b6585703d'] = 'URL'; // URL +$_MODULE['<{creativeelements}prestashop>_9b5e1c921934d0b8af2f354006adc776'] = 'Alojado en servidor propio'; // Self Hosted +$_MODULE['<{creativeelements}prestashop>_f31bbdd1b3e85bccd652680e16935819'] = 'Origen'; // Source +$_MODULE['<{creativeelements}prestashop>_a102718b3b0839b017af5764e82f6bcd'] = 'Por favor, asegúrate de que el ID es único y no se ha usado en otra parte de la página en la que esté este formulario. Este camp permite los caracteres A-z 0-9 y subrayados sin espacios.'; // Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows A-z 0-9 & underscore chars without spaces. +$_MODULE['<{creativeelements}prestashop>_04d536bf597bcb004268f6d8c509dbde'] = 'ID del botón'; // Button ID +$_MODULE['<{creativeelements}prestashop>_a7d6475ec8993b7224d6facc8cb0ead6'] = 'Sitio'; // Site +$_MODULE['<{creativeelements}prestashop>_8d5e7e72f12067991186cdf3cb7d5d9d'] = 'Prima'; // Premium +$_MODULE['<{creativeelements}prestashop>_86176e1d3dd3649de183dc33b7750f62'] = 'Modo doblado'; // Blend Mode +$_MODULE['<{creativeelements}prestashop>_74f88681be25e673fa7caacae1b165bc'] = 'Lo tengo'; // Got It +$_MODULE['<{creativeelements}prestashop>_2cef6b933418f084afe1c5e44bcaa4bc'] = 'Ahora puedes acceder a todas las acciones de edición con un clic derecho.'; // Now you can access all editing actions using right click. +$_MODULE['<{creativeelements}prestashop>_fd27a26bce8b01ecb7f38b4e1d6d2ad5'] = 'Únete al clic derecho'; // Meet Right Click +$_MODULE['<{creativeelements}prestashop>_02b2a8ed2ee59fb6a1ccf3716c988597'] = 'Copiar todo el contenido'; // Copy All Content +$_MODULE['<{creativeelements}prestashop>_e86a54e13ae40856b7c38b514dc6974b'] = 'Restablecer estilo'; // Reset Style +$_MODULE['<{creativeelements}prestashop>_086efb53f636c4bf4fc83938d9a1d39e'] = 'Copiar estilo'; // Copy Style +$_MODULE['<{creativeelements}prestashop>_5fb63579fc981698f97d55bfecb213ea'] = 'Copiar'; // Copy +$_MODULE['<{creativeelements}prestashop>_47858182067cd39bac29ead1d6772192'] = 'Vista previa de %s'; // Preview for %s +$_MODULE['<{creativeelements}prestashop>_0f7c6d84b1393efc4b3666e1866a5759'] = 'Arrastra aquí el widget'; // Drag widget here +$_MODULE['<{creativeelements}prestashop>filter_control_7f491274a53763ba32b7356ade638e19'] = 'Filtros CSS'; // CSS Filters +$_MODULE['<{creativeelements}prestashop>filter_control_2e3307b9b1a2cc64b48f1cd6977a4b29'] = 'Saturación'; // Saturation +$_MODULE['<{creativeelements}prestashop>filter_control_c63ecd19a0ca74c22dfcf3063c9805d2'] = 'Contraste'; // Contrast +$_MODULE['<{creativeelements}prestashop>filter_control_b25323f99788ce64617f018b8a9f5f70'] = 'Brillo'; // Brightness +$_MODULE['<{creativeelements}prestashop>filter_control_8b52de510bc5497ac43abfe566be48ab'] = 'Difuminado'; // Blur +$_MODULE['<{creativeelements}prestashop>_889deb44ad445ea359c1285d37f4a498'] = 'Especifica un tiempo de finalización (en segundos)'; // Specify an end time (in seconds) +$_MODULE['<{creativeelements}prestashop>_c91a577b72313356fad611c55f43c10f'] = 'Tiempo de finalización'; // End Time +$_MODULE['<{creativeelements}prestashop>_3e06b49da8235ee588abdd3f0b58d040'] = 'Especifica un tiempo de inicio (en segundos)'; // Specify a start time (in seconds) +$_MODULE['<{creativeelements}prestashop>_2bbc845892f400626baab5af687527c5'] = 'Tiempo de inicio'; // Start Time +$_MODULE['<{creativeelements}prestashop>page_template_c45746064138c22a117ad58d89d67f4b'] = 'CE ancho completo'; // CE Full Width +$_MODULE['<{creativeelements}prestashop>page_template_80aef4a77adcb8ced5b137d91a103239'] = 'CE canvas'; // CE Canvas +$_MODULE['<{creativeelements}prestashop>_bad6a5dd8c28e6b14f8e986615e3dc98'] = 'Opacidad'; // Opacity +$_MODULE['<{creativeelements}prestashop>_7c7efec2d1dfd66eb653cf98d4cc865c'] = 'Algo salió mal.'; // Something went wrong. +$_MODULE['<{creativeelements}prestashop>_95e942c63e81ac4845c306bf110290a8'] = 'Ancho máximo'; // Max Width +$_MODULE['<{creativeelements}prestashop>_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Posición'; // Position +$_MODULE['<{creativeelements}prestashop>_8b1b1aa6c2a4785ab415c8fbf20e70d9'] = 'Borrar %s'; // Delete %s +$_MODULE['<{creativeelements}prestashop>_95af255a86dc70e932634411b3f91e5f'] = 'Esta plantilla incluye la cabecera, el contenido a ancho completo y el pie de página.'; // This template includes the header, full-width content and footer +$_MODULE['<{creativeelements}prestashop>_daaa4b3e4a9000898257ccbe03236593'] = 'Sin cabecera ni pie de página, solo Creative Elements'; // No header, no footer, just Creative Elements +$_MODULE['<{creativeelements}prestashop>_383478f70ecc7dc313b3653a3724ad5b'] = 'La plantilla de página por defecto de tu tema'; // Default Page Template from your theme +$_MODULE['<{creativeelements}prestashop>_47b74b5cb415e0a295404acaa62ff67a'] = 'Estructura de página'; // Page Layout +$_MODULE['<{creativeelements}prestashop>_222a267cc5778206b253be35ee3ddab5'] = 'Actual'; // Current +$_MODULE['<{creativeelements}prestashop>_b6d34b10f9eae474e5843a027603c4a3'] = 'Reproducir vídeo'; // Play Video +$_MODULE['<{creativeelements}prestashop>_0125cf5f3ca38b312ca5d3b511c45a13'] = 'Integrado'; // Inline +$_MODULE['<{creativeelements}prestashop>_04b2e4188d4ef8051e4699da8af01335'] = 'Separador'; // Separator +$_MODULE['<{creativeelements}prestashop>_26d59c8605cb411d04f53ba087fbde7b'] = 'Añade plantillas y reutilízalas en toda tu web. Expórtalas e impórtalas fácilmente a cualquier otro proyecto, para un flujo de trabajo óptimo.'; // Add templates and reuse them across your website. Easily export and import them to any other project, for an optimized workflow. +$_MODULE['<{creativeelements}prestashop>_70bb931768a57accd63e7496c25dfd18'] = 'Crea tu primera %s'; // Create Your First %s +$_MODULE['<{creativeelements}prestashop>_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Todo'; // All +$_MODULE['<{creativeelements}prestashop>template_library_b9390195ecad3986568746a2a9b56354'] = 'Mis plantillas'; // My Templates +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Categoría'; // Category +$_MODULE['<{creativeelements}prestashop>_284716247b12b363fd6b6a71bff0918e'] = 'Más acciones'; // More actions +$_MODULE['<{creativeelements}prestashop>_10e2fab434f7952f5e61211f6445032a'] = 'Buscar plantillas:'; // Search Templates: +$_MODULE['<{creativeelements}prestashop>_453aceb005ceaf54a47da15fee8b2a26'] = 'Páginas'; // Pages +$_MODULE['<{creativeelements}prestashop>_04c4f9f595c4f21d1de65eb07056c15a'] = 'Bloques'; // Blocks +$_MODULE['<{creativeelements}prestashop>_971fd8cc345d8bd9f92e9f7d88fdf20c'] = 'Dinámico'; // Dynamic +$_MODULE['<{creativeelements}prestashop>_9421c4ccec3719a5d299f1b02862412f'] = 'URL de contacto'; // Contact URL +$_MODULE['<{creativeelements}prestashop>_9a99c312fda8b07dbdd8ac72dc0773f8'] = 'Fecha y hora actuales'; // Current Date Time +$_MODULE['<{creativeelements}prestashop>_4001353741fc405c5786493d252a3991'] = 'URL interna'; // Internal URL +$_MODULE['<{creativeelements}prestashop>_e68c1ad1f675e02452d7f79969b9708e'] = 'Título de la página'; // Page Title +$_MODULE['<{creativeelements}prestashop>_ca341887d434838f3252e2d73f787680'] = 'Solicitar parámetro'; // Request Parameter +$_MODULE['<{creativeelements}prestashop>_781ee6c523f73dae7044617f7cac3941'] = 'Contacto de la tienda'; // Shop Contact +$_MODULE['<{creativeelements}prestashop>_5a43012799d4303730f0c9c32a41b0fd'] = 'URL de la tienda'; // Shop URL +$_MODULE['<{creativeelements}prestashop>_04e0602d4335e2144468e51e5c424590'] = 'Regla del carrito'; // Cart Rule +$_MODULE['<{creativeelements}prestashop>_4695483802b27812a65749cccd212b17'] = 'Nombre de la categoría'; // Category Name +$_MODULE['<{creativeelements}prestashop>_9bb87066bdb5b0307d442bd9d1552632'] = 'Categoría URL'; // Category URL +$_MODULE['<{creativeelements}prestashop>_4232c2deb6ff317abf49721680bd818a'] = 'Nombre de la marca'; // Brand Name +$_MODULE['<{creativeelements}prestashop>_cad080cee7f847c07d0a0061b2f5f771'] = 'URL de la marca'; // Brand URL +$_MODULE['<{creativeelements}prestashop>_8973510d727af4f8c2ba6c1c84d0b718'] = 'URL del producto'; // Product URL +$_MODULE['<{creativeelements}prestashop>_e21f91c630214ac206a785cccd853154'] = 'Regla de precio del catálogo'; // Catalog Price Rule + +$_MODULE['<{creativeelements}prestashop>_b1da34ea28921a8fac7d5f1273327229'] = 'Siguiente'; // Next +$_MODULE['<{creativeelements}prestashop>_033658cb7158c3f36bf7cf9c0f44fcde'] = 'Anterior'; // Previous +$_MODULE['<{creativeelements}prestashop>_eab23bbc21bd1fbd1207247a9864592b'] = 'Reproducir'; // Play +$_MODULE['<{creativeelements}prestashop>_74322cb2d5a81d5daa8556673f478d7c'] = 'Pausa'; // Pause +$_MODULE['<{creativeelements}prestashop>_f582dc21d5a9ffb1bbfadf74318bc5a6'] = 'Selector'; // Selector +$_MODULE['<{creativeelements}prestashop>_2c7d98f10667515c7b00403e2b3ff9a5'] = 'Tel'; // Tel +$_MODULE['<{creativeelements}prestashop>_83dff142c5bc22f9147bc823a52e2b4f'] = 'SMS'; // SMS +$_MODULE['<{creativeelements}prestashop>_56ad595875f55ad4163c2783f11fa964'] = 'Calendario de Google'; // Google Calendar +$_MODULE['<{creativeelements}prestashop>_2f4523c3fec77710fbefd831cc1b893b'] = 'Calendario de Outlook'; // Outlook Calendar +$_MODULE['<{creativeelements}prestashop>_a63a2923058723e763c1e82c75988f5c'] = 'Calendario de Yahoo'; // Yahoo Calendar +$_MODULE['<{creativeelements}prestashop>_251a780878152bc8ea7c44050a46f6a0'] = 'Asunto'; // Subject +$_MODULE['<{creativeelements}prestashop>_7f86db886a07a996fe3378fcbecc8041'] = 'Mensaje'; // Message +$_MODULE['<{creativeelements}prestashop>_b6bda532a7e8a7ea0a75069f35ae864f'] = 'Nombre de usuario'; // Username +$_MODULE['<{creativeelements}prestashop>_d93abbcc3d3ff28056c410d12757aa0a'] = 'Formato de fecha'; // Date Format +$_MODULE['<{creativeelements}prestashop>_c0740f55b6724b631052066baddbf7b0'] = 'Formato de hora'; // Time Format +$_MODULE['<{creativeelements}prestashop>_1b4a75284a56a339d132e59456d27e3a'] = 'Formato personalizado'; // Custom Format +$_MODULE['<{creativeelements}prestashop>_169920a350e7960154dcdc875dafc8df'] = 'Documentación sobre los formatos de fecha y hora'; // Documentation on date and time formatting +$_MODULE['<{creativeelements}prestashop>_df9a7c88f7bf07e724b934716cc790f4'] = 'Buscar y seleccionar'; // Search & Select +$_MODULE['<{creativeelements}prestashop>_363507878ffebd26d035aa7ba2093f35'] = 'Tipo Nombre del producto / Ref.'; // Type Product Name / Ref +$_MODULE['<{creativeelements}prestashop>_a9c548584e357eca69a0f96e8295e524'] = 'Nombre del parámetro'; // Parameter Name +$_MODULE['<{creativeelements}prestashop>_6ba425ac509bdf319cbb43aae65ee954'] = 'Campo'; // Field +$_MODULE['<{creativeelements}prestashop>_45e41f822b049adbf2eedb23cb170188'] = 'Empresa'; // Company +$_MODULE['<{creativeelements}prestashop>_4984ae7378622cd416b9aced4cdc7612'] = 'Dirección'; // Address +$_MODULE['<{creativeelements}prestashop>_a4c7dc56186aaf14cb52b6ad6e320d91'] = 'ID'; // ID +$_MODULE['<{creativeelements}prestashop>_882136c04720783972d2ba15cabb2533'] = 'Mostrar nombre'; // Display Name +$_MODULE['<{creativeelements}prestashop>_719c34f35eef4e53e7a8060f4ac1f5b0'] = 'Cumpleaños'; // Birthday +$_MODULE['<{creativeelements}prestashop>_cf8495c5e163a5edd0c194a344fa0458'] = 'Web'; // Website +$_MODULE['<{creativeelements}prestashop>_369ee98b6cc4c2ac77e0c4ed5665a33a'] = 'Desde'; // From +$_MODULE['<{creativeelements}prestashop>_a2933e922ff8e0247d44938b93e5bb6a'] = 'A'; // To +$_MODULE['<{creativeelements}prestashop>_ef69cf49bb993edf5f654dd21ff63f2a'] = 'Moneda'; // Currency +$_MODULE['<{creativeelements}prestashop>_0cac3b5a1b412862847fce41fc8978fe'] = 'Importe del precio'; // Price Amount +$_MODULE['<{creativeelements}prestashop>_71bd0d3f32c2c668811a52eedc3ee8fc'] = 'Precio entero'; // Price Integer +$_MODULE['<{creativeelements}prestashop>_c504cce3f32c095020e882875cb77d45'] = 'Decimales del precio'; // Price Decimals +$_MODULE['<{creativeelements}prestashop>_d456e04d06b851d54f7dd7782cd7f5a2'] = 'Importe regular'; // Regular Amount +$_MODULE['<{creativeelements}prestashop>_c3091d709b8b46ce1c89b9d2d7f3f3e1'] = 'Precio unitario'; // Unit Price + +$_MODULE['<{creativeelements}prestashop>_d9c0bd850f0d755afe4a2f87790926bc'] = 'Esta etiqueta no tiene ajustes.'; // This tag has no settings. +$_MODULE['<{creativeelements}prestashop>border_control_a5d7f2d1b78f9222563004a41a616334'] = 'Acanaladura'; // Groove +$_MODULE['<{creativeelements}prestashop>_db71f6e371eb7124134284e029343fbb'] = 'Ajustes de %s'; // %s Settings +$_MODULE['<{creativeelements}prestashop>_c9344eb2ff26e96823cc252a90f77de8'] = 'Imagen destacada'; // Featured Image +$_MODULE['<{creativeelements}prestashop>_442444e4a8a066e42bd056d71c649288'] = 'Estilo del cuerpo'; // Body Style +$_MODULE['<{creativeelements}prestashop>_0945359809dad1fbf3dea1c95a0da951'] = 'Documento'; // Document +$_MODULE['<{creativeelements}prestashop>_a130ecd03d333805829b11f98cc9c0f9'] = 'Acción no encontrada.'; // Action not found. +$_MODULE['<{creativeelements}prestashop>_da900198c1a7d78f57e400a23733c8bd'] = 'Entrada no encontrada.'; // Post not found. +$_MODULE['<{creativeelements}prestashop>_8a7e7afe17d1c9c4258d5f80e7b7d224'] = 'Token caducada.'; // Token Expired. +$_MODULE['<{creativeelements}prestashop>_b377dbdf3aeb55f9443947236db71ab3'] = 'Establece cuantas diapositivas se muestran por pase.'; // Set how many slides are scrolled per swipe. +$_MODULE['<{creativeelements}prestashop>_6cd988821d5e8796c47a32e453c95633'] = 'Nota: El adjunto fijo solo funciona en escritorio.'; // Note: Attachment Fixed works only on desktop. +$_MODULE['<{creativeelements}prestashop>_b1fce7d76fc2b85bb2203bed78d8514c'] = 'Acceso temprano a Google'; // Google Early Access +$_MODULE['<{creativeelements}prestashop>_b3ea5d4962bbcb423b6e3693d7a1ea9f'] = 'Error desconocido'; // Unknown Error +$_MODULE['<{creativeelements}prestashop>_ce71ffa436bfbe5fd6e1f8af2a0671eb'] = 'Se ha desactivado hasta que vuelvas a conectar.'; // Saving has been disabled until you’re reconnected. +$_MODULE['<{creativeelements}prestashop>_dd9742741ad6a068ce129e4fa97aa294'] = 'Error del servidor'; // Server Error +$_MODULE['<{creativeelements}prestashop>_89b5fd445acdad16cd2ee39330fd90bd'] = 'Conexión perdida'; // Connection Lost +$_MODULE['<{creativeelements}prestashop>_9d38dcdc957310dcaab2eda11f46c1f8'] = 'Hay un autoguardado de esta entrada que es más reciente que el de la versión de abajo. Puedes restaurar los datos guardados desde el panel de revisiones'; // There is an autosave of this post that is more recent than the version below. You can restore the saved data fron the Revisions panel +$_MODULE['<{creativeelements}prestashop>_c81c48c260d8fe33746bb88a06a31b40'] = 'Restaurar datos guardados automáticamente'; // Restore Auto Saved Data +$_MODULE['<{creativeelements}prestashop>_2bd339d85ee3b33e513359ce781b60cc'] = 'Restaurar'; // Restore +$_MODULE['<{creativeelements}prestashop>_5b008951213ac933cab550ae80b43529'] = 'Versión actual'; // Current Version +$_MODULE['<{creativeelements}prestashop>_95d126b737c78e8f8a4e00c0e0170c3a'] = 'Editar publicado'; // Edit Published +$_MODULE['<{creativeelements}prestashop>_9b97514a6cb123cccf70b60ae40f9c92'] = 'Editar borrador'; // Edit Draft +$_MODULE['<{creativeelements}prestashop>_94c7a492c400660d0ce730ceea7778a9'] = 'Cuando activas el modo privado YouTube no almacenará información sobre tus visitantes en tu web a menos que reproduzcan el vídeo.'; // When you turn on privacy mode, YouTube won't store information about visitors on your website unless they play the video. +$_MODULE['<{creativeelements}prestashop>_b8a6d142349b07242bf3d2ec60016c41'] = 'Modo privado'; // Privacy Mode +$_MODULE['<{creativeelements}prestashop>_cbdfcfddce72f99e436eca187f00b290'] = 'Introduce tu shortcode'; // Enter your shortcode +$_MODULE['<{creativeelements}prestashop>_b70b756df7f18d4fee17dd1d38bcc135'] = 'Introduce la leyenda de tu imagen'; // Enter your image caption +$_MODULE['<{creativeelements}prestashop>_16f6c60cf0b840982bc1f595ac1641cb'] = 'Introduce tu código'; // Enter your code +$_MODULE['<{creativeelements}prestashop>_2fcd87fc57c33e7fb8a1df657776f274'] = 'Añade aquí tu texto de cabecera'; // Add Your Heading Text Here +$_MODULE['<{creativeelements}prestashop>_1909e5c12b63e80afbedfe3a4f5c3363'] = 'Descartar alerta'; // Dismiss alert +$_MODULE['<{creativeelements}prestashop>_960fa36947fbb569380aba693b494feb'] = 'Introduce tu descripción'; // Enter your description +$_MODULE['<{creativeelements}prestashop>_92fb9e9788b3d8cad885c5fe16343c75'] = 'Esto es una alerta'; // This is an Alert +$_MODULE['<{creativeelements}prestashop>_cdbf49d6ac280f03cc7d24714bc42a4e'] = 'Icono activo'; // Active Icon +$_MODULE['<{creativeelements}prestashop>_f0a0314cf8e7c3ad6d977d5adacfeb0d'] = 'Editado por última vez el %1$s por %2$s'; // Last edited on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>_4fccea1707d00bf8926ebf0897e4a325'] = 'Borrador guardado el %1$s por %2$s'; // Draft saved on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>revision_date_format_b29ef0e5dad2e3b86cfa343482ce8e9c'] = 'j M, H:i'; // M j, H:i +$_MODULE['<{creativeelements}prestashop>_c8a59e7135a20b362f9c768b09454fdb'] = 'Descartar'; // Dismiss +$_MODULE['<{creativeelements}prestashop>_c829769966db94e5478e39391b995ac5'] = 'Ver todas las revisiones'; // View All Revisions +$_MODULE['<{creativeelements}prestashop>_70d4a329d37dc2df41466a420e983966'] = 'Echa un vistazo'; // Have a look +$_MODULE['<{creativeelements}prestashop>_2199472d685d3b90df180760ea665a71'] = 'Sigue editando'; // Keep Editing +$_MODULE['<{creativeelements}prestashop>_b1b95b84202450b35fd7afb914031d55'] = 'Esto es solo un borrador. Juega un poco y, cuando termines, haz clic en actualizar.'; // This is just a draft. Play around and when you're done - click update. +$_MODULE['<{creativeelements}prestashop>_57986647011dee008f9d492989a90fb1'] = '¡Hurra! Tu %s está en directo.'; // Hurray! Your %s is live. +$_MODULE['<{creativeelements}prestashop>_a4d3b161ce1309df1c4e25df28694b7b'] = 'Enviar'; // Submit +$_MODULE['<{creativeelements}prestashop>_06933067aafd48425d67bcb01bba5cb6'] = 'Actualizar'; // Update +$_MODULE['<{creativeelements}prestashop>_9b9d8a976b42e0bd66381797644943d5'] = 'Publicada'; // Published +$_MODULE['<{creativeelements}prestashop>_010f371ad222d36015d7ab70f3256160'] = 'Proceder de todos modos'; // Proceed Anyway +$_MODULE['<{creativeelements}prestashop>_1a7acf9e1a4485f55a6d75bcc40655e3'] = 'Tu navegador no es compatible con todas las características de edición de CreativeElements. Te recomendamos que cambies a otro navegador como Chrome o Firefox.'; // Your browser isn't compatible with all of Creative Elements' editing features. We recommend you switch to another browser like Chrome or Firefox. +$_MODULE['<{creativeelements}prestashop>_0c6f349a95f4864d65730cad900e3551'] = 'Tu navegador no es compatible'; // Your browser isn't compatible +$_MODULE['<{creativeelements}prestashop>_c12f59e844e6d839ba6ee4cd26e8ea27'] = 'Ningún resultado'; // No Results Found +$_MODULE['<{creativeelements}prestashop>_f12a625ade1d1349f8d760c137d2e4b8'] = 'Por favor, asegúrate de teclear correctamente tu búsqueda o prueba con palabras diferentes.'; // Please make sure your search is spelled correctly or try a different words. +$_MODULE['<{creativeelements}prestashop>_f44c3ec59688f8173b34c08b1ad961b2'] = 'Sin plantillas favoritas'; // No Favorite Templates +$_MODULE['<{creativeelements}prestashop>_081a48a2a1f0eee4b209bcdaf54803c0'] = 'Puedes marcar cada plantilla prediseñada como favorita.'; // You can mark any pre-designed template as a favorite. +$_MODULE['<{creativeelements}prestashop>_fb4fb9b2615dddca1a6cda5ecdfb47c0'] = 'Importar ajustes del documento'; // Import Document Settings +$_MODULE['<{creativeelements}prestashop>_6083cfeb84f702b582e655b5f4168579'] = 'Mostrar panel'; // Show Panel +$_MODULE['<{creativeelements}prestashop>_b95d3d403307efa40962df363734e941'] = 'Ajustes del módulo'; // Module Settings +$_MODULE['<{creativeelements}prestashop>_1aa14e9f377b528b5537d70fbd35c6a2'] = 'Elige el archivo'; // Select File +$_MODULE['<{creativeelements}prestashop>_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'o'; // or +$_MODULE['<{creativeelements}prestashop>_1a10f6476e54db68548305a69fdcec09'] = 'Arrastra y suelta tu archivo de plantilla .JSON o .zip'; // Drag & drop your .JSON or .zip template file +$_MODULE['<{creativeelements}prestashop>_4a66d51c9716349085fc7ea77edfe5c5'] = 'Importar plantilla a tu biblioteca'; // Import Template to Your Library +$_MODULE['<{creativeelements}prestashop>_936ccdb97115e9f35a11d35e3d5b5cad'] = 'Haz clic aquí'; // Click here +$_MODULE['<{creativeelements}prestashop>_89ba5a0cd9537dd0cd44a3ece29b877a'] = '¿Quieres aprender más sobre la biblioteca de Creative Elements?'; // Want to learn more about the Elementor library? +$_MODULE['<{creativeelements}prestashop>_01165dcf77c191e6c69b31d98b0ec6ff'] = 'Favorita'; // Favorite +$_MODULE['<{creativeelements}prestashop>_52fc7a0ab6328f8aaabb6ef411816b9e'] = 'Fecha de creación'; // Creation Date +$_MODULE['<{creativeelements}prestashop>_7b1255f8fdd0cb8751baee55621164e1'] = 'Creada por'; // Created By +$_MODULE['<{creativeelements}prestashop>_13348442cc6a27032d2b4aa28b75a5d3'] = 'Buscar'; // Search +$_MODULE['<{creativeelements}prestashop>_f2c3119ccf960f54688bf6f227390e36'] = 'Mis favoritas'; // My Favorites +$_MODULE['<{creativeelements}prestashop>_2cc1943d4c0b46bfcf503a75c44f988b'] = 'Populares'; // Popular +$_MODULE['<{creativeelements}prestashop>_349d789f5d11f630c282f547b568d08d'] = 'Tendencias'; // Trend +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Nueva'; // New +$_MODULE['<{creativeelements}prestashop>_a0415b5ba0373565c33828715bba8c8d'] = 'Importar plantilla'; // Import Template +$_MODULE['<{creativeelements}prestashop>_1063e38cb53d94d386f21227fcd84717'] = 'Eliminar'; // Remove +$_MODULE['<{creativeelements}prestashop>_ed75712b0eb1913c28a3872731ffd48d'] = 'Duplicar'; // Duplicate +$_MODULE['<{creativeelements}prestashop>_9c4d6fcf53fc6c3ad770fed0e57ccc49'] = 'Arrastrar y soltar'; // Drag & Drop +$_MODULE['<{creativeelements}prestashop>_bf16d61e5b485458fa158bfb5584befc'] = 'Ocultar panel'; // Hide Panel +$_MODULE['<{creativeelements}prestashop>_0bec922eda645e0ac505d942505b9be9'] = 'Guardar como plantilla'; // Save as Template +$_MODULE['<{creativeelements}prestashop>_5778e182c50cbba1d86e14690c8aa35c'] = 'Guardar borrador'; // Save Draft +$_MODULE['<{creativeelements}prestashop>_23183cd144a4dcc5a599a4b6506f7154'] = 'Guardar opciones'; // Save Options +$_MODULE['<{creativeelements}prestashop>_110a4b01beabd53b661a47d4b44bd7a8'] = 'Publicar'; // Publish +$_MODULE['<{creativeelements}prestashop>_b2e886db4593c5ddc8e369f34d3744f3'] = 'Previsualizar cambios'; // Preview Changes +$_MODULE['<{creativeelements}prestashop>_82815a6312a1e5a2ffafff6f1734df30'] = 'Salir a Back-office'; // Exit to Back-office +$_MODULE['<{creativeelements}prestashop>_4bda311edbaa9e54025c057c6c102fba'] = 'Buscar widget:'; // Search Widget: +$_MODULE['<{creativeelements}prestashop>_b0d066425fa39974fe45240b33bbfacb'] = 'Volver a valores por defecto'; // Back to default +$_MODULE['<{creativeelements}prestashop>typography_control_46e52f6310c224aa5846b3a5a5b1c6fe'] = 'Tachado'; // Line Through +$_MODULE['<{creativeelements}prestashop>typography_control_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Línea superior'; // Overline +$_MODULE['<{creativeelements}prestashop>typography_control_852721aa5fc738dfedff2945d71da439'] = 'Subrayado'; // Underline +$_MODULE['<{creativeelements}prestashop>typography_control_24365794120e03b807acbd05c0a48db9'] = 'Decoración'; // Decoration +$_MODULE['<{creativeelements}prestashop>_ff0a58d7006cd437862608b39e9cc7fe'] = 'Valores sin enlazar'; // Unlinked values +$_MODULE['<{creativeelements}prestashop>_6ca8bf4766b9dc7b1ea8b69562faac3f'] = 'Extracto'; // Excerpt +$_MODULE['<{creativeelements}prestashop>_652122103181aa2752efaecab300edf0'] = 'Acceso denegado.'; // Access denied. +$_MODULE['<{creativeelements}prestashop>_87557f11575c0ad78e4e28abedc13b6e'] = 'Fin'; // End +$_MODULE['<{creativeelements}prestashop>_a6122a65eaa676f700ae68d393054a37'] = 'Inicio'; // Start +$_MODULE['<{creativeelements}prestashop>_cf85e0aa6dbff8e1237bc70f6a1da1b2'] = 'Teclea aquí'; // Type Here +$_MODULE['<{creativeelements}prestashop>_289e1087105787353c5bae37c7982aa8'] = 'Recargar página'; // Reload Page +$_MODULE['<{creativeelements}prestashop>_f9636eccbb10d99e4aabfefe4ebfe479'] = 'Tu sesión ha caducado. Por favor, recarga la página para seguir editando.'; // Your session has expired. Please reload the page to continue editing. +$_MODULE['<{creativeelements}prestashop>_c85a251cc457840f1e032f1b733e9398'] = 'Tiempo límite'; // Timeout +$_MODULE['<{creativeelements}prestashop>_57b4c0031bc5c78e49d0a7e568115ff1'] = 'Lo sentimos, pero algo fue mal. Haz clic en "Aprender más" y sigue cada uno de los pasos para resolverlo rápidamente.'; // We're sorry, but something went wrong. Click on 'Learn more' and follow each of the steps to quickly solve it. +$_MODULE['<{creativeelements}prestashop>_fab4cde10ae2ec07bdee32a6749a3e7c'] = 'No se pudo cargar la vista previa'; // The preview could not be loaded +$_MODULE['<{creativeelements}prestashop>_26342c8741f7cf60f979e91ad570b291'] = 'Colores por defecto'; // Default Colors +$_MODULE['<{creativeelements}prestashop>_b2f5eb6ce3e6e97e89ec594c52ba48c1'] = 'Valor desconocido'; // Unknown Value +$_MODULE['<{creativeelements}prestashop>_351683969bd504e253fb05ef9b542bc8'] = 'Una vez que empieces a trabajar podrás deshacer / rehacer cualquier acción que realices en el editor.'; // Once you start working, you'll be able to redo / undo any action you make in the editor. +$_MODULE['<{creativeelements}prestashop>_abb565ed2df80ae405ca35167910924d'] = 'Aún sin historial'; // No History Yet +$_MODULE['<{creativeelements}prestashop>_8d7eb55a18265b4dc59ea4f896e7c1ed'] = 'Cambiar a la pestaña de revisiones para las versiones anteriores'; // Switch to Revisions tab for older versions +$_MODULE['<{creativeelements}prestashop>_fd88b11cfde6aa5e3c7ff0553b534885'] = 'Revisiones'; // Revisions +$_MODULE['<{creativeelements}prestashop>_06df33001c1d7187fdd81ea1f5b277aa'] = 'Acciones'; // Actions +$_MODULE['<{creativeelements}prestashop>_95bfdefaaf01553cbf21ccd942855c69'] = 'Movidas'; // Moved +$_MODULE['<{creativeelements}prestashop>_f29ddbfb905eb2593fdcdfb243f9af85'] = 'Añadidas'; // Added +$_MODULE['<{creativeelements}prestashop>_5b6cf869265c13af8566f192b4ab3d2a'] = 'Documentación'; // Documentation +$_MODULE['<{creativeelements}prestashop>_16d2b386b2034b9488996466aaae0b57'] = 'Historial'; // History +$_MODULE['<{creativeelements}prestashop>_bf59b07aded13165bea058e8f636a308'] = 'Color al pasar el cursor por la UI'; // UI Hover Color +$_MODULE['<{creativeelements}prestashop>_ead9ed73aace2253b77e3455b2105ea3'] = 'Color de la UI'; // UI Color +$_MODULE['<{creativeelements}prestashop>_67ed6ddb7d890b23166c1bef771e9451'] = 'Editada'; // Edited +$_MODULE['<{creativeelements}prestashop>_01a94df3c831063bf2b04d9c09e2b972'] = 'Edición iniciada'; // Editing Started +$_MODULE['<{creativeelements}prestashop>text_shadow_control_3f39588bb19e28051d9aedfbb170025c'] = 'Sombra'; // Shadow +$_MODULE['<{creativeelements}prestashop>_00cd7be4cb21c59179316d7844a8cfc4'] = 'Silenciar'; // Mute +$_MODULE['<{creativeelements}prestashop>_03ea6664bd8bb744fadc253f84bf32d5'] = 'Elige un archivo JSON de plantilla o un archivo .zip de plantillas y añádelo a la lista de plantillas disponibles en tu biblioteca.'; // Choose a JSON template file or a .zip archive of templates, and add them to the list of templates available in your library. +$_MODULE['<{creativeelements}prestashop>text_shadow_control_86e470e0e13bcfec3b2e102c167fe223'] = 'Sombra de texto'; // Text Shadow +$_MODULE['<{creativeelements}prestashop>_a889e4cafb176aebf2d32a9037cbb227'] = 'Activar en el editor'; // Enable In Editor +$_MODULE['<{creativeelements}prestashop>_a97cc615f64c36e0f7cb6ea6e94c948d'] = 'Abre todas las imágenes en una ventana emergente de mesa de luz. La mesa de luz funcionará automáticamente en cualquier enlace que lleve a un archivo de imagen.'; // Open all image links in a lightbox popup window. The lightbox will automatically work on any link that leads to an image file. +$_MODULE['<{creativeelements}prestashop>_060e9cb662a63ad93391971af1ced41e'] = 'Mesa de luz de imágenes'; // Image Lightbox +$_MODULE['<{creativeelements}prestashop>_9a51a007b33a46e553def6423aad8648'] = 'Ajustes globales'; // Global Settings +$_MODULE['<{creativeelements}prestashop>_d727e004d42165085a9b12a006cf31fc'] = 'Establece el espacio por defecto entre widgets (por defecto: 20)'; // Sets the default space between widgets (Default: 20) +$_MODULE['<{creativeelements}prestashop>_83473b478b2b3b5ece5200f5f60cb055'] = 'Retardo de la animación'; // Animation Delay +$_MODULE['<{creativeelements}prestashop>_c626b471f89bc0c52d34a3a3f7df35c5'] = 'Z-Index'; // Z-Index +$_MODULE['<{creativeelements}prestashop>_a585b417342e2b83baa9e0c91631b635'] = 'Duración de la transición'; // Transition Duration +$_MODULE['<{creativeelements}prestashop>_155731c389e7798846fc9daeb3d4872a'] = 'Retraso de transición'; // Transition Delay +$_MODULE['<{creativeelements}prestashop>_f5b67dd021f56100a6ea99169a67bf5e'] = 'Espacio entre widgets'; // Widgets Space +$_MODULE['<{creativeelements}prestashop>_b95c09fb28e80cc672fd533a62252d70'] = 'Añadir %s'; // Add %s +$_MODULE['<{creativeelements}prestashop>_b289b32a5fe99e0c7e9369e56f19700d'] = '¡Atención! Al importar se pueden sobrescribir ajustes previos.'; // Attention: Importing may override previous settings. +$_MODULE['<{creativeelements}prestashop>_b3f82cf76f55546dc898d561c847b5d9'] = '¿También quieres importar los ajustes de página de la plantilla?'; // Do you want to also import the document settings of the template? +$_MODULE['<{creativeelements}prestashop>_ebbb5896554d13cc4f2e46a9e44eb51e'] = 'Añadir nofollow'; // Add nofollow +$_MODULE['<{creativeelements}prestashop>_2959ce8aed67d6b6e6f5cefd601f1091'] = 'Abrir en nueva ventana'; // Open in new window +$_MODULE['<{creativeelements}prestashop>_0fb7010ec16c91ec543a440daab8917b'] = 'Opciones del enlace'; // Link Options +$_MODULE['<{creativeelements}prestashop>box_shadow_control_606b51cc1c9d0b4af394419a22f2ff1f'] = 'Contorno'; // Outline +$_MODULE['<{creativeelements}prestashop>box_shadow_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Posición'; // Position +$_MODULE['<{creativeelements}prestashop>_7dfa8bf72c98a7c1927d689cdbc49ce1'] = 'Editar %s'; // Edit %s +$_MODULE['<{creativeelements}prestashop>_39a33ab3ae10c15b5c60328b23512713'] = 'Borrar %s'; // Remove %s +$_MODULE['<{creativeelements}prestashop>_60b3911c3a666b23f2579c62a6416542'] = 'Duplicar %s'; // Duplicate %s +$_MODULE['<{creativeelements}prestashop>_6ed562a0d4381eef12d92c87520f3208'] = 'Widget'; // Widget +$_MODULE['<{creativeelements}prestashop>_ec53a8c4f07baed5d8825072c89799be'] = 'Estado'; // Status +$_MODULE['<{creativeelements}prestashop>_d511f8439ecde36647437fbba67a4394'] = 'Espacio'; // Space +$_MODULE['<{creativeelements}prestashop>_cc74161b4d0042cb69688fc031335b36'] = 'Bloqueo mayúsculas'; // Drop Cap +$_MODULE['<{creativeelements}prestashop>_91ba387c0204e8d0bdfa4e589f850606'] = 'Selector de título de página'; // Page Title Selector +$_MODULE['<{creativeelements}prestashop>_c39aca79ca3cc4558a313f65528a47a7'] = 'Pegar estilo'; // Paste Style +$_MODULE['<{creativeelements}prestashop>_278c491bdd8a53618c149c4ac790da34'] = 'Plantilla'; // Template +$_MODULE['<{creativeelements}prestashop>_4dcd94eeeaad2b446cdea3c97f67c974'] = '¿No funciona? Puedes elegir un selector distingo para el título en la página de ajustes.'; // Not working? You can set a different selector for the title in the Settings page. +$_MODULE['<{creativeelements}prestashop>_d38fd78cc216991579c255174909bd73'] = 'Esconder Título'; // Hide Title +$_MODULE['<{creativeelements}prestashop>_7e5d6ab43f675667c7109ecd0ea8dabf'] = 'Traer al frente'; // Bring to Front +$_MODULE['<{creativeelements}prestashop>_ee08ead15605dc63a2ad3357d04f5838'] = 'Mesa de luz'; // Lightbox +$_MODULE['<{creativeelements}prestashop>_5a2cafc2b0fdf3e5242d40a878db7129'] = 'Espacio intermedio'; // Space Between +$_MODULE['<{creativeelements}prestashop>_4ee29ca12c7d126654bd0e5275de6135'] = 'Lista'; // List +$_MODULE['<{creativeelements}prestashop>shapes_2b1f94ef23b79bf90eb891cae1df7a90'] = 'Libro'; // Book +$_MODULE['<{creativeelements}prestashop>shapes_8a9e64d86ed12ad40de129bc7f4683b2'] = 'Separador'; // Split +$_MODULE['<{creativeelements}prestashop>shapes_0f4e1aaabd074689b7d3ead824d1ee8e'] = 'Flecha'; // Arrow +$_MODULE['<{creativeelements}prestashop>shapes_2c7642ce7af68f37ad5f82153ec30f2b'] = 'Patrón de olas'; // Waves Pattern +$_MODULE['<{creativeelements}prestashop>shapes_a609a9143e96c90080bddddb3305284f'] = 'Cepillo de olas'; // Waves Brush +$_MODULE['<{creativeelements}prestashop>shapes_a4b44939aabfe8df39b1ecf05fa95c0a'] = 'Olas'; // Waves +$_MODULE['<{creativeelements}prestashop>shapes_62d331ed3fa84befe1b7b3a45fe3c630'] = 'Curva asimétrica'; // Curve Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_2cb4d4a3f8dacd623fa045a44febd476'] = 'Curva'; // Curve +$_MODULE['<{creativeelements}prestashop>shapes_8af1e1ff4512e7d258e9b8ea8e9b48ef'] = 'Opacidad de abanico'; // Fan Opacity +$_MODULE['<{creativeelements}prestashop>shapes_253761d8ff1b6655697cb0d9962d2537'] = 'Opacidad de inclinación'; // Tilt Opacity +$_MODULE['<{creativeelements}prestashop>shapes_686319a93c35facda5c3da08875fb394'] = 'Inclinación'; // Tilt +$_MODULE['<{creativeelements}prestashop>shapes_bef629014564e9ece50fad279b2ab211'] = 'Triángulo asimétrico'; // Triangle Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_5e5500cb2b82eb72d550de644bd1b64b'] = 'Triángulo'; // Triangle +$_MODULE['<{creativeelements}prestashop>shapes_ff8e3e7230eb6da5eb9df66861459010'] = 'Pirámides'; // Pyramids +$_MODULE['<{creativeelements}prestashop>shapes_4fae8be981bd327f1302f4b678afe734'] = 'Zig zag'; // Zigzag +$_MODULE['<{creativeelements}prestashop>shapes_4a8f72b777dc9735afaebac72822c77e'] = 'Nubes'; // Clouds +$_MODULE['<{creativeelements}prestashop>shapes_08fb41620aa4c498a1f2ef09bbc1183c'] = 'Gotas'; // Drops +$_MODULE['<{creativeelements}prestashop>shapes_8e8c2adc91106422362ffd9b8b44e9a2'] = 'Montañas'; // Mountains +$_MODULE['<{creativeelements}prestashop>_9b8958acb7be504bb5f55f17c0eea366'] = 'Invertir'; // Invert +$_MODULE['<{creativeelements}prestashop>_9ffbd422925a6839ee820ddbc59278c5'] = 'Dar la vuelta'; // Flip +$_MODULE['<{creativeelements}prestashop>_3dd971eb0a2385db4f30e71a456daf8a'] = 'Forma del divisor'; // Shape Divider +$_MODULE['<{creativeelements}prestashop>_48686859ede3505d93db63bedafb649e'] = 'Nota : Los siguientes colores no funcionan si los colores globales está activos.'; // Note: The following colors won't work if Default Colors are enabled. +$_MODULE['<{creativeelements}prestashop>_7d11089c148e5d9b9e686b62454a491e'] = 'Ancho de navegación'; // Navigation Width +$_MODULE['<{creativeelements}prestashop>_eee0168be69b854c20621fc6f01cc3fc'] = 'Encima'; // Hover +$_MODULE['<{creativeelements}prestashop>_d55b3ffa9fc8021e934158ca07e2770e'] = 'Añade tu id personalizado SIN el símbolo de la almohadilla (#). Ej.: my-id'; // Add your custom id WITHOUT the Pound key. e.g: my-id +$_MODULE['<{creativeelements}prestashop>_7b366044b5cb5aad6cc2fabb977c8534'] = 'ID de CSS'; // CSS ID +$_MODULE['<{creativeelements}prestashop>background_control_45f4ce6c3306644b1efe333f4f8d6929'] = 'Ángulo'; // Angle +$_MODULE['<{creativeelements}prestashop>background_control_fdc32a55217f1ca054f1f2b51ef4f6ec'] = 'Radial'; // Radial +$_MODULE['<{creativeelements}prestashop>background_control_32a843da6ea40ab3b17a3421ccdf671b'] = 'Lineal'; // Linear +$_MODULE['<{creativeelements}prestashop>background_control_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Tipo'; // Type +$_MODULE['<{creativeelements}prestashop>background_control_d9eb9d6792d85c5d2433902a63116ad5'] = 'Color secundario'; // Second Color +$_MODULE['<{creativeelements}prestashop>background_control_ce5bf551379459c1c61d2a204061c455'] = 'Ubicación'; // Location +$_MODULE['<{creativeelements}prestashop>background_control_5e59525cb7d1d1cd93be0b9f36e9d09a'] = 'Degradado'; // Gradient +$_MODULE['<{creativeelements}prestashop>_512fec27328fb722291cf6ecf36fa913'] = 'Las URLs `de` y `a` deben ser diferentes'; // The `from` and `to` URL's must be different +$_MODULE['<{creativeelements}prestashop>_d2b49c98219ccb89d57a87f2a0a4b4c2'] = 'Las URLs `de` y `a` deben ser válidas'; // The `from` and `to` URL's must be valid URL's +$_MODULE['<{creativeelements}prestashop>_2b3a87fb1d58406bd4b58eeb2af2f23c'] = 'No puedes borrar esta revisión.'; // Cannot delete this revision. +$_MODULE['<{creativeelements}prestashop>_ee9d01da1e865af1b559fa7c8c047555'] = 'hace %1$s (%2$s)'; // %1$s ago (%2$s) +$_MODULE['<{creativeelements}prestashop>revision_date_format_bd8abeec6fc85d0fa0846a78ef6554b8'] = 'M j @ H:i'; // M j @ H:i +$_MODULE['<{creativeelements}prestashop>_0cc5d0ddd0ea34a8490e6e7fdb2cf924'] = 'Autoguardado'; // Autosave +$_MODULE['<{creativeelements}prestashop>_32c676ac5296556c0573a301ef5ab07b'] = 'Revisión'; // Revision +$_MODULE['<{creativeelements}prestashop>_3fb0206d178d45a9b3542587483d4cd2'] = 'Parece que no está disponible en tu sitio la funcionalidad de revisión de entradas.'; // It looks like the post revision feature is unavailable in your website. +$_MODULE['<{creativeelements}prestashop>_3c4f26f0975793eb27edab314f670410'] = 'Comienza a diseñar tu página y serás capaz de ver el histórico completo de revisiones aquí.'; // Start designing your page and you'll be able to see the entire revision history here. +$_MODULE['<{creativeelements}prestashop>_b8c4a80d0eda1423acdda2bd6680be78'] = 'El histórico de revisiones te permitir guardar las versiones previas de tu trabajo, y recuperarlas cuando quieras.'; // Revision history lets you save your previous versions of your work, and restore them any time. +$_MODULE['<{creativeelements}prestashop>_53e5aa2c97fef1555d2511de8218c544'] = 'Por'; // By +$_MODULE['<{creativeelements}prestashop>_585823316b8534dcef7df30ebeab9951'] = 'No hay revisiones guardadas todavía'; // No Revisions Saved Yet +$_MODULE['<{creativeelements}prestashop>_cf82b977e27ef9ac33709a3effde83a2'] = 'Separador de miles'; // Thousand Separator +$_MODULE['<{creativeelements}prestashop>background_control_7a1920d61156abc05a60135aefe8bc67'] = 'Por defecto'; // Default +$_MODULE['<{creativeelements}prestashop>_6579fbb112744c89b2c74f479df5f94b'] = 'El CSS personalizado te permite añadir código CSS a cualquier widget, y ver su resultado en vivo a la derecha en el editor.'; // Custom CSS lets you add CSS code to any widget, and see it render live right in the editor. +$_MODULE['<{creativeelements}prestashop>_42e6feb7f76e910efcda54034ecc83ce'] = 'CSS personalizado'; // Custom CSS +$_MODULE['<{creativeelements}prestashop>_525e4cfb0dd9f1b84d6018feff823cfe'] = 'Con esta funcionalidad, puedes guardar un widget a nivel global, y después añadirlo en múltiples areas. Todas las areas serán editables desde un único lugar.'; // With this feature, you can save a widget as global, then add it to multiple areas. All areas will be editable from one single place. +$_MODULE['<{creativeelements}prestashop>_d15305d7a4e34e02489c74a5ef542f36'] = 'Desactivado'; // Off +$_MODULE['<{creativeelements}prestashop>_521c36a31c2762741cf0f8890cbe05e3'] = 'Activado'; // On +$_MODULE['<{creativeelements}prestashop>_5d4d8771b47d6c5166952822e552f082'] = 'Extra grande'; // Extra Large +$_MODULE['<{creativeelements}prestashop>_581a3d012fd82e4905a9fe0db3b37bfe'] = 'Extra pequeño'; // Extra Small +$_MODULE['<{creativeelements}prestashop>_52293f13937b8aed21da15967dad191a'] = 'Datos no válidos: El ID de la plantilla no puede ser el mismo que el de la plantilla que se está editando. Por favor, elige uno diferente.'; // Invalid Data: The Template ID cannot be the same as the currently edited template. Please choose a different one. +$_MODULE['<{creativeelements}prestashop>_9313566fe19aca293daefe4ce37942bf'] = 'Diseño'; // Skin +$_MODULE['<{creativeelements}prestashop>_3c1065e0c6f9907043f41d333a91b80e'] = 'Elija los colores que aparecen en el selector del editor de colores. Esto hace que el acceso a los colores que elija para el sitio sea mucho más fácil.'; // Choose which colors appear in the editor's color picker. This makes accessing the colors you chose for the site much easier. +$_MODULE['<{creativeelements}prestashop>_280123f6890e1c72895353373d2caf09'] = 'Orden descendente'; // Descending order +$_MODULE['<{creativeelements}prestashop>_a4f0054ae4e726280b463caec716d1e9'] = 'Orden ascendeente'; // Ascending order +$_MODULE['<{creativeelements}prestashop>_22f41f72bb164a942b3320ad48914c00'] = '¡Atención! Vamos a ELIMINAR TODO EL CONTENIDO de esta página. ¿Estás seguro de que quieres hacer eso?'; // Attention: We are going to DELETE ALL CONTENT from this page. Are you sure you want to do that? +$_MODULE['<{creativeelements}prestashop>_e0ec11596b5e9fec2ae608c59800cebe'] = 'Eliminar todo el contenido'; // Delete All Content +$_MODULE['<{creativeelements}prestashop>_7ffb0536a7eb8a1924bc8cddd5ebd992'] = '%s está desactivado'; // %s are disabled +$_MODULE['<{creativeelements}prestashop>_c6f6c095c286b1f7a30b3366e22ef17f'] = 'Actualizar los cambios en la página'; // Update changes to page +$_MODULE['<{creativeelements}prestashop>_55fb1b11cc3dbb67782af12731c07206'] = 'Selector de color'; // Color Picker +$_MODULE['<{creativeelements}prestashop>_bad32986401d36fef61ae1ea7d8c6c4b'] = 'Introduce el selector de elementos superior al que se ajustarán las secciones para que encajen a (p.ej. #primary / .wrapper / main etc). Déjalo en blanco para que se adapte al ancho de página.'; // Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width. +$_MODULE['<{creativeelements}prestashop>_b844b7c80a87be2619f6876933b07aea'] = 'Extender hasta ajustar sección'; // Stretched Section Fit To +$_MODULE['<{creativeelements}prestashop>_e1e75c2b4e63835910c8aee262af0d02'] = 'Establece el ancho predeterminado del área de contenido (por defecto: 1140)'; // Sets the default width of the content area (Default: 1140) +$_MODULE['<{creativeelements}prestashop>_b7b6baa53f2fedf6c3b60e0327c95a2f'] = 'Sección con pestañas'; // Tabbed Section +$_MODULE['<{creativeelements}prestashop>_fbfd467e50aef807cbdabd58a86621d3'] = 'Barra de pestañas'; // Tab Bar +$_MODULE['<{creativeelements}prestashop>_8c5751b7fdbcb82b348c2e5ad90b3183'] = 'Desbordamiento de desplazamiento'; // Overflow Scrolling +$_MODULE['<{creativeelements}prestashop>_7bafc2154ab2b900bbb572c80ba6c423'] = 'Extender la sección a todo el ancho de la página utilizando JS.'; // Stretch the section to the full width of the page using JS. +$_MODULE['<{creativeelements}prestashop>_442a913f95b8efa0a564f8acd5953752'] = 'Extender la sección'; // Stretch Section +$_MODULE['<{creativeelements}prestashop>_d87d1f34e54b9466c18bca47e34b0c37'] = 'Esta imagen de cubierta reemplazará el video de fondo en dispositivos móviles y tabletas.'; // This cover image will replace the background video on mobile and tablet devices. +$_MODULE['<{creativeelements}prestashop>_7a007d6bcd82bb60a6d3e4d45dc61eb4'] = 'Columnas invertidas'; // Reverse Columns +$_MODULE['<{creativeelements}prestashop>_87d17f4624a514e81dc7c8e016a7405c'] = 'Móvil'; // Mobile +$_MODULE['<{creativeelements}prestashop>_aba47e8f90c4d9395507038e9215582f'] = 'Vista predeterminada'; // Default Preview +$_MODULE['<{creativeelements}prestashop>_bc30b765dbe7cfa8d8cfa4184af2c620'] = 'Vincular juntos los valores'; // Link values together +$_MODULE['<{creativeelements}prestashop>_6feadb455c64759731e453380c52fbd9'] = 'Shortcode'; // Shortcode +$_MODULE['<{creativeelements}prestashop>_f8508f576cd3f742dfc268258dcdf0dd'] = 'Remoto'; // Remote +$_MODULE['<{creativeelements}prestashop>_b9709e1b50c06ed39df03fa0b90d40ab'] = 'Importar ahora'; // Import Now +$_MODULE['<{creativeelements}prestashop>_fcbad5f8e00955d4129fe79370802ff1'] = 'Importar plantillas'; // Import Templates +$_MODULE['<{creativeelements}prestashop>_e153ba109d2d09abb855127d99ed6f25'] = 'Exportar plantilla'; // Export Template +$_MODULE['<{creativeelements}prestashop>_2e46eab92bf73b409799a8baaa13f8f2'] = '(sin título)'; // (no title) +$_MODULE['<{creativeelements}prestashop>template_library_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Tipo'; // Type +$_MODULE['<{creativeelements}prestashop>template_library_c7ae4d8246472b41edae4e734cc323aa'] = 'No hay plantillas en la papelera'; // No Templates found in Trash +$_MODULE['<{creativeelements}prestashop>template_library_6d9743b85d09a6bc07b10c70ef974687'] = 'No hay plantillas '; // No Templates found +$_MODULE['<{creativeelements}prestashop>template_library_0e74beca97e711d51cf7a12165d583b7'] = 'Buscar plantilla'; // Search Template +$_MODULE['<{creativeelements}prestashop>template_library_842adbd6cb91017b2ff5a1d89bd7c54f'] = 'Ver plantilla'; // View Template +$_MODULE['<{creativeelements}prestashop>template_library_b9e1606876afab10e75fb80740c860a0'] = 'Todas las plantillas'; // All Templates +$_MODULE['<{creativeelements}prestashop>template_library_01c91564910069ffcc8f67ecb2180d38'] = 'Nueva plantilla'; // New Template +$_MODULE['<{creativeelements}prestashop>template_library_e838b63505c498050eccbcd6090a8262'] = 'Editar plantilla'; // Edit Template +$_MODULE['<{creativeelements}prestashop>template_library_5a6eb418df400f68052e7725cdc1170a'] = 'Añadir nueva plantilla'; // Add New Template +$_MODULE['<{creativeelements}prestashop>template_library_de9ced9bf5e9829de4a93ad8c9d7a170'] = 'Añadir nueva'; // Add New +$_MODULE['<{creativeelements}prestashop>template_library_278c491bdd8a53618c149c4ac790da34'] = 'Plantilla'; // Template +$_MODULE['<{creativeelements}prestashop>_509820290d57f333403f490dde7316f4'] = 'Local'; // Local +$_MODULE['<{creativeelements}prestashop>_917d94376951e7a0fd3d30a655a12f2e'] = 'Sincronizar la biblioteca'; // Sync Library +$_MODULE['<{creativeelements}prestashop>_3da44b906269817f50ef58ea29f5f38d'] = '¿Estás seguro que quieres borrar esta plantilla?'; // Are you sure you want to delete this template? +$_MODULE['<{creativeelements}prestashop>_12113ea41be8a8ac8ed3301094d4c007'] = 'Borrar plantilla'; // Delete Template +$_MODULE['<{creativeelements}prestashop>_193cfc9be3b995831c6af2fea6650e60'] = 'Página'; // Page +$_MODULE['<{creativeelements}prestashop>_64c2250bbf2bc80767d781cd19bb82af'] = 'Guarda tu %s en la biblioteca'; // Save Your %s to Library +$_MODULE['<{creativeelements}prestashop>_db10a1ce6ae80065018ce639ce2b8989'] = 'Ocurrió/eron el/los siguiente/s error/es al procesar la petición:'; // The following error(s) occurred while processing the request: +$_MODULE['<{creativeelements}prestashop>_a25c753ee3e4be15ec0daa5a40deb7b8'] = 'Se ha producido un error'; // An error occurred +$_MODULE['<{creativeelements}prestashop>_b10355bde8ffa109adfb72095166e87d'] = 'Aquí es donde deben estar las plantillas. Diséñalas. Guárdalas. Reutilízalas.'; // This is where your templates should be. Design it. Save it. Reuse it. +$_MODULE['<{creativeelements}prestashop>_9593b20ca67ef909af17be47183d93d2'] = '¿No has guardado aún tu plantilla?'; // Haven’t Saved Templates Yet? +$_MODULE['<{creativeelements}prestashop>_ad07bae09061eb7eadc703f182e8c889'] = 'Pon el nombre de la plantilla'; // Enter Template Name +$_MODULE['<{creativeelements}prestashop>_d51fd6071c560eaade2f7f5b326bb472'] = 'Tus diseños estarán disponibles para la exportación y la reutilización en cualquier página o sitio web'; // Your designs will be available for export and reuse on any page or website +$_MODULE['<{creativeelements}prestashop>_0095a9fa74d1713e43e370a7d7846224'] = 'Exportar'; // Export +$_MODULE['<{creativeelements}prestashop>_3e30a35f9c0c80e76e91b32e7a59a41c'] = '¡Estate atento! Habrá más plantillas muy pronto'; // Stay tuned! More awesome templates coming real soon. +$_MODULE['<{creativeelements}prestashop>_b8b8e9f67faf0bb214c1686c52166ec4'] = 'Regresar a la biblioteca'; // Back to Library +$_MODULE['<{creativeelements}prestashop>_a458be0f08b7e4ff3c0f633c100176c0'] = 'Insertar'; // Insert +$_MODULE['<{creativeelements}prestashop>_b9390195ecad3986568746a2a9b56354'] = 'Mis plantillas'; // My Templates +$_MODULE['<{creativeelements}prestashop>_4d70254b3a8e2bc38b6147fa6ee813be'] = 'Biblioteca'; // Library +$_MODULE['<{creativeelements}prestashop>_d3d2e617335f08df83599665eef8a418'] = 'Cerrar'; // Close +$_MODULE['<{creativeelements}prestashop>_31a9301fb39db9e093b3894b9eb582d1'] = 'Plantillas guardadas'; // Saved Templates +$_MODULE['<{creativeelements}prestashop>_45f474dd60a551d4bb0d346df55d1cc4'] = 'Biblioteca de plantillas'; // Template Library +$_MODULE['<{creativeelements}prestashop>_ec8c82009f9de01c14037e4b85106701'] = 'Elige tu estructura'; // Select your Structure +$_MODULE['<{creativeelements}prestashop>_e37f4fc0441c524ee5a89453f12178c8'] = 'Añadir plantilla'; // Add Template +$_MODULE['<{creativeelements}prestashop>_f5395c9793af8a11b406ca7c1ac70da9'] = 'Aprende más'; // Learn More +$_MODULE['<{creativeelements}prestashop>_9de70901d3562acdbec7f907c2ca62e7'] = 'Animación al pasar el ratón'; // Hover Animation +$_MODULE['<{creativeelements}prestashop>_d0799ce2e6e121f7d748fe60ca5ee142'] = 'Ajuste del objeto'; // Object Fit +$_MODULE['<{creativeelements}prestashop>_dc448aa55848e923ec2cc916305b6d2b'] = 'Impedir scroll'; // Prevent Scroll +$_MODULE['<{creativeelements}prestashop>_e16b5b7f26f54214445cbe38d72c2828'] = 'Rápido'; // Fast +$_MODULE['<{creativeelements}prestashop>_efa5397985b8609a5dbeb430a4bcadd3'] = 'Lento'; // Slow +$_MODULE['<{creativeelements}prestashop>_c78a3584ba81e0cd0ba8c29487e85d10'] = 'Fuentes predeterminadas'; // Default Fonts +$_MODULE['<{creativeelements}prestashop>_b201b2e7e7a20df48b625f20c2f0933e'] = 'Paletas de colores'; // Color Palettes +$_MODULE['<{creativeelements}prestashop>_373492f01889c61ff7d8bb91cf43d1bd'] = 'Animación de entrada'; // Entrance Animation +$_MODULE['<{creativeelements}prestashop>_f0153907b3a8a6ab6d24ebda1e079951'] = 'Puedes activarlo desde la página de ajustes de módulo.'; // You can enable it from the module settings page. +$_MODULE['<{creativeelements}prestashop>box_shadow_control_b56d315e49178ba86341ff3b4e337c6b'] = 'Recuadro'; // Inset +$_MODULE['<{creativeelements}prestashop>box_shadow_control_838389e9675a112e8187aa34a4f61709'] = 'Sombra de caja'; // Box Shadow +$_MODULE['<{creativeelements}prestashop>_06ce2a25e5d12c166a36f654dbea6012'] = 'Vertical'; // Vertical +$_MODULE['<{creativeelements}prestashop>_c1b5fa03ecdb95d4a45dd1c40b02527f'] = 'Horizontal'; // Horizontal +$_MODULE['<{creativeelements}prestashop>_180bc3b1c5619aaef40e803f49921012'] = 'Extender'; // Spread +$_MODULE['<{creativeelements}prestashop>_8b52de510bc5497ac43abfe566be48ab'] = 'Borroso'; // Blur +$_MODULE['<{creativeelements}prestashop>_a3d68d897c2e60e93783fe59e4da7ebf'] = 'Minientrada'; // Aside +$_MODULE['<{creativeelements}prestashop>_5289f1a930358cba4623a7234db5c71e'] = 'Recomendación'; // Testimonial +$_MODULE['<{creativeelements}prestashop>_30e624fbe7c9345f3cdb243bc2eeacfd'] = 'Color oficial'; // Official Color +$_MODULE['<{creativeelements}prestashop>_bef2481eda40bd121482f1814d72314f'] = 'Redondeado'; // Rounded +$_MODULE['<{creativeelements}prestashop>_786c4bcb88b15bd37b70d4b9d62ba324'] = 'Iconos sociales'; // Social Icons +$_MODULE['<{creativeelements}prestashop>_9769396cc39a68db5cb5ff02896596ea'] = 'Mis habilidades'; // My Skill +$_MODULE['<{creativeelements}prestashop>_3f761a65a378ebfdfc28741392606662'] = 'Botón descarga'; // Download Button +$_MODULE['<{creativeelements}prestashop>_b682e97ce55b3fbc9cc299c667cea845'] = 'Capa de fondo'; // Background Overlay +$_MODULE['<{creativeelements}prestashop>_f23578fcd2a868168854ab714e7de537'] = 'Extendido'; // Extended +$_MODULE['<{creativeelements}prestashop>_812a48ba719daeda82e4da8e812d426c'] = 'URL personalizada'; // Custom URL +$_MODULE['<{creativeelements}prestashop>_36bb6559696dc9124986ae120515984f'] = 'Pegar'; // Paste +$_MODULE['<{creativeelements}prestashop>_a9ded1e5ce5d75814730bb4caaf49419'] = 'Fondo'; // Background +$_MODULE['<{creativeelements}prestashop>_ec114b1e189d6c3044e5706e93682fa8'] = 'Más amplio'; // Wider +$_MODULE['<{creativeelements}prestashop>_0db377921f4ce762c62526131097968f'] = 'General'; // General +$_MODULE['<{creativeelements}prestashop>_737e6c4a46563dd9da1557b304178be1'] = 'Texto de introducción'; // Intro Byline +$_MODULE['<{creativeelements}prestashop>_627b24abf27e2d03d38537f84e81cb2e'] = 'Espaciado'; // Spacing +$_MODULE['<{creativeelements}prestashop>_76fbf0ccd7fcd64879c2ff2119dc15a4'] = 'Fuera'; // Outside +$_MODULE['<{creativeelements}prestashop>_9b6d3000134648fc9f1e71094ae0847d'] = 'Dentro'; // Inside +$_MODULE['<{creativeelements}prestashop>_02674a4ef33e11c879283629996c8ff8'] = 'Dirección'; // Direction +$_MODULE['<{creativeelements}prestashop>_a301fb6c9931e5b86a9b36a31b9c9e6d'] = 'Opciones adicionales'; // Additional Options +$_MODULE['<{creativeelements}prestashop>_6649c4b2e13734c911fbd45e025d9431'] = 'Flechas y puntos'; // Arrows and Dots +$_MODULE['<{creativeelements}prestashop>_b26ff651c2d7385db87fa44737402935'] = 'Ancho del borde izquierdo'; // Left Border Width +$_MODULE['<{creativeelements}prestashop>_c7f201c52862951afad2ae9802595286'] = 'Duración de la animación'; // Animation Duration +$_MODULE['<{creativeelements}prestashop>_17b04c58b2a994e2a115530681ca25e3'] = 'Estirar imagen'; // Image Stretch +$_MODULE['<{creativeelements}prestashop>_35773b27596fe91a749ddbf3e1257966'] = 'Carrusel de imágenes'; // Image Carousel +$_MODULE['<{creativeelements}prestashop>_0dc52fcd265149dd09a6d1f5b0e5a3b5'] = 'Velocidad de la animación'; // Animation Speed +$_MODULE['<{creativeelements}prestashop>_7b49a3eb804d134cdce5579121787fc3'] = 'Puedes cortar la imagen original a cualquier tamaño. También puedes colocar un valor para el alto y el ancho para mantener la proporción original.'; // You can crop the original image size to any custom size. You can also set a single value for height or width in order to keep the original size ratio. +$_MODULE['<{creativeelements}prestashop>_f9641a2d9ee9b7d52b4c15b7745c5ad6'] = 'Debe insertar la posición (hook) seleccionada en la plantilla actual, para que CreativeElements pueda funcionar en esta página.'; // You must insert the selected module position (hook) in the current template, in order for CreativeElements to work on this page. +$_MODULE['<{creativeelements}prestashop>_9e24be381f41ce80bb67674e03f7b83a'] = 'Lo sentimos, no se encontró el área de contenido en su página.'; // Sorry, the content area was not found in your page. +$_MODULE['<{creativeelements}prestashop>_8250b33e7828c54440743f11d36c2204'] = 'Colores de los controles'; // Controls Color +$_MODULE['<{creativeelements}prestashop>_87cd4e8df281e8565913cb1dee924173'] = 'Imagen de la introducción'; // Intro Portrait +$_MODULE['<{creativeelements}prestashop>_54f70e7001bba1a2f8b2c7394b7fbc65'] = 'Título de la introducción'; // Intro Title +$_MODULE['<{creativeelements}prestashop>_89d7b10cb4238977d2b523dfd9ea7745'] = 'Bucle'; // Loop +$_MODULE['<{creativeelements}prestashop>_4182f4b55a58f5a6a3e3ee9fdb9b6b88'] = 'Opciones del vídeo'; // Video Options +$_MODULE['<{creativeelements}prestashop>_34e2d1989a1dbf75cd631596133ee5ee'] = 'Vídeo'; // Video +$_MODULE['<{creativeelements}prestashop>_b9987a246a537f4fe86f1f2e3d10dbdb'] = 'Visualización'; // Display +$_MODULE['<{creativeelements}prestashop>_1779d23035f16bb6f8a0f548f1eaa6b9'] = 'Insertar medio'; // Insert Media +$_MODULE['<{creativeelements}prestashop>_849a0c92b921bb7fd3c9f4f6d197f89c'] = '%s imágenes seleccionadas'; // %s Images Selected +$_MODULE['<{creativeelements}prestashop>image_size_control_0e0613e1f93d33fba15773ba3ff6f56a'] = 'Dimensión de la imagen'; // Image Dimension +$_MODULE['<{creativeelements}prestashop>image_size_control_90589c47f06eb971d548591f23c285af'] = 'Personalizado'; // Custom +$_MODULE['<{creativeelements}prestashop>border_control_eb656e41b6da91494775ecf47a51da91'] = 'Líneas'; // Dashed +$_MODULE['<{creativeelements}prestashop>border_control_90c09393a4c0970bc9a6703ad527781c'] = 'Punteado'; // Dotted +$_MODULE['<{creativeelements}prestashop>border_control_d909d38d705ce75386dd86e611a82f5b'] = 'Doble'; // Double +$_MODULE['<{creativeelements}prestashop>border_control_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Sólido'; // Solid +$_MODULE['<{creativeelements}prestashop>_04e0385c10aefee8e4681617d2f3ef40'] = 'Desvanecido'; // Fade +$_MODULE['<{creativeelements}prestashop>_a62d22910732d5343689f5117999abfa'] = 'Efecto'; // Effect +$_MODULE['<{creativeelements}prestashop>image_size_control_bbd47109890259c0127154db1af26c75'] = 'Completo'; // Full +$_MODULE['<{creativeelements}prestashop>_d3eea2f5aca8f6254f0938b5e8a33506'] = 'Alineación vertical'; // Vertical Alignment +$_MODULE['<{creativeelements}prestashop>_431c060088b62effa79dd9c710d20b00'] = 'Bucle infinito'; // Infinite Loop +$_MODULE['<{creativeelements}prestashop>_4c72d232d1a1406e6c26251bbf6c3b25'] = 'Puntos'; // Dots +$_MODULE['<{creativeelements}prestashop>_8c38c6601843e340c9e290746e5f92cc'] = 'Restablecer estructura'; // Reset Structure +$_MODULE['<{creativeelements}prestashop>image_size_control_7d25feb59b8a44341084a00840d860d1'] = 'Tamaño de la imagen'; // Image Size +$_MODULE['<{creativeelements}prestashop>typography_control_6adf97f83acf6453d4a6a4b1070f3754'] = 'Ninguno'; // None +$_MODULE['<{creativeelements}prestashop>_59a1c1ca0188302c39e06c1ceaf9b4d5'] = 'Etiqueta HTML de título'; // Title HTML Tag +$_MODULE['<{creativeelements}prestashop>_33f5f59c40d41e206fd9af76ba81f8a2'] = 'Haz clic en el botón editar para cambiar este texto. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'; // Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo. +$_MODULE['<{creativeelements}prestashop>_b4dbdac374f627ca60f562d1dd368e97'] = 'Este es el encabezado'; // This is the heading +$_MODULE['<{creativeelements}prestashop>_ddedab99da4615aa6cb108466ba35bf1'] = 'Agrega tu clase CSS personalizada SIN el punto. Ejemplo: mi-clase'; // Add your custom class WITHOUT the dot. e.g: my-class +$_MODULE['<{creativeelements}prestashop>_46c613087b2b4545ce4ef4ca82dc579c'] = 'Atención: los ajustes de visualización (mostrar/esconder para móvil, tablet o escritorio) solo tendrá efecto una vez que previsualices la página o estés en vivo, y no mientras estás en el modo de edición de Creative Elements.'; // Attention: The display settings (show/hide for mobile, tablet or desktop) will only take effect once you are on the preview or live page, and not while you're in editing mode in Elementor. +$_MODULE['<{creativeelements}prestashop>_5e8fe619138eb3ea59cbc11b4e977a3c'] = 'El listado de fuentes utilizadas si la fuente seleccionada no está disponible.'; // The list of fonts used if the chosen font is not available. +$_MODULE['<{creativeelements}prestashop>_527173285a0e8a11e07da121e3dc9493'] = 'Fuentes genéricas predeterminadas'; // Default Generic Fonts +$_MODULE['<{creativeelements}prestashop>_a1a1577b9a9dddef5aa6644847575ef0'] = 'Inserta el enlace de YouTube o el archivo de vídeo (mp4 recomendado)'; // YouTube link or video file (mp4 is recommended). +$_MODULE['<{creativeelements}prestashop>_aa56a2e65d8106aef3c61e4f6bf94fdb'] = 'Elementos'; // Elements +$_MODULE['<{creativeelements}prestashop>_7070a8e837fa8d255ec7aff468edb08d'] = 'El más avanzado creador de páginas de arrastrar & soltar. Crea sitios profesionales, perfectos al pixel, a velocidad récord. Con cualquier tema, cualquier página, cualquier diseño.'; // The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design. +$_MODULE['<{creativeelements}prestashop>_f4f70727dc34561dfde1a3c529b6205c'] = 'Ajustes'; // Settings +$_MODULE['<{creativeelements}prestashop>typography_control_12a8e47062ed3272e04dc0b991e38466'] = 'Oblicua'; // Oblique +$_MODULE['<{creativeelements}prestashop>typography_control_1d874710ccdcd46b95397049d2e7500c'] = 'Cursiva'; // Italic +$_MODULE['<{creativeelements}prestashop>typography_control_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normal'; // Normal +$_MODULE['<{creativeelements}prestashop>typography_control_97a62b5e6d3cae255036b6bc37b87b44'] = 'Mayúsculas'; // Capitalize +$_MODULE['<{creativeelements}prestashop>typography_control_dc1ff975a46c75335d6d640abdc0c3a6'] = 'Minúsculas'; // Lowercase +$_MODULE['<{creativeelements}prestashop>typography_control_621e7b8ece62fecc55e883252ff2fbe7'] = 'Mayúsculas'; // Uppercase +$_MODULE['<{creativeelements}prestashop>_512e805300422d5e8a86031b665ef28c'] = 'Icono de play'; // Play Icon +$_MODULE['<{creativeelements}prestashop>_9bcffa546758e012c3379c285a9e95c4'] = 'Imagen de cubierta'; // Image Overlay +$_MODULE['<{creativeelements}prestashop>_3248e7a58c1ea530e42933f72bb676e6'] = 'Controles del reproductor'; // Player Controls +$_MODULE['<{creativeelements}prestashop>_ee17cbac55d446219173726589867db9'] = 'Videos sugeridos'; // Suggested Videos +$_MODULE['<{creativeelements}prestashop>_ac97682c8f12cd9e67d121e87da0338d'] = 'Proporción'; // Aspect Ratio +$_MODULE['<{creativeelements}prestashop>_9690ccd809b1cbdb861d0bad3c0802c9'] = 'Ocultar contenido'; // Toggle Content +$_MODULE['<{creativeelements}prestashop>_ccf67c36b837af38fd05d41dec1b47ec'] = 'Alternar título'; // Toggle Title +$_MODULE['<{creativeelements}prestashop>_a1be4433701f8936cdf49569eb44e3ab'] = 'Opción #2'; // Toggle #2 +$_MODULE['<{creativeelements}prestashop>_0eb925daf423fe1169c3f6720e3c74c0'] = 'Opción #1'; // Toggle #1 +$_MODULE['<{creativeelements}prestashop>_f2a9f78110ca6de657f70b3ee9cd5320'] = 'Conmutar items'; // Toggle Items +$_MODULE['<{creativeelements}prestashop>_a8875bbe4272c0bdd786cfaaedf77921'] = 'Alternar'; // Toggle +$_MODULE['<{creativeelements}prestashop>_e0f1691bdb67d9859e5a6a8d7c26e6a1'] = 'Editor de texto'; // Text Editor +$_MODULE['<{creativeelements}prestashop>_5a9bf0bc2b910b5e03c3f85d363838e7'] = 'Contenido de tabla'; // Tab Content +$_MODULE['<{creativeelements}prestashop>_3acb228e77768f2611ae59e04595a90d'] = 'Titulo de tabla'; // Tab Title +$_MODULE['<{creativeelements}prestashop>_ef6bec3512b7dee69f91f853f5fe7292'] = 'Pestaña #2'; // Tab #2 +$_MODULE['<{creativeelements}prestashop>_d9acb2b50c1ced5fe56790e1518532b2'] = 'Pestaña #1'; // Tab #1 +$_MODULE['<{creativeelements}prestashop>_30eb111c6722ac96a4239a87dddfe5ae'] = 'Elementos de las pestañas'; // Tabs Items +$_MODULE['<{creativeelements}prestashop>_7015777bcc86cd0c5e4819310d62b040'] = 'Pestañas'; // Tabs +$_MODULE['<{creativeelements}prestashop>_6533b60847609ca99607d99753b6ea9b'] = 'Pausar al pasar el ratón'; // Pause on Hover +$_MODULE['<{creativeelements}prestashop>_7396285ad8822a609e7d737cc82f6076'] = 'Velocidad de auto-iniciado'; // Autoplay Speed +$_MODULE['<{creativeelements}prestashop>_4e05974b02cc4aa95db4d85baef6b6b4'] = 'Flechas'; // Arrows +$_MODULE['<{creativeelements}prestashop>_6160a53ece50ce6d4f5ef4452549835e'] = 'Diapositiva'; // Slide +$_MODULE['<{creativeelements}prestashop>_3cc101db14264780bd1e84bc80d588f1'] = 'Estilo del Título'; // Title Style +$_MODULE['<{creativeelements}prestashop>_2bf376babbb3b4d6d1158aabc5b49109'] = 'Color del texto interior'; // Inner Text Color +$_MODULE['<{creativeelements}prestashop>_90d254b1e4a44ef82a0eff5ce2dd30bf'] = 'Diseñador web'; // Web Designer +$_MODULE['<{creativeelements}prestashop>_8eb7d29b13b3a8389bef4c465053f63f'] = 'ej: diseñador web'; // e.g. Web Designer +$_MODULE['<{creativeelements}prestashop>_2ffe8a03531a12477e27a146bc15a3ba'] = 'Texto interior'; // Inner Text +$_MODULE['<{creativeelements}prestashop>_e7832ab13448cc6894f4262dc1e05d0d'] = 'Mostrar porcentaje'; // Display Percentage +$_MODULE['<{creativeelements}prestashop>_37be07209f53a5d636d5c904ca9ae64c'] = 'Porcentaje'; // Percentage +$_MODULE['<{creativeelements}prestashop>_8e4a53e769f15496d5c8f4fe9d0729df'] = 'Barra de progreso'; // Progress Bar +$_MODULE['<{creativeelements}prestashop>_1fec9f77e87864f1bc863596105c295d'] = 'Por ejemplo: Acerca de'; // For Example: About +$_MODULE['<{creativeelements}prestashop>_697b67a9f0a74057bdbb8743bbb3c46e'] = 'La ID de la ancla de menú.'; // The ID of Menu Anchor. +$_MODULE['<{creativeelements}prestashop>_704fe059b7613cbd3353262998cdf836'] = 'Esta ID será la ID CSS que tendrás que usar en tu propia página, sin el #.'; // This ID will be the CSS ID you will have to use in your own page, Without #. +$_MODULE['<{creativeelements}prestashop>_a34285645af2703a9501db6fc881e5df'] = 'Ancla'; // Anchor +$_MODULE['<{creativeelements}prestashop>_7551d2d59d73e7d2650f7e2b9959efbf'] = 'Ancla de menú'; // Menu Anchor +$_MODULE['<{creativeelements}prestashop>_13c31590d98cc452fc3794eaf0811e4d'] = 'Posición de la Imagen'; // Image Position +$_MODULE['<{creativeelements}prestashop>_ac2c0f8fbfcea1d561d0dbbfafc1747d'] = 'Espaciado de Imagen'; // Image Spacing +$_MODULE['<{creativeelements}prestashop>_7d25feb59b8a44341084a00840d860d1'] = 'Tamaño de imagen'; // Image Size +$_MODULE['<{creativeelements}prestashop>_fb07b027d8d8c04f512f1a6a0f7bc365'] = 'Cuadro de imagen'; // Image Box +$_MODULE['<{creativeelements}prestashop>_37e929a6d14b3e6eeb834900e8216c6e'] = 'Icon en Hover'; // Icon Hover +$_MODULE['<{creativeelements}prestashop>_757e8d7a69c388d1b39efa9bd3d54d4d'] = 'Ancho del borde'; // Border Width +$_MODULE['<{creativeelements}prestashop>_8d2de5368588552fbae54044ac5c7b3d'] = 'Rotar'; // Rotate +$_MODULE['<{creativeelements}prestashop>_020a9f6a979825fc9349eccc66bef6db'] = 'Color secundario'; // Secondary Color +$_MODULE['<{creativeelements}prestashop>_f951a1e1ff1ed0d24a2758b6441a3431'] = 'Color primario'; // Primary Color +$_MODULE['<{creativeelements}prestashop>_ceb46ca115d05c51aa5a16a8867c3304'] = 'Cuadrado'; // Square +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Círculo'; // Circle +$_MODULE['<{creativeelements}prestashop>_880c1273b27d27cfc82004c3a4b205c9'] = 'Forma'; // Shape +$_MODULE['<{creativeelements}prestashop>_6b73ad372508225645eb96a2e505a602'] = 'Encuadrado'; // Framed +$_MODULE['<{creativeelements}prestashop>_29b733fdb4bddeda910b3b4a659c2fef'] = 'Apilados'; // Stacked +$_MODULE['<{creativeelements}prestashop>_0c03306ef001b4e3d7f76ee2faad389e'] = 'Sangría del Texto'; // Text Indent +$_MODULE['<{creativeelements}prestashop>_3f7b121ec5cc19cf6676a28656e0d5b8'] = 'Elemento de lista'; // List Item +$_MODULE['<{creativeelements}prestashop>_8d35756b5a8f878d9d20f3ba0851786d'] = 'Elemento de lista nº3'; // List Item #3 +$_MODULE['<{creativeelements}prestashop>_043fd607b45939749a567bcb850978bc'] = 'Elemento de lista nº2'; // List Item #2 +$_MODULE['<{creativeelements}prestashop>_88e38f5c21b56f5f87896476088a1783'] = 'Elemento de lista nº1'; // List Item #1 +$_MODULE['<{creativeelements}prestashop>_591180770b39c5f069a1b2f9e643952c'] = 'Listado de iconos'; // Icon List +$_MODULE['<{creativeelements}prestashop>_0c02adc8335c386e48c48be7304d6f9e'] = 'https://your-link.com'; // https://your-link.com +$_MODULE['<{creativeelements}prestashop>_917aedb05020a5ad03b91720c66d1900'] = 'Espaciado del icono'; // Icon Spacing +$_MODULE['<{creativeelements}prestashop>_3902b5474a18ab7e9f8ce952a8f8123f'] = 'Caja de icono'; // Icon Box +$_MODULE['<{creativeelements}prestashop>_e0ec89dede7dfb470b66327694fcd96c'] = 'Código HTML'; // HTML Code +$_MODULE['<{creativeelements}prestashop>_4c4ad5fca2e7a3f74dbb1ced00381aa4'] = 'HTML'; // HTML +$_MODULE['<{creativeelements}prestashop>_022586563e1d7808a2dcc1adf7d31cdd'] = 'Etiqueta HTML'; // HTML Tag +$_MODULE['<{creativeelements}prestashop>_d8e4922dd15f21a02528d54926dcceac'] = 'Escribe tu título'; // Enter your title +$_MODULE['<{creativeelements}prestashop>_0101316665d4f82adaa26d86fbbb2d6e'] = 'Encabezado'; // Heading +$_MODULE['<{creativeelements}prestashop>_ec6d39989d44bfedcd0ddaa3651fa194'] = 'London Eye, London, United Kingdom'; // London Eye, London, United Kingdom +$_MODULE['<{creativeelements}prestashop>_46f3ea056caa3126b91f3f70beea068c'] = 'Mapa'; // Map +$_MODULE['<{creativeelements}prestashop>_272ba7d164aa836995be6319a698be84'] = 'Leyenda'; // Caption +$_MODULE['<{creativeelements}prestashop>_fff0d600f8a0b5e19e88bfb821dd1157'] = 'Imágenes'; // Images +$_MODULE['<{creativeelements}prestashop>_64663f4646781c9c0110838b905daa23'] = 'Al azar'; // Random +$_MODULE['<{creativeelements}prestashop>_6e475c4e40cb8bdfd54c18345937bc9a'] = 'Archivo de medios'; // Media File +$_MODULE['<{creativeelements}prestashop>_6861444ec5168a915bf147d856ecb91b'] = 'Página de adjuntos'; // Attachment Page +$_MODULE['<{creativeelements}prestashop>_d33c208fe1458eff399189b5b0515025'] = 'Agregar imágenes'; // Add Images +$_MODULE['<{creativeelements}prestashop>_9cc51a9ca0ed0404f8b9125ad563ade9'] = 'Galería de imágenes'; // Image Gallery +$_MODULE['<{creativeelements}prestashop>_466b98ca0f38bd8bf2260246c91f6882'] = 'Brecha'; // Gap +$_MODULE['<{creativeelements}prestashop>_cb5feb1b7314637725a2e73bdc9f7295'] = 'Color'; // Color +$_MODULE['<{creativeelements}prestashop>_8c489d0946f66d17d73f26366a4bf620'] = 'Peso'; // Weight +$_MODULE['<{creativeelements}prestashop>_6ab9a295c00f945cf4881fd7667a0334'] = 'Espaciador'; // Spacer +$_MODULE['<{creativeelements}prestashop>_2908050e771fb91a3afbb7809972e90c'] = 'Separador'; // Divider +$_MODULE['<{creativeelements}prestashop>_b2ee912b91d69b435159c7c3f6df7f5f'] = 'Número'; // Number +$_MODULE['<{creativeelements}prestashop>_7776af0e9a7220bb12e18bbb20d49314'] = 'Título de número'; // Cool Number +$_MODULE['<{creativeelements}prestashop>_32ba78fe43257d3e7f88e3935a8ea0d4'] = 'Más'; // Plus +$_MODULE['<{creativeelements}prestashop>_5b122ce454e4b9f39a663d8d8ed6e85c'] = 'Sufijo de número'; // Number Suffix +$_MODULE['<{creativeelements}prestashop>_83294d77029945fdb8dc4a5388829d27'] = 'Prefijo de número'; // Number Prefix +$_MODULE['<{creativeelements}prestashop>_0cb5ed4f4d6f3d8b739d1f10fec8d36d'] = 'Número de fin'; // Ending Number +$_MODULE['<{creativeelements}prestashop>_ededf9a7b5f65a321a5f20ebf58e9517'] = 'Número de inicio'; // Starting Number +$_MODULE['<{creativeelements}prestashop>_64d129224a5377b63e9727479ec987d9'] = 'Contador'; // Counter +$_MODULE['<{creativeelements}prestashop>_05b1dc77590105a18fc4c02526fe0c7a'] = 'Auto-reproducir'; // Autoplay +$_MODULE['<{creativeelements}prestashop>_059910d00f03f1aad921ecef33b1deb7'] = 'Diapositivas a desplazar'; // Slides to Scroll +$_MODULE['<{creativeelements}prestashop>_d7b5e50ef2050d92c3972793da595f49'] = 'Diapositivas a mostrar'; // Slides to Show +$_MODULE['<{creativeelements}prestashop>_10bf609ae34aa1c82f39f0e90cf6ffaf'] = 'Seleccionar imagen'; // Choose Image +$_MODULE['<{creativeelements}prestashop>_be53a0541a6d36f6ecb879fa2c584b08'] = 'Imagen'; // Image +$_MODULE['<{creativeelements}prestashop>_070554647306343cbea29ebfdd278ba8'] = 'Borde'; // Border +$_MODULE['<{creativeelements}prestashop>_7bfcadb5535fe8aad5032762b7bfe159'] = 'Después'; // After +$_MODULE['<{creativeelements}prestashop>_9060587edeb01a63e3d3edc959678d1e'] = 'Antes'; // Before +$_MODULE['<{creativeelements}prestashop>_f26664db07487754bb4b21355caad9ca'] = 'Posición del icono'; // Icon Position +$_MODULE['<{creativeelements}prestashop>_817434295a673aed431435658b65d9a7'] = 'Icono'; // Icon +$_MODULE['<{creativeelements}prestashop>_6f6cb72d544962fa333e2e34ce64f719'] = 'Tamaño'; // Size +$_MODULE['<{creativeelements}prestashop>_058cc077563d4b47b43ae642a6478159'] = 'Justificado'; // Justified +$_MODULE['<{creativeelements}prestashop>_a63706eecfa33f67b315f978392ad7ae'] = 'Alineación'; // Alignment +$_MODULE['<{creativeelements}prestashop>_e737584ec6ea30637b1e2b1dde624fbe'] = 'XXL'; // XXL +$_MODULE['<{creativeelements}prestashop>_a7a4ccc5e1a068d87f4965e014329201'] = 'XL'; // XL +$_MODULE['<{creativeelements}prestashop>_3a69b34ce86dacb205936a8094f6c743'] = 'Largo'; // Large +$_MODULE['<{creativeelements}prestashop>_87f8a6ab85c9ced3702b4ea641ad4bb5'] = 'Medio'; // Medium +$_MODULE['<{creativeelements}prestashop>_2660064e68655415da2628c2ae2f7592'] = 'Pequeño'; // Small +$_MODULE['<{creativeelements}prestashop>_87b7760f14fbff78d8819291f36ab9a0'] = 'Botón'; // Button +$_MODULE['<{creativeelements}prestashop>_7dce122004969d56ae2e0245cb754d35'] = 'Editar'; // Edit +$_MODULE['<{creativeelements}prestashop>_8c51f4baf5c75864896a9984fdd085ed'] = 'Ocultar en móvil'; // Hide On Mobile +$_MODULE['<{creativeelements}prestashop>_4365dd761ee313b7154369721242ca54'] = 'Ocultar en tableta'; // Hide On Tablet +$_MODULE['<{creativeelements}prestashop>_c936f9927e7b00ada48d5b571b74ff7d'] = 'Ocultar en escritorio'; // Hide On Desktop +$_MODULE['<{creativeelements}prestashop>_b80517a37221cf35ccdfb5dfe99e57df'] = 'Radio del borde'; // Border Radius +$_MODULE['<{creativeelements}prestashop>_b5a7adde1af5c87d7fd797b6245c2a39'] = 'Descripción'; // Description +$_MODULE['<{creativeelements}prestashop>_b78a3223503896721cca1303f776159b'] = 'Título'; // Title +$_MODULE['<{creativeelements}prestashop>_75e7422f2fe253fc69d3f6c148d197ee'] = 'Color de fondo'; // Background Color +$_MODULE['<{creativeelements}prestashop>_62a5e490880a92eef74f167d9dc6dca0'] = 'Ocultar'; // Hide +$_MODULE['<{creativeelements}prestashop>_498f79c4c5bbde77f1bceb6c86fd0f6d'] = 'Mostrar'; // Show +$_MODULE['<{creativeelements}prestashop>_5c6dc399ce706d7c8114864dfe2e85cd'] = 'Botón de descartar'; // Dismiss Button +$_MODULE['<{creativeelements}prestashop>_53d7e9d912b9a2e0eb070e2f6ac8185b'] = 'Soy una descripción. Haz clic en el botón de editar para cambiar este texto.'; // I am a description. Click the edit button to change this text. +$_MODULE['<{creativeelements}prestashop>_70124948c153a25f90f234807d432051'] = 'Título y descripción'; // Title & Description +$_MODULE['<{creativeelements}prestashop>_990816b607ebf99b1415760965e4d564'] = 'Peligro'; // Danger +$_MODULE['<{creativeelements}prestashop>_0eaadb4fcb48a0a0ed7bc9868be9fbaa'] = 'Advertencia'; // Warning +$_MODULE['<{creativeelements}prestashop>_505a83f220c02df2f85c3810cd9ceb38'] = 'Éxito'; // Success +$_MODULE['<{creativeelements}prestashop>_4059b0251f66a18cb56f544728796875'] = 'Información'; // Info +$_MODULE['<{creativeelements}prestashop>_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Tipo'; // Type +$_MODULE['<{creativeelements}prestashop>_b92071d61c88498171928745ca53078b'] = 'Alerta'; // Alert +$_MODULE['<{creativeelements}prestashop>_779a68e20d5ee1a07b0968deda651684'] = 'Color activo'; // Active Color +$_MODULE['<{creativeelements}prestashop>_475c80ecff56299d3527cf51af68e48c'] = 'Color del borde'; // Border Color +$_MODULE['<{creativeelements}prestashop>_4351cfebe4b61d8aa5efa1d020710005'] = 'Ver'; // View +$_MODULE['<{creativeelements}prestashop>_01fa2fa7f98169b137677336c3f670f0'] = 'Contenido del acordeón'; // Accordion Content +$_MODULE['<{creativeelements}prestashop>_708714aa8d5537518f5a8a8439012354'] = 'Título del acordeón'; // Accordion Title +$_MODULE['<{creativeelements}prestashop>_7ad033dd18a58e91f283103cdcd98d24'] = 'Acordeón #2'; // Accordion #2 +$_MODULE['<{creativeelements}prestashop>_228e7e4cc19e59ae320bd052cd12aeb3'] = 'Acordeón #1'; // Accordion #1 +$_MODULE['<{creativeelements}prestashop>_ff3defaa406e66b49d1fd11ecebe07aa'] = 'Elementos del acordeón'; // Accordion Items +$_MODULE['<{creativeelements}prestashop>_4d5aae0b218a0bb62ff4513b66fc34d0'] = 'Acordeón'; // Accordion +$_MODULE['<{creativeelements}prestashop>_49ee3087348e8d44e1feda1917443987'] = 'Nombre'; // Name +$_MODULE['<{creativeelements}prestashop>_bafd7322c6e97d25b6299b5d6fe8920b'] = 'No'; // No +$_MODULE['<{creativeelements}prestashop>_93cba07454f06a4a960172bbd6e2a435'] = 'Sí'; // Yes +$_MODULE['<{creativeelements}prestashop>_52f4393e1b52ba63e27310ca92ba098c'] = 'Configuración general'; // General Settings +$_MODULE['<{creativeelements}prestashop>_5096bb1a69971401c543c0fd182777e9'] = 'Texto de acento'; // Accent Text +$_MODULE['<{creativeelements}prestashop>_c1800412bc0184dd8339a641907b549f'] = 'Texto del cuerpo'; // Body Text +$_MODULE['<{creativeelements}prestashop>_c3cc351e0f5298324ba1af3535b17e97'] = 'Encabezado secundario'; // Secondary Headline +$_MODULE['<{creativeelements}prestashop>_ecb45ba774122b23aa38ed2072872c19'] = 'Encabezado primario'; // Primary Headline +$_MODULE['<{creativeelements}prestashop>_c900e1bd8e22771d610bd2a5861b544f'] = 'Acento'; // Accent +$_MODULE['<{creativeelements}prestashop>_9dffbf69ffba8bc38bc4e01abf4b1675'] = 'Texto'; // Text +$_MODULE['<{creativeelements}prestashop>_0c7d6cf19426e01dcfa32434828ed266'] = 'Secundario'; // Secondary +$_MODULE['<{creativeelements}prestashop>_074de7e7c226d5c60f8af14c20725352'] = 'Primario'; // Primary +$_MODULE['<{creativeelements}prestashop>_846495f9ceed11accf8879f555936a7d'] = 'Navegación'; // Navigation +$_MODULE['<{creativeelements}prestashop>_972e73b7a882d0802a4e3a16946a2f94'] = 'Básico'; // Basic +$_MODULE['<{creativeelements}prestashop>_205a36f1b372fa213113504073738be0'] = 'Posición del contenido'; // Content Position +$_MODULE['<{creativeelements}prestashop>_b1ca34f82e83c52b010f86955f264e05'] = 'Medio'; // Middle +$_MODULE['<{creativeelements}prestashop>_fbb09a82eafab60150d0996e8fe46560'] = 'Estirar'; // Stretch +$_MODULE['<{creativeelements}prestashop>_a36618027461bc0fd7bb6868929ffaec'] = 'Posición de la columna'; // Column Position +$_MODULE['<{creativeelements}prestashop>_4565b790baf0d98c20e624636451a43f'] = 'Altura mínima'; // Minimum Height +$_MODULE['<{creativeelements}prestashop>_c7a7e65064fdd9a2e9aa712fa88e9878'] = 'Altura mínima'; // Min Height +$_MODULE['<{creativeelements}prestashop>_3232bb2700bece80661b7b9f834be06d'] = 'Ajustar a la pantalla'; // Fit To Screen +$_MODULE['<{creativeelements}prestashop>_eec6c4bdbd339edf8cbea68becb85244'] = 'Alto'; // Height +$_MODULE['<{creativeelements}prestashop>_e7c770a61dbdf81ca922ae0260e327c1'] = 'Ancho'; // Wide +$_MODULE['<{creativeelements}prestashop>_4a7ab319be06025840ef3389301424b9'] = 'Angosto'; // Narrow +$_MODULE['<{creativeelements}prestashop>_845366c74d6395b273fa175bc2e057c3'] = 'Sin espacio'; // No Gap +$_MODULE['<{creativeelements}prestashop>_58b95bbe80c80c7dc3f16d8db0c506e8'] = 'Espacio entre columnas'; // Columns Gap +$_MODULE['<{creativeelements}prestashop>_399df326b0ba3630641583807b229bfe'] = 'Ancho del contenido'; // Content Width +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Ancho completo'; // Full Width +$_MODULE['<{creativeelements}prestashop>_6d1ca8184c6a1f11ecccfa17f8f9048a'] = 'Caja'; // Boxed +$_MODULE['<{creativeelements}prestashop>_32954654ac8fe66a1d09be19001de2d4'] = 'Ancho'; // Width +$_MODULE['<{creativeelements}prestashop>_ebd9bec4d70abc789d439c1f136b0538'] = 'Disposición'; // Layout +$_MODULE['<{creativeelements}prestashop>_02fbde656ea799c09d5d647dc0f5960a'] = 'Agregar nueva columna'; // Add New Column +$_MODULE['<{creativeelements}prestashop>_4f5f086e367315e5f52722c8c8e9b3e3'] = 'Ancho de la columna'; // Column Width +$_MODULE['<{creativeelements}prestashop>_9a64f91eb059eb9a1ecf038d3467e09f'] = 'Clases CSS'; // CSS Classes +$_MODULE['<{creativeelements}prestashop>_a10443964156b9e87c95e74c8f9baf15'] = 'Relleno'; // Padding +$_MODULE['<{creativeelements}prestashop>_98369609669478919c74c916440e9978'] = 'Margen'; // Margin +$_MODULE['<{creativeelements}prestashop>_4f1f6016fc9f3f2353c0cc7c67b292bd'] = 'Centro'; // Center +$_MODULE['<{creativeelements}prestashop>_b14a348d14021b3f79da6be488d63253'] = 'Alineación del texto'; // Text Align +$_MODULE['<{creativeelements}prestashop>_8435207e2ede48cf57a3a26e10a9e7a3'] = 'Color del enlace con ratón encima'; // Link Hover Color +$_MODULE['<{creativeelements}prestashop>_59ece6dc07b89f5c61320dd130579a7f'] = 'Color del enlace'; // Link Color +$_MODULE['<{creativeelements}prestashop>_0a06bdec3ccc4e4b6f6401881cf922f6'] = 'Color de encabezado'; // Heading Color +$_MODULE['<{creativeelements}prestashop>_8903861290617267b361478ab7f16f31'] = 'Color de texto'; // Text Color +$_MODULE['<{creativeelements}prestashop>_603850e072131401265c4fc01027db93'] = 'Tipografía'; // Typography +$_MODULE['<{creativeelements}prestashop>_93f07b720ebf7d1246512569761a5804'] = 'Borrada'; // Removed +$_MODULE['<{creativeelements}prestashop>_1976d7f704de389d9fe064e08ea35b2d'] = 'Columna'; // Column +$_MODULE['<{creativeelements}prestashop>_d2c24d59e0baff4d0155fbdf62590867'] = 'Sección'; // Section +$_MODULE['<{creativeelements}prestashop>_dc4c71563b9bc39a65be853457e6b7b6'] = 'Estructura'; // Structure +$_MODULE['<{creativeelements}prestashop>_b2b2df378a7c7ade199bbaf944cb3f35'] = 'Adaptabilidad'; // Responsive +$_MODULE['<{creativeelements}prestashop>_9b6545e4cea9b4ad4979d41bb9170e2b'] = 'Avanzado'; // Advanced +$_MODULE['<{creativeelements}prestashop>_ae284f900f9d6e21ba69144cfc91e41b'] = 'Estilo'; // Style +$_MODULE['<{creativeelements}prestashop>_f15c1cae7882448b3fb0404682e17e61'] = 'Contenido'; // Content +$_MODULE['<{creativeelements}prestashop>_168b82d33f8073018c50a4f658a02559'] = 'Columnas'; // Columns +$_MODULE['<{creativeelements}prestashop>_6ed482754b5780176fd1ba9dd789dea3'] = 'Sobre Creative Elements'; // About Creative Elements +$_MODULE['<{creativeelements}prestashop>_e0583393371074d791e836b0087dcbae'] = 'Historial de revisiones'; // Revision History +$_MODULE['<{creativeelements}prestashop>_b5ccb7d52b4f221253779a94cd40e902'] = 'Pronto'; // Soon +$_MODULE['<{creativeelements}prestashop>_5d50889672f6f860d14f502de3de1957'] = 'Colores'; // Colors +$_MODULE['<{creativeelements}prestashop>_d3b67861c9d313014761beb38d771889'] = 'Ten en cuenta: todos los cambios sin guardar se perderán.'; // Please note: All unsaved changes will be lost. +$_MODULE['<{creativeelements}prestashop>_248336101b461380a4b2391a7625493d'] = 'Guardado'; // Saved +$_MODULE['<{creativeelements}prestashop>_4f2f5e1d6e2a13469ad431474a68ab82'] = 'Volver'; // Go Back +$_MODULE['<{creativeelements}prestashop>_2e83ec658a7776a62a320cdee2690826'] = 'Tomar el control'; // Take Over +$_MODULE['<{creativeelements}prestashop>_ea4788705e6873b424c65e91c2846b19'] = 'Cancelar'; // Cancel +$_MODULE['<{creativeelements}prestashop>_47748fe5d78900c50f5bfe078cd3d44d'] = '%s ha tomado posesión de la página y está editando. ¿Deseas tomar posesión de ésta página y editarla?'; // %s has taken over and is currently editing. Do you want to take over this page editing? +$_MODULE['<{creativeelements}prestashop>_a5dd7c693ee0caedf9aa691116106572'] = '¿Estás seguro que quieres eliminar esta %s?'; // Are you sure you want to remove this %s? +$_MODULE['<{creativeelements}prestashop>_040814c79beb48a59a293776e292ccb9'] = 'Más paletas'; // More Palettes +$_MODULE['<{creativeelements}prestashop>_5463fe6752b217567e3f1ab1921dd3cc'] = 'Paleta de colores'; // Color Palette +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Aplicar'; // Apply +$_MODULE['<{creativeelements}prestashop>_d94b42030b9785fd754d5c1754961269'] = 'Descartar'; // Discard +$_MODULE['<{creativeelements}prestashop>_526d688f37a86d3c3f27d0c5016eb71d'] = 'Reiniciar'; // Reset +$_MODULE['<{creativeelements}prestashop>_31fde7b05ac8952dacf4af8a704074ec'] = 'Previsualizar'; // Preview +$_MODULE['<{creativeelements}prestashop>_c9cc8cce247e49bae79f15173ce97354'] = 'Guardar'; // Save +$_MODULE['<{creativeelements}prestashop>_36384a9ea3ec791e6bd4ab6b36f2ff2a'] = 'Tableta'; // Tablet +$_MODULE['<{creativeelements}prestashop>_2310408a63388fe57e3a4177168a8798'] = 'Escritorio'; // Desktop +$_MODULE['<{creativeelements}prestashop>_628cef8c7f89a898c3c70b431700841b'] = 'Modo adaptable'; // Responsive Mode +$_MODULE['<{creativeelements}prestashop>_e4b846392f10f46b032cf155c39a0eaf'] = 'Ver página'; // View Page +$_MODULE['<{creativeelements}prestashop>_dd1a7e71effdaeffedeebbd060621250'] = 'Panel de widgets'; // Widgets Panel +$_MODULE['<{creativeelements}prestashop>_b61541208db7fa7dba42c85224405911'] = 'Menú'; // Menu +$_MODULE['<{creativeelements}prestashop>_9804fe0d898c7de798c4e175f59f6672'] = 'Buscar widget...'; // Search Widget... +$_MODULE['<{creativeelements}prestashop>_1907bd03c6adcacb7ad68404b14ca18b'] = 'Agregar nueva sección'; // Add New Section +$_MODULE['<{creativeelements}prestashop>_16bfbf9c462762cf1cba4134ec53c504'] = 'Cargando'; // Loading +$_MODULE['<{creativeelements}prestashop>_5230001af73bfa7b6518d06ce7328efa'] = 'Más estructuras'; // More Structures +$_MODULE['<{creativeelements}prestashop>_138103c4e1d9c846d0afd000e5b928c8'] = 'Agregar elemento'; // Add Item +$_MODULE['<{creativeelements}prestashop>_f2a6c498fb90ee345d997f888fce3b18'] = 'Borrar'; // Delete +$_MODULE['<{creativeelements}prestashop>_fe146ea3246d82386939d718b5869c88'] = 'Selecciona el icono'; // Select Icon +$_MODULE['<{creativeelements}prestashop>_90589c47f06eb971d548591f23c285af'] = 'Personalizado'; // Custom +$_MODULE['<{creativeelements}prestashop>typography_control_81cb1a74d81616f475b029b26a548cc9'] = 'Espaciado de letras'; // Letter Spacing +$_MODULE['<{creativeelements}prestashop>typography_control_2ea0cce3b1e76eb9a13c814937e7d295'] = 'Altura de linea'; // Line-Height +$_MODULE['<{creativeelements}prestashop>_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normal'; // Normal +$_MODULE['<{creativeelements}prestashop>typography_control_ae284f900f9d6e21ba69144cfc91e41b'] = 'Estilo'; // Style +$_MODULE['<{creativeelements}prestashop>typography_control_2ff4148554480a37f85efd299df04850'] = 'Transformación'; // Transform +$_MODULE['<{creativeelements}prestashop>typography_control_8c489d0946f66d17d73f26366a4bf620'] = 'Peso'; // Weight +$_MODULE['<{creativeelements}prestashop>typography_control_cefc4f7cbc8c34762e0f76703e7e174e'] = 'Familia'; // Family +$_MODULE['<{creativeelements}prestashop>typography_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Tamaño'; // Size +$_MODULE['<{creativeelements}prestashop>border_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Color'; // Color +$_MODULE['<{creativeelements}prestashop>border_control_32954654ac8fe66a1d09be19001de2d4'] = 'Ancho'; // Width +$_MODULE['<{creativeelements}prestashop>_eb656e41b6da91494775ecf47a51da91'] = 'Linea discontinua'; // Dashed +$_MODULE['<{creativeelements}prestashop>_90c09393a4c0970bc9a6703ad527781c'] = 'Punteado'; // Dotted +$_MODULE['<{creativeelements}prestashop>_d909d38d705ce75386dd86e611a82f5b'] = 'Doble'; // Double +$_MODULE['<{creativeelements}prestashop>_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Sólido'; // Solid +$_MODULE['<{creativeelements}prestashop>_6adf97f83acf6453d4a6a4b1070f3754'] = 'Ninguno'; // None +$_MODULE['<{creativeelements}prestashop>border_control_f142def200da13d2a17cd85d74258d54'] = 'Tipo de borde'; // Border Type +$_MODULE['<{creativeelements}prestashop>background_control_16619cb16904fc183583f843307c4645'] = 'Fondo alternativo'; // Background Fallback +$_MODULE['<{creativeelements}prestashop>background_control_69620f6919f430e72c0f67207535605b'] = 'Enlace del video'; // Video Link +$_MODULE['<{creativeelements}prestashop>background_control_db3e3f51c9107e26c9bccf9a188ce2ed'] = 'Rellenar'; // Fill +$_MODULE['<{creativeelements}prestashop>background_control_c795dfff10a7c952f4c5438951e9ece9'] = 'Abarcar'; // Cover +$_MODULE['<{creativeelements}prestashop>background_control_0e75eff17752bae4ab31af7ad9b45484'] = 'Contiene'; // Contain +$_MODULE['<{creativeelements}prestashop>background_control_06b9281e396db002010bde1de57262eb'] = 'Auto'; // Auto +$_MODULE['<{creativeelements}prestashop>background_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Tamaño'; // Size +$_MODULE['<{creativeelements}prestashop>background_control_cfb23be94c536c4a0bc7e9a1e9b902fb'] = 'Repetir-y'; // Repeat-y +$_MODULE['<{creativeelements}prestashop>background_control_f57da73b22e4c4b324499f5a19c8b782'] = 'Repetir-x'; // Repeat-x +$_MODULE['<{creativeelements}prestashop>background_control_08b9e4f31c7aa3c1cfc97736ed8e6f81'] = 'No-repetir'; // No-repeat +$_MODULE['<{creativeelements}prestashop>background_control_7020426cfb0a204051be4b3053d2acc8'] = 'Repetir'; // Repeat +$_MODULE['<{creativeelements}prestashop>background_control_4457d440870ad6d42bab9082d9bf9b61'] = 'Fijo'; // Fixed +$_MODULE['<{creativeelements}prestashop>background_control_105078d294d30c978ca2badf7f376934'] = 'Desplazamiento'; // Scroll +$_MODULE['<{creativeelements}prestashop>background_control_e9cb217697088a98b1937d111d936281'] = 'Adjunto'; // Attachment +$_MODULE['<{creativeelements}prestashop>background_control_4d297f5df921dca388a17e3336cad50f'] = 'Abajo derecha'; // Bottom Right +$_MODULE['<{creativeelements}prestashop>background_control_a088c172f6a893ef408116488ef672cd'] = 'Abajo centro'; // Bottom Center +$_MODULE['<{creativeelements}prestashop>background_control_7eb5542553fa5e5db4656e1c16f1316d'] = 'Abajo izquierda'; // Bottom Left +$_MODULE['<{creativeelements}prestashop>background_control_d7afdc5ae6dccbb16e24d9cac4067b41'] = 'Centro derecha'; // Center Right +$_MODULE['<{creativeelements}prestashop>background_control_cac17249ab9a6f510f995b5005dc94a2'] = 'Centro centro'; // Center Center +$_MODULE['<{creativeelements}prestashop>background_control_617e1d17c0297a4b2c409f397618737e'] = 'Centro izquierda'; // Center Left +$_MODULE['<{creativeelements}prestashop>background_control_5f9f678446e1abe7e062b056e755e059'] = 'Arriba derecha'; // Top Right +$_MODULE['<{creativeelements}prestashop>background_control_a20c9be95933e1fcf306b4b62d3792ea'] = 'Arriba centro'; // Top Center +$_MODULE['<{creativeelements}prestashop>background_control_ac71274aea488e58bea2a8c716fc578f'] = 'Arriba izquierda'; // Top Left +$_MODULE['<{creativeelements}prestashop>background_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Posición'; // Position +$_MODULE['<{creativeelements}prestashop>background_control_abd809c9e3c1c08e97740f86b8ceabfb'] = 'Imagen de fondo'; // Background Image +$_MODULE['<{creativeelements}prestashop>background_control_be53a0541a6d36f6ecb879fa2c584b08'] = 'Imagen'; // Image +$_MODULE['<{creativeelements}prestashop>background_control_75e7422f2fe253fc69d3f6c148d197ee'] = 'Color de fondo'; // Background Color +$_MODULE['<{creativeelements}prestashop>background_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Color'; // Color +$_MODULE['<{creativeelements}prestashop>background_control_8278a49e7da177e78b606cd1fae2f08f'] = 'Tipo de fondo'; // Background Type +$_MODULE['<{creativeelements}prestashop>background_control_32954654ac8fe66a1d09be19001de2d4'] = 'Ancho'; // Width +$_MODULE['<{creativeelements}prestashop>background_control_06504aee6c05f084754e10986c07d51e'] = 'Video de fondo'; // Background Video +$_MODULE['<{creativeelements}prestashop>background_control_d35b51b639528d580362ca7042de6a0e'] = 'Clásico'; // Classic +$_MODULE['<{creativeelements}prestashop>_a45da96d0bf6575970f2d27af22be28a'] = 'Sistema'; // System +$_MODULE['<{creativeelements}prestashop>_97e7c9a7d06eac006a28bf05467fcc8b'] = 'Enlace'; // Link +$_MODULE['<{creativeelements}prestashop>_945d5e233cf7d6240f6b783b36a374ff'] = 'Izquierda'; // Left +$_MODULE['<{creativeelements}prestashop>_2ad9d63b69c4a10a5cc9cad923133bc4'] = 'Abajo'; // Bottom +$_MODULE['<{creativeelements}prestashop>_92b09c7c48c520c3c55e497875da437c'] = 'Derecha'; // Right +$_MODULE['<{creativeelements}prestashop>_a4ffdcf0dc1f31b9acaf295d75b51d00'] = 'Arriba'; // Top +$_MODULE['<{creativeelements}prestashop>_7a1920d61156abc05a60135aefe8bc67'] = 'Por defecto'; // Default + +$_MODULE['<{creativeelements}prestashop>backoffice_header_36f76decda17622c3cca1592a5a5bbb5'] = 'Editar con Creative Elements'; // Edit with Creative Elements +$_MODULE['<{creativeelements}prestashop>backoffice_header_fbf27983c033a1a3a9567cb19b10df48'] = 'Volver al editor de PrestaShop'; // Back to PrestaShop Editor +$_MODULE['<{creativeelements}prestashop>creativeelements_1352b53a1f0602c4682ed452b411bac1'] = 'Guarde el formulario antes de editar con Creative Elements'; // Please save the form before editing with Creative Elements +$_MODULE['<{creativeelements}prestashop>creativeelements_58e1cede60a89e8489918834221dfe2e'] = 'La tienda está en modo de mantenimiento, incluya su IP en la lista blanca.'; // The shop is in maintenance mode, please whitelist your IP +$_MODULE['<{creativeelements}prestashop>creativeelements_5972f8e1a9936ed85e8ad83b600bcc35'] = 'No puede editar elementos que no se muestran, porque falta un archivo de anulación. Por favor contáctenos en https://addons.prestashop.com'; // You can not edit items which are not displayed, because an override file is missing. Please contact us on https://addons.prestashop.com +$_MODULE['<{creativeelements}prestashop>_9988f25f46a8a5fbf780ea53f748841e'] = 'Posición indefinida!'; // Undefined Position! +$_MODULE['<{creativeelements}prestashop>_ad8e46819e3ac7ff26d3db6a887164e6'] = 'Coloque contenido en cualquier lugar'; // Place Content Anywhere +$_MODULE['<{creativeelements}prestashop>_f7f19392da30e81c3abf433ce7b8ca38'] = 'Creado en'; // Created on +$_MODULE['<{creativeelements}prestashop>_155d14c40d6267b444be21ad136c5f60'] = 'Modificado en'; // Modified on +$_MODULE['<{creativeelements}prestashop>_49ed4f70af1d8e7ba23a097c3daa9b6b'] = 'Lista de plantillas'; // Templates List +$_MODULE['<{creativeelements}prestashop>_5a6eb418df400f68052e7725cdc1170a'] = 'Añadir nueva plantilla'; // Add New Template +$_MODULE['<{creativeelements}prestashop>_e838b63505c498050eccbcd6090a8262'] = 'Edita plantilla'; // Edit Template +$_MODULE['<{creativeelements}prestashop>_a14e0a7ee36fa87535472a963ba30bea'] = 'Archivo de plantilla'; // Template file +$_MODULE['<{creativeelements}prestashop>_bf50d5e661106d0abe925af3c2e6f7e7'] = 'Cabecera'; // Header +$_MODULE['<{creativeelements}prestashop>_ded40f2a77c30efc6062db0cbd857746'] = 'Pie de página'; // Footer +$_MODULE['<{creativeelements}prestashop>_cfe6e34a4c7f24aad32aa4299562f5b1'] = 'Pagina de inicio'; // Home Page +$_MODULE['<{creativeelements}prestashop>_b60d1950a4271a0e4dd4f647d479dfa4'] = 'Pagina de contacto'; // Contact Page +$_MODULE['<{creativeelements}prestashop>_6a015ba06ba180aa8a893610dbf1061a'] = 'Página 404'; // 404 Page +$_MODULE['<{creativeelements}prestashop>_235e8d1a54ecddcf1d3ff533331ed416'] = 'Página del producto'; // Product Page +$_MODULE['<{creativeelements}prestashop>_70f23ff594252e51839210b6cc9641fc'] = 'Vista rápida'; // Quick View +$_MODULE['<{creativeelements}prestashop>_15cff73eea419d7365dc3b88e95e7367'] = 'Miniatura del producto'; // Product Miniature +$_MODULE['<{creativeelements}prestashop>_7bf70debc40b3303954a6c18ae1aea62'] = 'Miniatura'; // Miniature +$_MODULE['<{creativeelements}prestashop>_88331ec25a3ecf67656071351edacce5'] = 'Configuración de vista previa'; // Preview Settings +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Aplicar y vista previa'; // Apply & Preview +$_MODULE['<{creativeelements}prestashop>_20928185e5bc74a3b872efdb77a2d806'] = 'Ajustar al contenido'; // Fit To Content +$_MODULE['<{creativeelements}prestashop>_6b551379c3c0b59326abdaf3b4395bd3'] = 'Superposición'; // Overlay +$_MODULE['<{creativeelements}prestashop>_31e0a3a16f717e60e27cb65195dcb128'] = 'Botón Cerrar'; // Close Button +$_MODULE['<{creativeelements}prestashop>_e873d89b2c012e5f3d22f8540180bd0e'] = 'Configuración de temas'; // Theme Settings +$_MODULE['<{creativeelements}prestashop>_c14300d0aebc9cf1a8da9f6bd83e700c'] = 'Lista de fuentes'; // Fonts List +$_MODULE['<{creativeelements}prestashop>_630bd947659ab07c114e5ccef701a7af'] = 'Agregar nueva fuente'; // Add New Font +$_MODULE['<{creativeelements}prestashop>_486841ebd4c0bc17e6fc279da5268645'] = 'Editar fuente'; // Edit Font +$_MODULE['<{creativeelements}prestashop>_8ab72d49e1108ccb328f74491ea49c03'] = 'Nombre de la fuente'; // Font Name +$_MODULE['<{creativeelements}prestashop>_729d37b0c80d21143c60b3a877b88f43'] = 'Ingrese la familia de fuentes'; // Enter Font Family +$_MODULE['<{creativeelements}prestashop>_e52ada68529abb857b61e9f2cf3ea369'] = 'Archivos de fuentes'; // Font Files +$_MODULE['<{creativeelements}prestashop>_2eb11617fc1cce6c73173d413f9c271c'] = 'Agregar variación de fuente'; // Add Font Variation +$_MODULE['<{creativeelements}prestashop>_729a51874fe901b092899e9e8b31c97a'] = '¿Estás seguro?'; // Are you sure? +$_MODULE['<{creativeelements}prestashop>_0d9c8dfe174c5be68d35a4055031de0d'] = 'Archivo %s'; // %s File +$_MODULE['<{creativeelements}prestashop>_d68a6107129a6d62c76f49d59ffe9800'] = 'Web Open Font Format, utilizado por los navegadores modernos'; // The Web Open Font Format, Used by Modern Browsers +$_MODULE['<{creativeelements}prestashop>_73e633e5de0477512fcb1b06f8a6ab89'] = 'Web Open Font Format 2, utilizado por Super navegadores modernos'; // The Web Open Font Format 2, Used by Super Modern Browsers +$_MODULE['<{creativeelements}prestashop>_fc4106231d0296304e3cafd5d7296d12'] = 'TrueType Font, utilizadas para un mejor soporte de Safari, Android, iOS'; // TrueType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_d6abbfda58c20a18061c96fda4408779'] = 'OpenType Font, utilizadas para un mejor soporte de Safari, Android, iOS'; // OpenType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_794df3791a8c800841516007427a2aa3'] = 'Licencia'; // License +$_MODULE['<{creativeelements}prestashop>_c5985660600c4825c7a02653cdd26fe1'] = 'Activar licencia'; // Activate License +$_MODULE['<{creativeelements}prestashop>_684b15c2f38b9147cc86e0af9d62ed53'] = 'Por favor, activar su licencia para obtener acceso ilimitado a la biblioteca de plantillas.'; // Please activate your license to get unlimited access to the template library. +$_MODULE['<{creativeelements}prestashop>_4a4fdd49ee2bc115b68859296441fe43'] = 'Estado de la licencia:'; // License Status: +$_MODULE['<{creativeelements}prestashop>_924272e395a0e2d3acf641224d5c67d8'] = 'Su sitio web está activado. ¿Quiere activar este sitio web con una licencia diferente?'; // Your website is activated. Want to activate this website by a different license? +$_MODULE['<{creativeelements}prestashop>_63cfad19115e3d7777f7767827160582'] = 'Regenerar CSS'; // Regenerate CSS +$_MODULE['<{creativeelements}prestashop>_be99e107a4ef9dfbfa2f80d5d1ea1ab7'] = 'Los estilos configurados en Creative Elements se guardan en archivos CSS. Recrea esos archivos de acuerdo a los ajustes más recientes.'; // Styles set in Creative Elements are saved in CSS files. Recreate those files, according to the most recent settings. +$_MODULE['<{creativeelements}prestashop>_2846a86c26360bf5060ad147ae5e5757'] = 'Reemplazar URL'; // Replace URL +$_MODULE['<{creativeelements}prestashop>_727ce4730bb0818c4b26f8fffc8f68d9'] = 'Actualizar la dirección del sitio (URL)'; // Update Site Address (URL) +$_MODULE['<{creativeelements}prestashop>_15fa88522f8cb6d0c1fc3a9ac8010731'] = 'Es altamente recomendado que realices una copia de seguridad de tu base de datos antes de utilizar el reemplazo de URL.'; // It is strongly recommended that you backup your database before using Replace URL. +$_MODULE['<{creativeelements}prestashop>_fea9d3952e7afb5f07cee1d876907752'] = 'Para actualizar toda la información de Creative Elements, introduce las URLs antiguas y nuevas para tu instalación de PrestaShop (esto es importante para transferencia de dominios o para cambiar a ’HTTPS’).'; // Enter your old and new URLs for your PrestaShop installation, to update all Creative Elements data (Relevant for domain transfers or move to 'HTTPS'). +$_MODULE['<{creativeelements}prestashop>_e60cf455794a35c95ea8d1fef0472731'] = 'Mostrar icono de edición de frontend'; // Show Edit Icon on Frontend +$_MODULE['<{creativeelements}prestashop>_604354d5a72ee39a59fea613aef87e41'] = 'Muestra un icono edición el frontend mientras empleado tiene sesión activa. Al hacer clic en este icono, se abrirá el editor en vivo.'; // Displays an edit icon on frontend while employee has active session. By clicking on this icon the live editor will open. +$_MODULE['<{creativeelements}prestashop>_f02c1c38095f6c8954522d0ce7a22695'] = 'Limitar revisiones'; // Limit Revisions +$_MODULE['<{creativeelements}prestashop>_f1a68d0a9ec7321ff122615cda20e15c'] = 'Establece el número máximo de revisiones por contenido.'; // Sets the maximum number of revisions per content. +$_MODULE['<{creativeelements}prestashop>_ee75e395394c62827452484b6762a3c3'] = 'Deshabilitar el historial de revisiones'; // Disable Revision History +$_MODULE['<{creativeelements}prestashop>_4606c5e64748843a35978c392679fded'] = 'Desactivar colores por defecto'; // Disable Default Colors +$_MODULE['<{creativeelements}prestashop>_d43bf721ede9d072d2301ca64c8625d8'] = 'Si vous préférez hériter des couleurs de votre thème, vous pouvez désactiver cette fonctionnalité.'; // If you prefer to inherit the colors from your theme, you can disable this feature. +$_MODULE['<{creativeelements}prestashop>_e04e5c4768c5991e460a58f2cabdc6d3'] = 'Desactivar fuentes por defecto'; // Disable Default Fonts +$_MODULE['<{creativeelements}prestashop>_c9915f4e48ec2247d30af2034ec81f24'] = 'Si vous préférez hériter des polices de votre thème, vous pouvez désactiver cette fonctionnalité ici.'; // If you prefer to inherit the fonts from your theme, you can disable this feature here. +$_MODULE['<{creativeelements}prestashop>_aace7931afa15411153641f4fb5dd0fa'] = 'Impostazioni di stile'; // Style Settings +$_MODULE['<{creativeelements}prestashop>_c6083c97affb33b00b4236fc08125b4e'] = 'Puede ocultar el título en la configuración del documento. Esto funciona en los temas que tienen el selector ”%s”. Si el selector de tu tema es diferente, por favor, ponlo arriba.'; // You can hide the title at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_8a756d3484d64b800c304144d79ff78e'] = 'Selector de envoltorio de contenido'; // Content Wrapper Selector +$_MODULE['<{creativeelements}prestashop>_4550c700c57cabfc47b677f26d598c14'] = 'Puede borrar el margen, el relleno y el ancho máximo de la envoltura del contenido en la configuración del documento. Esto funciona en los temas que tienen el selector "%s". Si el selector de tu tema es diferente, por favor, ponlo arriba.'; // You can clear margin, padding, max-width from content wrapper at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_4038e06d3f1c2ed9a8b8ba1418842203'] = 'Punto de ruptura en tableta'; // Tablet Breakpoint +$_MODULE['<{creativeelements}prestashop>_df1a7f57a6d0fa52039a36b1ee55851c'] = 'Marca el punto del salto entre dispositivos de sobremesa y tabletas. Por debajo de este punto se mostrará el diseño para tabletas (Por defecto: %dpx).'; // Sets the breakpoint between desktop and tablet devices. Below this breakpoint tablet layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_5b23136cd3711bdae57560b72e66e923'] = 'Punto de ruptura en móvil'; // Mobile Breakpoint +$_MODULE['<{creativeelements}prestashop>_4f663f113b83a55f1218b5403739d9e0'] = 'Marca el punto del salto entre tabletas y móviles. Por debajo de este punto se mostrará el diseño para móviles (Por defecto: %dpx).'; // Sets the breakpoint between tablet and mobile devices. Below this breakpoint mobile layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_9ffc3ccc968a96d902af963c6d7b4e97'] = 'Ajustes avanzados'; // Advanced Settings +$_MODULE['<{creativeelements}prestashop>_d626d902c43ae80039304aaabb577ebe'] = 'No cambie estas opciones sin experiencia, ajustes incorrectos podrían romper su sitio.'; // Do not change these options without experience, incorrect settings might break your site. +$_MODULE['<{creativeelements}prestashop>_8b682d779569cdb4f8eac8f8113882b6'] = 'Método de impresión de CSS'; // CSS Print Method +$_MODULE['<{creativeelements}prestashop>_86921a38b6b13f5bac7815b64261bfc3'] = 'Usa ficheros externos de CSS para todas las hojas de estilo generadas. Escoge esta configuración para un mejor rendimiento (recomendado).'; // Use external CSS files for all generated stylesheets. Choose this setting for better performance (recommended). +$_MODULE['<{creativeelements}prestashop>_df46e4e4a37b992335889fe0bcc9fbc2'] = 'Archivo externo'; // External File +$_MODULE['<{creativeelements}prestashop>_8654f2b13455edc295f7ce17c14c9887'] = 'Incrustación interna'; // Internal Embedding +$_MODULE['<{creativeelements}prestashop>_b49eb11b7c3a0762a6df47f7424c4d99'] = 'Controladores de edición'; // Editing Handles +$_MODULE['<{creativeelements}prestashop>_8fabaa06bc2da9ec5a25a0b9ee554e99'] = 'Mostrar los controladores de edición cuando se pasa por encima del botón editar del botón'; // Show editing handles when hovering over the element edit button +$_MODULE['<{creativeelements}prestashop>_7e6a43ce8ac6c832c95ecedb00a6064e'] = 'Excluir categorías del widget del módulo'; // Exclude Categories from Module widget +$_MODULE['<{creativeelements}prestashop>_723d690837af8a91be989751fadab183'] = 'Cargar biblioteca FontAwesome'; // Load FontAwesome Library +$_MODULE['<{creativeelements}prestashop>_c1a1c7d11028c7a1436198ca59331944'] = 'FontAwesome le da iconos vectoriales escalables que al instante se pueden personalizar - el tamaño, color, sombra, y todo lo que puede hacerse con el poder de CSS.'; // FontAwesome gives you scalable vector icons that can instantly be customized - size, color, drop shadow, and anything that can be done with the power of CSS. +$_MODULE['<{creativeelements}prestashop>_0016eea9e78adc9ba06072ac9b6a1b75'] = 'Cargar biblioteca Waypoints'; // Load Waypoints Library +$_MODULE['<{creativeelements}prestashop>_498b278c8d4479bdedb1bb77be02b4f2'] = 'La biblioteca de waypoints es la forma más sencilla de activar una función cuando se desplaza a un elemento.'; // Waypoints library is the easiest way to trigger a function when you scroll to an element. +$_MODULE['<{creativeelements}prestashop>_03ee559731e9434a9740773f516a38df'] = 'Cargar biblioteca Slick'; // Load Slick Library +$_MODULE['<{creativeelements}prestashop>_050ddbb779fbf2dc5b64861639b5eb41'] = 'Slick es un plugin de jQuery para crear amigables carruseles / deslizadores totalmente personalizables, sensibles y móviles que funcionan con cualquier elemento HTML.'; // Slick is a jQuery plugin for creating fully customizable, responsive and mobile friendly carousels/sliders that work with any html elements. +$_MODULE['<{creativeelements}prestashop>_4829262cecb9828817b33e0f9c907f91'] = 'Experimentos'; // Experiments +$_MODULE['<{creativeelements}prestashop>_84f8df76775e37ae5a4a2b857220f90b'] = 'Acceda a funciones nuevas y experimentales de Creative Elements antes de su lanzamiento oficial. Como estas características aún están en desarrollo, es probable que cambien, evolucionen o incluso se eliminen por completo.'; // Access new and experimental features from Creative Elements before they're officially released. As these features are still in development, they are likely to change, evolve or even be removed altogether. +$_MODULE['<{creativeelements}prestashop>_f1dbba0d570fb6cc1b5dcf7c2f7cb374'] = 'Eliminar elementos ocultos'; // Remove Hidden Elements +$_MODULE['<{creativeelements}prestashop>_cafe73a877fb194de8fe2fb509502f61'] = 'Cuando oculta elementos en la "pestaña Avanzado / sección de adaptabilidad", su marcado se eliminará del DOM.'; // When you hide elements on "Advanced tab / Responsive section" their markup will be removed from DOM. +$_MODULE['<{creativeelements}prestashop>_0000495ba408d49c02c05686a067646c'] = 'Sección de visibilidad'; // Visibility Section +$_MODULE['<{creativeelements}prestashop>_d2d862f4b4341afe63f8164ca80f0373'] = 'Si vous souhaitez programmer des éléments ou les filtrer par groupes de clients sélectionnés, cette fonctionnalité vous sera utile. Il apparaîtra sous l’onglet Avancé.'; // If you would like to schedule elements or filter them by selected customer groups, then this feature will be handy. It will appear under Advanced tab. +$_MODULE['<{creativeelements}prestashop>_25f7347236b51a5eae4ba01a7862cb55'] = 'Programar'; // Schedule +$_MODULE['<{creativeelements}prestashop>_08b02383dce834815c99539f02f0fd89'] = 'Grupo de clientes'; // Customer Group +$_MODULE['<{creativeelements}prestashop>_1c0d77992f834a9640d9e094e7a73fb9'] = 'Espectáculo para'; // Show for +$_MODULE['<{creativeelements}prestashop>_449ca279e02730b90da2695e4261c154'] = 'Ocultar para'; // Hide for +$_MODULE['<{creativeelements}prestashop>_777475dcd2749b94375fe07762d9d76f'] = 'Seleccionar...'; // Select... +$_MODULE['<{creativeelements}prestashop>_e18056ef5b17ae8dda5f90f67c9e8533'] = '%s año'; // %s year +$_MODULE['<{creativeelements}prestashop>_2fa7fca44cb89fd199a257dc02b3b1e5'] = '%s años'; // %s years +$_MODULE['<{creativeelements}prestashop>_f44e927446959585ff1c59871ec2d5a3'] = '%s mes'; // %s month +$_MODULE['<{creativeelements}prestashop>_7a9362f7b668d13007042dfeb04377f0'] = '%s meses'; // %s months +$_MODULE['<{creativeelements}prestashop>_059fb9aa56ea0f60a309243c0f1b7584'] = '%s semana'; // %s week +$_MODULE['<{creativeelements}prestashop>_a6a22726bcd37b84a44dcb29adcd9028'] = '%s semanas'; // %s weeks +$_MODULE['<{creativeelements}prestashop>_cc0c6aa19f38a763c6138695ea957edc'] = '%s día'; // %s day +$_MODULE['<{creativeelements}prestashop>_b95227314c538383cf221dae2172b047'] = '%s dias'; // %s days +$_MODULE['<{creativeelements}prestashop>_0aaff30699e63ba9bf8133d98b1d6832'] = '%s hora'; // %s hour +$_MODULE['<{creativeelements}prestashop>_99e8d9aecac65d9833e10a2d3bbee4f7'] = '%s horas'; // %s hours +$_MODULE['<{creativeelements}prestashop>_b3f066d7b12126d9a43fc20a691994bb'] = '%s min'; // %s min +$_MODULE['<{creativeelements}prestashop>_9bd57b1597a0cd2a2d7e9a10ea01b41d'] = '%s mins'; // %s mins +$_MODULE['<{creativeelements}prestashop>_6c5505b168fe8a3f3acc9ab255fc8f29'] = '%s segundo'; // %s sec +$_MODULE['<{creativeelements}prestashop>_0174b36c22db64939888c723079becd9'] = '%s segundos'; // %s secs +$_MODULE['<{creativeelements}prestashop>_88183b946cc5f0e8c96b2e66e1c74a7e'] = 'Desconocido'; // Unknown +$_MODULE['<{creativeelements}prestashop>_89ee97029bec768357951c7583ff541e'] = '¿No funciona? Puede configurar un selector diferente para el contenedor de contenido enAjustes del sitio.'; // Not working? You can set a different selector for the content wrapper in the Settings page. +$_MODULE['<{creativeelements}prestashop>_00d23a76e43b46dae9ec7aa9dcbebb32'] = 'Activado'; // Enabled +$_MODULE['<{creativeelements}prestashop>_b9f5c797ebbf55adccdd8539a65a0241'] = 'Desactivado'; // Disabled +$_MODULE['<{creativeelements}prestashop>_303efff2ee73c68202a22c21e900df83'] = 'http://docs.webshopworks.com/creative-elements?gt=es'; +$_MODULE['<{creativeelements}prestashop>_4994a8ffeba4ac3140beb89e8d41f174'] = 'Idioma'; // Language +$_MODULE['<{creativeelements}prestashop>_c10ffb2e13c40ebe8294e296b7d499b2'] = 'Efectos de scroll'; // Scrolling Effects +$_MODULE['<{creativeelements}prestashop>_1e7581a778b92c0a0090b551a1a8d068'] = 'Scroll vertical'; // Vertical Scroll +$_MODULE['<{creativeelements}prestashop>_4467c46a4d7150d5fb2079bd0fde510c'] = 'Scroll horizontal'; // Horizontal Scroll +$_MODULE['<{creativeelements}prestashop>_6f7956741d5d673ff0c8eacc8d8c961c'] = 'Transparencia'; // Transparency +$_MODULE['<{creativeelements}prestashop>_85a7cd587d6142dbfc1a4de05af7b75d'] = 'Escala'; // Scale +$_MODULE['<{creativeelements}prestashop>_a0db49ba470c1c9ae2128c3470339153'] = 'Nivel'; // Level +$_MODULE['<{creativeelements}prestashop>_f3b666f2a16c1deb05bd6aa7eacfeb92'] = 'Punto de anclaje X'; // X Anchor Point +$_MODULE['<{creativeelements}prestashop>_b41864fcc199583ca5c19b10e0afc25a'] = 'Punto de anclaje Y'; // Y Anchor Point +$_MODULE['<{creativeelements}prestashop>_85cfe2037fb50aaf0632e12e655ce3db'] = 'Aplicar efectos en'; // Apply Effects On +$_MODULE['<{creativeelements}prestashop>_31978abc991a7e1367f73b112e817c7d'] = 'Efectos relacionados con'; // Effects Relative To +$_MODULE['<{creativeelements}prestashop>_8d6f3510a5cca2c1281c9c6afe7e0da2'] = 'Vista'; // Viewport +$_MODULE['<{creativeelements}prestashop>_b670b69ddb8e225df6bb7ad005d3c33e'] = 'Toda la página'; // Entire Page +$_MODULE['<{creativeelements}prestashop>_c26f05fe62ad1f8fc2a83eddd105285b'] = 'Efectos de ratón'; // Mouse Effects +$_MODULE['<{creativeelements}prestashop>_96c30ab1599bf72dca1549df71fe32af'] = 'Seguimiento del ratón'; // Mouse Track +$_MODULE['<{creativeelements}prestashop>_8ac8e312b9397d6c7a2c5b1b63967803'] = 'Inclinación 3D'; // 3D Tilt +$_MODULE['<{creativeelements}prestashop>_fd1dd0c603be8170f9eae0be9f2f6afb'] = 'Directo'; // Direct +$_MODULE['<{creativeelements}prestashop>_d8d76e03141ed1cf0d5704df71efbfef'] = 'Opuesto'; // Opposite +$_MODULE['<{creativeelements}prestashop>_d8f6d391ba573fe747a3360afb99904d'] = 'Pegajosa'; // Sticky +$_MODULE['<{creativeelements}prestashop>_79441290f51f6ddfd0bd605d31b5d913'] = 'Pegajosa en'; // Sticky On +$_MODULE['<{creativeelements}prestashop>_6db6ce4ce0746f333c58972e1e3682bf'] = 'Efectos compensados'; // Effects Offset +$_MODULE['<{creativeelements}prestashop>_9218088d5225c7174f7299cb339ebce9'] = 'Permanecer en la columna'; // Stay In Column +$_MODULE['<{creativeelements}prestashop>_f2f52cbf3a183f750f261f615e25d622'] = 'Ocultar al desplazarse'; // Hide on Scroll +$_MODULE['<{creativeelements}prestashop>_c1171931c7b83ccac8c962e368963010'] = 'Sticked'; // Sticked +$_MODULE['<{creativeelements}prestashop>_2ff4148554480a37f85efd299df04850'] = 'Transformación'; // Transform +$_MODULE['<{creativeelements}prestashop>_33a9fad969f69834a37b94c729d98b2a'] = 'Rotación 3D'; // 3D Rotate +$_MODULE['<{creativeelements}prestashop>_b78a58fa389c15e3e9676406754bb1df'] = 'Rotación X'; // Rotate X +$_MODULE['<{creativeelements}prestashop>_0d10ed97cb17c5220132a845f6a78d0a'] = 'Rotación Y'; // Rotate Y +$_MODULE['<{creativeelements}prestashop>_a80420eef88d11f77532f1b9cb467fa3'] = 'Perspectiva'; // Perspective +$_MODULE['<{creativeelements}prestashop>_85702e5968e1616bd5c577cf306b9806'] = 'Separación X'; // Offset X +$_MODULE['<{creativeelements}prestashop>_73411f5996beaef37222d8cac0b89b71'] = 'Separación Y'; // Offset Y +$_MODULE['<{creativeelements}prestashop>_2d69a9a5782855ac84602cc45863f342'] = 'Mantener las proporciones'; // Keep Proportions +$_MODULE['<{creativeelements}prestashop>_df1195616b85f74c8828e20c5781cdd7'] = 'Escalar X'; // Scale X +$_MODULE['<{creativeelements}prestashop>_979de706f6ea1f9eb5fba71c83a56c99'] = 'Escalar Y'; // Scale Y +$_MODULE['<{creativeelements}prestashop>_2f2227d480b0c69364d7fddfecb82bd0'] = 'Inclinación'; // Skew +$_MODULE['<{creativeelements}prestashop>_8bf35b556bf5a142730e8a8ed3d8137a'] = 'Inclinación X'; // Skew X +$_MODULE['<{creativeelements}prestashop>_15c7890285219037e6f29c0814063128'] = 'Inclinación Y'; // Skew Y +$_MODULE['<{creativeelements}prestashop>_fb7d5e3a3f491ac9d3b6711daa32cd00'] = 'Voltear horizontalmente'; // Flip Horizontal +$_MODULE['<{creativeelements}prestashop>_5b83f92ddc4d4ff9e3a211c23268665d'] = 'Voltear verticalmente'; // Flip Vertical +$_MODULE['<{creativeelements}prestashop>_29d94dad2c561873cffebf8d5ee4ba0c'] = 'Activar por'; // Trigger By +$_MODULE['<{creativeelements}prestashop>_690c6e22d9a3b56d19e83710af87da0a'] = 'Añadir su propio CSS costumbre aquí'; // Add your own custom CSS here +$_MODULE['<{creativeelements}prestashop>_c5c6bcf867da29493e4bb1bd4b6b0a78'] = 'Uso "selector" al elemento contenedor de destino. Ejemplos:'; // Use "selector" to target wrapper element. Examples: +$_MODULE['<{creativeelements}prestashop>_756bcf5c0d47a6c968964d25f0eeaf57'] = "/* Para elemento principal */\nselector { color: red; }\n/* Para elemento hijo */\nselector .child-element { margin: 10px; }\n/* O usar algún selector personalizado */\n.my-class { text-align: center; }"; +$_MODULE['<{creativeelements}prestashop>_80460385b65514494dcbb9fe041905d1'] = 'Haz clic en el botón editar para cambiar este texto. Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; +$_MODULE['<{creativeelements}prestashop>_756b97abbc9f4c13c541b1adf847eaf0'] = 'Página de Facebook'; // Facebook Page +$_MODULE['<{creativeelements}prestashop>_d8a2783eec9416dc80f620f6dfba578c'] = 'Botón de Facebook'; // Facebook Button +$_MODULE['<{creativeelements}prestashop>_c859113fb39b64631ca542ac10b0a7d5'] = 'Caja de Volteo'; // Flip Box +$_MODULE['<{creativeelements}prestashop>_a601e28fb6c693bef281e5e63179674d'] = 'Llamada a la Acción'; // Call to Action +$_MODULE['<{creativeelements}prestashop>_e64465da4a42d65847b321045b155602'] = 'Cuenta atrás'; // Countdown +$_MODULE['<{creativeelements}prestashop>_c4d22d7c40de128eb983fcf5f2ae2674'] = 'Carrusel de testimonios'; // Testimonial Carousel +$_MODULE['<{creativeelements}prestashop>_dbade2f6a2f7257aa7377edb1c2f1c4a'] = 'Hotspot de Imagen'; // Image Hotspot +$_MODULE['<{creativeelements}prestashop>_0016012d63bde0bbb9a8c4e7e5ba113f'] = 'AJAX Buscar'; // AJAX Search +$_MODULE['<{creativeelements}prestashop>_b0c309bbd6756d4e0d4dbb491dee248a'] = 'TrustedShops Críticas'; // TrustedShops Reviews +$_MODULE['<{creativeelements}prestashop>_5d2d75cb0a2913351601b255eaa17bb6'] = 'Cuadrícula Producto'; // Product Grid +$_MODULE['<{creativeelements}prestashop>_aeb0c8a362126a14711eb2441769f851'] = 'Carrusel Producto'; // Product Carousel +$_MODULE['<{creativeelements}prestashop>_2e9436e79e59f39483f89ddeb4c9fac6'] = 'Caja producto'; // Product Box +$_MODULE['<{creativeelements}prestashop>_396cfc95445a375fa678d71c6657fd21'] = 'Slider de Imágenes'; // Image Slider +$_MODULE['<{creativeelements}prestashop>_1e56256dd5d600c0f0bf54ca1259139d'] = 'Suscripción de E-mail'; // Email Subscription +$_MODULE['<{creativeelements}prestashop>_2750dfebe7e01be17a0aaadf6b5effcc'] = 'Árbol de Categoría'; // Category Tree +$_MODULE['<{creativeelements}prestashop>_e55f75a29310d7b60f7ac1d390c8ae42'] = 'Módulo'; // Module +$_MODULE['<{creativeelements}prestashop>_a7c83a652241f74e9e8c13d4a8e77327'] = 'Logo del tienda'; // Shop Logo +$_MODULE['<{creativeelements}prestashop>_c62ada394e70783b9d5c00bc249af5a6'] = 'Título del tienda'; // Shop Title +$_MODULE['<{creativeelements}prestashop>_b75443a19207ed3a3552edda86536857'] = 'Carro de compras'; // Shopping Cart +$_MODULE['<{creativeelements}prestashop>_ca9085e1c300127e6d45bb7cc9a00a1c'] = 'Menú de navegación'; // Nav Menu +$_MODULE['<{creativeelements}prestashop>_6e9accb242f0c478ccd34428e96c782b'] = 'Selector de idioma'; // Language Selector +$_MODULE['<{creativeelements}prestashop>_162a8c580f44c2fe1357f6aab84ef88a'] = 'Selector de moneda'; // Currency Selector +$_MODULE['<{creativeelements}prestashop>_b9aefa40a54680bb258f9f9569290fae'] = 'Nombre del producto'; // Product Name +$_MODULE['<{creativeelements}prestashop>_646911b123e94f0fb11d711926dd2c4b'] = 'Badges del producto'; // Product Badges +$_MODULE['<{creativeelements}prestashop>_76dd13f20840d624f3da3784f9d72c92'] = 'Imágenes del producto'; // Product Images +$_MODULE['<{creativeelements}prestashop>_3c38027cd61ce6345509574bc269f54c'] = 'Imagen del producto'; // Product Image +$_MODULE['<{creativeelements}prestashop>_e4cc585947db6303293acd6e50e23abd'] = 'Precio del producto'; // Product Price +$_MODULE['<{creativeelements}prestashop>_a3598f51ebb4d31d7e7811fc0fbd358f'] = 'Valoración del producto'; // Product Rating +$_MODULE['<{creativeelements}prestashop>_4cc55681d14e73c3febdf5dd0566315c'] = 'Cuenta regresiva de descuento'; // Sale Countdown +$_MODULE['<{creativeelements}prestashop>_2eb2d7fb081e1ae3127a46c53f10119e'] = 'Imagen de marca'; // Brand Image +$_MODULE['<{creativeelements}prestashop>_d20724dd5e4e41245018a3626478e81e'] = 'Meta del producto'; // Product Meta +$_MODULE['<{creativeelements}prestashop>_36e3402e4ddef43e92b99aef016c057e'] = 'Breve descripción'; // Short Description +$_MODULE['<{creativeelements}prestashop>_c12b4ee170ad3dbeda03b91102c76da2'] = 'Variaciones de productos'; // Product Variations +$_MODULE['<{creativeelements}prestashop>_d0629ccdf9ac5d63566c3f46f375b4a8'] = 'Stock de productos'; // Product Stock +$_MODULE['<{creativeelements}prestashop>_608315af4932b03356df72ac18092446'] = 'Cantidad de producto'; // Product Quantity +$_MODULE['<{creativeelements}prestashop>_638f592f71fc3fac3351534e69f9d29f'] = 'Añadir al carrito'; // Add to Cart +$_MODULE['<{creativeelements}prestashop>_87f3cd376f8aa27326148860be759c19'] = 'Características del producto'; // Product Features +$_MODULE['<{creativeelements}prestashop>_6a5373df703ab2827a4ba7facdfcf779'] = 'Añadir a la lista de deseos'; // Add to Wishlist +$_MODULE['<{creativeelements}prestashop>_854ee576475a63775d79cbfd6e4b13b6'] = 'Descripción del producto'; // Product Description +$_MODULE['<{creativeelements}prestashop>_a1e3a46a20f81b1e21b30156a2370812'] = 'Adjuntos de productos'; // Product Attachments +$_MODULE['<{creativeelements}prestashop>_167881850315c4df68e31d56fd9dd5d9'] = 'Compartir producto'; // Product Share +$_MODULE['<{creativeelements}prestashop>_1d845dde77864747f09c10275b281f1a'] = 'Bloque de producto'; // Product Block +$_MODULE['<{creativeelements}prestashop>_01f00f96696da28ccd6583f819385e71'] = 'Ruta del texto'; // Text Path +$_MODULE['<{creativeelements}prestashop>_03ac26b00f3492797a3c8d54f0337c9b'] = 'Añada aquí su texto curvo'; // Add Your Curvy Text Here +$_MODULE['<{creativeelements}prestashop>_233017ea023bfe5ee5cebc8a7970f06c'] = 'Tipo de ruta'; // Path Type +$_MODULE['<{creativeelements}prestashop>_d911b34823c7674c292556dc56148c27'] = 'Onda'; // Wave +$_MODULE['<{creativeelements}prestashop>_2b73f91683611c489560a1d163e37902'] = 'Arco'; // Arc +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Círculo'; // Circle +$_MODULE['<{creativeelements}prestashop>_4803e6b9e63dabf04de980788d6a13c4'] = 'Línea'; // Line +$_MODULE['<{creativeelements}prestashop>_01733ae48f19ae284165e55dd2934b61'] = 'Óvalo'; // Oval +$_MODULE['<{creativeelements}prestashop>_c978545ade9f5ce21bfa0353c04feda9'] = 'Espiral'; // Spiral +$_MODULE['<{creativeelements}prestashop>_22c6682f4ddd4efe02aafd67ba1896e6'] = '¿Quieres crear rutas personalizadas de texto?'; // Want to create custom text paths? +$_MODULE['<{creativeelements}prestashop>_e96dee4d699a25d7033bbd706a416ee9'] = 'Dirección del texto'; // Text Direction +$_MODULE['<{creativeelements}prestashop>_ae2023195822977b20f4557cb2c231e5'] = 'Mostrar ruta'; // Show Path +$_MODULE['<{creativeelements}prestashop>_a11b6ae4ff43bc27097fa1899010cd4a'] = 'Espacio entre palabras'; // Word Spacing +$_MODULE['<{creativeelements}prestashop>_c9fc5918d5031ae2a84dc85c1392d236'] = 'Punto de inicio'; // Starting Point +$_MODULE['<{creativeelements}prestashop>_ac70412e939d72a9234cdebb1af5867b'] = 'Ruta'; // Path +$_MODULE['<{creativeelements}prestashop>_8e763d9065582268c9ffa345a3f81f5f'] = 'Trazo'; // Stroke +$_MODULE['<{creativeelements}prestashop>_e72cd05de3b0f5e87e01f1043d250226'] = 'Trazo del texto'; // Text Stroke +$_MODULE['<{creativeelements}prestashop>_fb4e932947262c76d46e7671a667eb03'] = 'Color del trazo'; // Stroke Color +$_MODULE['<{creativeelements}prestashop>_1ec22a9ec8fc7840e53abdf9f2761db4'] = 'Pegue la URL de la página de Facebook.'; // Paste the URL of the Facebook page. +$_MODULE['<{creativeelements}prestashop>_3d1f92a565d3b1a61880236e33c49bf3'] = 'Cronograma'; // Timeline +$_MODULE['<{creativeelements}prestashop>_87f9f735a1d36793ceaecd4e47124b63'] = 'Eventos'; // Events +$_MODULE['<{creativeelements}prestashop>_41de6d6cfb8953c021bbe4ba0701c8a1'] = 'Mensajes'; // Messages +$_MODULE['<{creativeelements}prestashop>_f4629a6a3f69f39737e590fe9072a20f'] = 'Encabezado pequeño'; // Small Header +$_MODULE['<{creativeelements}prestashop>_7e109af3848e4849f6230a1a04d45859'] = 'Fotos de perfil'; // Profile Photos +$_MODULE['<{creativeelements}prestashop>_cd7c1196d2d970d5cfb3f84af649a5ee'] = 'Botón CTA personalizado'; // Custom CTA Button +$_MODULE['<{creativeelements}prestashop>_98b82c200a2e309b24cb481970f3fcc4'] = 'Gusta'; // Like +$_MODULE['<{creativeelements}prestashop>_cab1fe09bb50a19ae3975657afeec8f4'] = 'Recomendar'; // Recommend +$_MODULE['<{creativeelements}prestashop>_eb6d8ae6f20283755b339c0dc273988b'] = 'Estándar'; // Standard +$_MODULE['<{creativeelements}prestashop>_85967e33b3ebf9c859f2b50ef9bf151d'] = 'Recuento de botón'; // Button Count +$_MODULE['<{creativeelements}prestashop>_f2f81540eb0898cdbbbbeae97e17c3e0'] = 'Recuento de cajas'; // Box Count +$_MODULE['<{creativeelements}prestashop>_f4a216cd03ef98f742fa9dffedc6f1f9'] = 'Botón de compartir'; // Share Button +$_MODULE['<{creativeelements}prestashop>_e64df1d7c22b9638f084ce8a4aff3ff3'] = 'URL de destino'; // Target URL +$_MODULE['<{creativeelements}prestashop>_f88589c3e803217e3f6fe9d8e740e6e8'] = 'Página actual'; // Current Page +$_MODULE['<{creativeelements}prestashop>_5835bab1ade0060909e31a06af2e2cde'] = 'Frente'; // Front +$_MODULE['<{creativeelements}prestashop>_0557fa923dcee4d0f86b1409f5c2167f'] = 'Atrás'; // Back +$_MODULE['<{creativeelements}prestashop>_2a458f5ab135bec8376047e4fd5bec7b'] = 'Elemento gráfico'; // Graphic Element +$_MODULE['<{creativeelements}prestashop>_714341d9339756588d1dc724991c2b9a'] = 'Haga clic aquí'; // Click Here +$_MODULE['<{creativeelements}prestashop>_63295c99f929bee9eed51f39328abd5e'] = 'Aplicar Enlace en'; // Apply Link on +$_MODULE['<{creativeelements}prestashop>_eceba382c8d2965c9969f3c50e38fd1d'] = 'Solo en Botón'; // Button Only +$_MODULE['<{creativeelements}prestashop>_3974ce153db569952e044cdfdfbc83cd'] = 'Caja Entera'; // Whole Box +$_MODULE['<{creativeelements}prestashop>_0f714135a0bce5c010291b55524b0f2e'] = 'Efecto de Volteo'; // Flip Effect +$_MODULE['<{creativeelements}prestashop>_67727c06d3264f409d0e11009b322911'] = 'Dirección de Volteo'; // Flip Direction +$_MODULE['<{creativeelements}prestashop>_258f49887ef8d14ac268c92b02503aaa'] = 'Arriba'; // Up +$_MODULE['<{creativeelements}prestashop>_08a38277b0309070706f6652eeae9a53'] = 'Abajo'; // Down +$_MODULE['<{creativeelements}prestashop>_a0157ad2638ad23725b7ab940ea92500'] = 'Profundidad 3D'; // 3D Depth +$_MODULE['<{creativeelements}prestashop>_3cfce651e667ab85486dd42a8185f98a'] = 'Caja'; // Box +$_MODULE['<{creativeelements}prestashop>_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normal'; // Normal +$_MODULE['<{creativeelements}prestashop>_eee0168be69b854c20621fc6f01cc3fc'] = 'Encima'; // Hover +$_MODULE['<{creativeelements}prestashop>_e24ee2487879116dcab772c0ac4fe341'] = 'Foco'; // Focus +$_MODULE['<{creativeelements}prestashop>_f309bf4bccf801eb2fe4541107671578'] = 'Cinta'; // Ribbon +$_MODULE['<{creativeelements}prestashop>_5b469fd01889ec12f1e84c6e66829fc1'] = 'Encima'; // Above +$_MODULE['<{creativeelements}prestashop>_45b5de8fb2930cf2cc1dc2c6d20bd72a'] = 'Texto del Botón'; // Button Text +$_MODULE['<{creativeelements}prestashop>_de6e9435dd82a9bf0416380e2b093166'] = 'Icono de Botón'; // Button Icon +$_MODULE['<{creativeelements}prestashop>_d6fec62129acbb27535963e1bab40acc'] = 'Min. Anchura'; // Min. Width +$_MODULE['<{creativeelements}prestashop>_a282e4564a52e78b82e904ffb22ec983'] = 'Min. Altura'; // Min. Height +$_MODULE['<{creativeelements}prestashop>_d35b51b639528d580362ca7042de6a0e'] = 'Clásico'; // Classic +$_MODULE['<{creativeelements}prestashop>_c795dfff10a7c952f4c5438951e9ece9'] = 'Abarcar'; // Cover +$_MODULE['<{creativeelements}prestashop>_021cee4b91f9ef9dccdbc396c88fbc96'] = 'Posición Vertical'; // Vertical Position +$_MODULE['<{creativeelements}prestashop>_3338cc479e22ce066463f8a571039a1b'] = 'Efectos de Activación'; // Hover Effects +$_MODULE['<{creativeelements}prestashop>_d7f3c1bb6150f237c08a4ab1e69c5ba9'] = 'Animación secuenciada'; // Sequenced Animation +$_MODULE['<{creativeelements}prestashop>_3711e805016ec3364cac6040610418ae'] = 'Color superpuesto'; // Overlay Color +$_MODULE['<{creativeelements}prestashop>_86176e1d3dd3649de183dc33b7750f62'] = 'Modo de Fundido'; // Blend Mode +$_MODULE['<{creativeelements}prestashop>_a585b417342e2b83baa9e0c91631b635'] = 'Durée de transition'; // Transition Duration +$_MODULE['<{creativeelements}prestashop>_14c841eea7774b78caf79c58989f9625'] = 'Fecha de vencimiento'; // Due Date +$_MODULE['<{creativeelements}prestashop>_5e27ff9d1365046388c9422316d0aecb'] = 'Fecha configurada según su zona horaria: %s.'; // Date set according to your timezone: %s. +$_MODULE['<{creativeelements}prestashop>_e807d3ccf8d24c8c1a3d86db5da78da8'] = 'Dias'; // Days +$_MODULE['<{creativeelements}prestashop>_6a7e73161603d87b26a8eac49dab0a9c'] = 'Horas'; // Hours +$_MODULE['<{creativeelements}prestashop>_f670ea66cfb0e90bd6090472ad692694'] = 'Minutos'; // Minutes +$_MODULE['<{creativeelements}prestashop>_8f19a8c7566af54ea8981029730e5465'] = 'Segundos'; // Seconds +$_MODULE['<{creativeelements}prestashop>_91e23f92acf00ad0c0a49d05a0412473'] = 'Etiqueta personalizada'; // Custom Label +$_MODULE['<{creativeelements}prestashop>_3c1bb91f28c38aed22a0b45bc185efda'] = 'Acciones después de expirar'; // Actions After Expire +$_MODULE['<{creativeelements}prestashop>_4202ef115ebede37eb22297113f5fb32'] = 'Redirigir'; // Redirect +$_MODULE['<{creativeelements}prestashop>_dea4346d3e834aa308004b9d9a3bddd0'] = 'Mostrar mensaje'; // Show Message +$_MODULE['<{creativeelements}prestashop>_13ea583f6474cdce6c0c9b289b652ffe'] = 'Testimonios'; // Testimonials +$_MODULE['<{creativeelements}prestashop>_9a56fece0f74241ee0ad926dae7142af'] = 'Imagen en línea'; // Image Inline +$_MODULE['<{creativeelements}prestashop>_6d8a959b6100d1127c23225c11fa883b'] = 'Imagen apilada'; // Image Stacked +$_MODULE['<{creativeelements}prestashop>_0feb1fedcd7c19a716f395aaaee18724'] = 'Imagen de arriba'; // Image Above +$_MODULE['<{creativeelements}prestashop>_225bf3d9290b5f536b2e442259e78652'] = 'Carrusel'; // Carousel +$_MODULE['<{creativeelements}prestashop>_11b2f0f6f0bc356b0016cef1f65d43f7'] = 'Elementos de Hotspot'; // Hotspots +$_MODULE['<{creativeelements}prestashop>_1ba9660cdf805a4d401168d890e267f0'] = 'ID de TrustedShops'; // TrustedShops Id +$_MODULE['<{creativeelements}prestashop>_96a3a918504b7fc5557a988a909b8731'] = 'Recibió su ID de TS personal cuando se registró en Trusted Shops.'; // You received your personal TS ID when you registered with Trusted Shops. +$_MODULE['<{creativeelements}prestashop>_19c1a6a025c55f0f62ace3d44736df57'] = 'Filtrar Críticas'; // Filter Reviews +$_MODULE['<{creativeelements}prestashop>_eb92025cb8c66f1850c13a9b602a1856'] = 'Mostrar todo'; // Show all +$_MODULE['<{creativeelements}prestashop>_7ed67a77aee0decb9cad36d739c734ad'] = 'Mostrar desde %d estrellas'; // Show from %d Stars +$_MODULE['<{creativeelements}prestashop>_34e80a799d144cfe4af46815e103f017'] = 'Críticas'; // Reviews +$_MODULE['<{creativeelements}prestashop>_44749712dbec183e983dcd78a7736c41'] = 'Fecha'; // Date +$_MODULE['<{creativeelements}prestashop>_0be8406951cdfda82f00f79328cf4efc'] = 'Comentario'; // Comment +$_MODULE['<{creativeelements}prestashop>_56ee3495a32081ccb6d2376eab391bfa'] = 'Listado'; // Listing +$_MODULE['<{creativeelements}prestashop>_cf8156f1f57a8603cd6b3a28c9c2c61b'] = 'Productos Destacados'; // Featured Products +$_MODULE['<{creativeelements}prestashop>_7f82cf6868d89ca72d670092caedfb86'] = 'Ofertas'; // Prices Drop +$_MODULE['<{creativeelements}prestashop>_1529636c2dd134b028a08f7b131115b5'] = 'Novedades'; // New Products +$_MODULE['<{creativeelements}prestashop>_e4e3e01496bc4f69bb08fc7da19f6d45'] = 'Los más vendidos'; // Best Sales +$_MODULE['<{creativeelements}prestashop>_534ed3f39af7a636f6cf7a59f74fe824'] = 'Visto recientemente'; // Recently Viewed +$_MODULE['<{creativeelements}prestashop>_347da0da598694c57fff1cbaa197d615'] = 'Productos relacionados'; // Related Products +$_MODULE['<{creativeelements}prestashop>_640925b217801653719fa252c768f21e'] = 'Productos por marca'; // Products by Brand +$_MODULE['<{creativeelements}prestashop>_a086d764f6d125919a1f1ae36610be98'] = 'Productos por proveedor'; // Products by Supplier +$_MODULE['<{creativeelements}prestashop>_3543501e965f5cae13f8257f51c96bf7'] = 'Especificar productos'; // Custom Products +$_MODULE['<{creativeelements}prestashop>_8a4f5a66d0fcc9d13614516db6e3d47a'] = 'Productos en la misma categoría'; // Products in the same category +$_MODULE['<{creativeelements}prestashop>_704d59dbf9c0f798de6d48d9514f8c93'] = 'Productos de la misma marca'; // Products with the same brand +$_MODULE['<{creativeelements}prestashop>_39a3224a7760b9e3963f1d91b2a1679c'] = 'Productos del mismo proveedor'; // Products with the same supplier +$_MODULE['<{creativeelements}prestashop>_64b7a126e62d47bb341dff4b51ef8ee4'] = 'Producto actual'; // Current Product +$_MODULE['<{creativeelements}prestashop>_068f80c7519d0528fb08e82137a72131'] = 'Productos'; // Products +$_MODULE['<{creativeelements}prestashop>_deb10517653c255364175796ace3553f'] = 'Producto'; // Product +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Categoría'; // Category +$_MODULE['<{creativeelements}prestashop>_e22269bb51f9f2394e148716babbafbb'] = 'Popularidad'; // Popularity +$_MODULE['<{creativeelements}prestashop>_f8a385c7fdc1e711a02ad3054f7d6107'] = 'El volumen de ventas'; // Sales Volume +$_MODULE['<{creativeelements}prestashop>_885b3c534ec909cf87987897bfba2235'] = 'Llegada'; // Arrival +$_MODULE['<{creativeelements}prestashop>_78d3b698da1e3dead203cce8f05e98d9'] = 'Dirección de orden'; // Order Direction +$_MODULE['<{creativeelements}prestashop>_cf3fb1ff52ea1eed3347ac5401ee7f0c'] = 'Ascendente'; // Ascending +$_MODULE['<{creativeelements}prestashop>_e3cf5ac19407b1a62c6fccaff675a53b'] = 'Descendente'; // Descending +$_MODULE['<{creativeelements}prestashop>_bac39878c1766a7a8552263903b9eeb9'] = 'Aleatorizar'; // Randomize +$_MODULE['<{creativeelements}prestashop>_5d1dba09dcca2334ab1c3345824e2141'] = 'Límite de producto'; // Product Limit +$_MODULE['<{creativeelements}prestashop>_9e9116fc9c6c97bf62e851175f2be9a1'] = 'Segunda imagen'; // Second Image +$_MODULE['<{creativeelements}prestashop>_21c9820a0ca58c27fc6c2da73e1a2641'] = 'Mostrar segunda imagen al pasar el mouse si existe'; // Show second image on hover if exists +$_MODULE['<{creativeelements}prestashop>_8df278efb191bfec176ff8dd42668fa9'] = 'Max. Longitud'; // Max. Length +$_MODULE['<{creativeelements}prestashop>_d090bb34c5334e3f8307d4d14295dbc0'] = 'Precio regular'; // Regular Price +$_MODULE['<{creativeelements}prestashop>_ff5627f178b47dbd65d0cc229a956c4e'] = 'Insignias'; // Badges +$_MODULE['<{creativeelements}prestashop>_f2cd171bd42220283b7a595c3ff2aaaf'] = 'Descuento'; // Sale +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Nuevo'; // New +$_MODULE['<{creativeelements}prestashop>_4492081ca02b059f9e8af4ddaf0f7292'] = 'Paquete'; // Pack +$_MODULE['<{creativeelements}prestashop>_2ef464d50f6acd767fb3424910995218'] = 'Out-of-Stock'; // Out-of-Stock +$_MODULE['<{creativeelements}prestashop>_50155057b32fd0eac6419c9303a484a6'] = 'Espacio entre filas'; // Rows Gap +$_MODULE['<{creativeelements}prestashop>_72f2d9457fc51fdf260b4bc7a467d537'] = 'Permitir multilínea'; // Allow Multiline +$_MODULE['<{creativeelements}prestashop>_fb5befd93e30eba6a71fef4b32a65e9a'] = 'Distancia superior'; // Top Distance +$_MODULE['<{creativeelements}prestashop>_271e53cc1d1dfb05e14b2dc83b4edb9e'] = 'Distancia izquierda'; // Left Distance +$_MODULE['<{creativeelements}prestashop>_965cbdf786f774c2d426dcc19a039aa4'] = 'Distancia derecha'; // Right Distance +$_MODULE['<{creativeelements}prestashop>_3f65d6e17a11466983fd177702cf6a71'] = 'Formulario de contacto'; // Contact Form +$_MODULE['<{creativeelements}prestashop>_3481dc97ec8ba3c605cdc753aff1fcf0'] = 'Campos del formulario'; // Form Fields +$_MODULE['<{creativeelements}prestashop>_e0626222614bdee31951d84c64e5e9ff'] = 'Seleccionar'; // Select +$_MODULE['<{creativeelements}prestashop>_b021df6aac4654c454f46c77646e745f'] = 'Etiqueta'; // Label +$_MODULE['<{creativeelements}prestashop>_68753d36ec0c4d7768b20993268d68d1'] = 'Placeholder'; // Placeholder +$_MODULE['<{creativeelements}prestashop>_530f488f7a9800411efc6926ab189708'] = 'Filas'; // Rows +$_MODULE['<{creativeelements}prestashop>_902b0d55fddef6f8d651fe1035b7d4bd'] = 'Error'; // Error +$_MODULE['<{creativeelements}prestashop>_4f8222964f9a317cef99dddc23a121bd'] = 'Casilla de verificación'; // Checkbox +$_MODULE['<{creativeelements}prestashop>_b22aeaf14deafb2ea0d4517349e59a8c'] = 'Configuraciones de Carrusel'; // Carousel Settings +$_MODULE['<{creativeelements}prestashop>_44877c6aa8e93fa5a91c9361211464fb'] = 'Velocidad'; // Speed +$_MODULE['<{creativeelements}prestashop>_70ab55fc8ac90620143b01c453be77a3'] = 'Repetir indefinidamente'; // Loop forever +$_MODULE['<{creativeelements}prestashop>_52c697d185b28f19449ff8a4755f7d20'] = 'Lista de Diapositivas'; // Slides List +$_MODULE['<{creativeelements}prestashop>_ceb94b5ba288f75b442e17df5e2f386e'] = 'Configurar Módulo'; // Configure Module +$_MODULE['<{creativeelements}prestashop>_fafd952418c73bbc20286f8b0ec5bd6a'] = 'Categoría Raíz'; // Category Root +$_MODULE['<{creativeelements}prestashop>_76519eb2c98e529ec632474488e618d0'] = 'Categoría de Inicio'; // Home Category +$_MODULE['<{creativeelements}prestashop>_7e95adf6587633010eba9b602dc43817'] = 'Categoría Actual'; // Current Category +$_MODULE['<{creativeelements}prestashop>_4e98e60e38a29ab7bd94ea815c4f2ef2'] = 'Categoría Padre'; // Parent Category +$_MODULE['<{creativeelements}prestashop>_ff571d9fd8c0039b08b1a6106f650e70'] = 'Profundidad Máxima'; // Maximum Depth +$_MODULE['<{creativeelements}prestashop>_6b46ae48421828d9973deec5fa9aa0c3'] = 'Ordenar'; // Sort +$_MODULE['<{creativeelements}prestashop>_2e958161e121e44beb3cc40325adf32a'] = 'Por Nombre'; // By Name +$_MODULE['<{creativeelements}prestashop>_7d7ab8b7ee9f5fa61c94baca04eab51c'] = 'Por Posición'; // By Position +$_MODULE['<{creativeelements}prestashop>_c20cc8f5bb7d26404f80b1c990c8a7fd'] = 'Orden de Clasificación'; // Sort Order +$_MODULE['<{creativeelements}prestashop>_6404a73edb680a8c8ef91c6604295a9f'] = 'Crear nuevo slider'; // Create New Slider +$_MODULE['<{creativeelements}prestashop>_50dbffc1e2883d38ccf6841e2bb32041'] = 'Nombra tu nuevo slider'; // Name your new slider +$_MODULE['<{creativeelements}prestashop>_2d9b9a764fb0be4be10e1b2fce63f561'] = 'Slider'; // Slider +$_MODULE['<{creativeelements}prestashop>_3c311933c000b6aab612c1f5944f4388'] = 'Editar slider'; // Edit Slider +$_MODULE['<{creativeelements}prestashop>_cd4bb13b29348d29bad8b60ca5358726'] = 'Es posible que los cambios que realizó no se guarden, ¿está seguro de que desea cerrar?'; // Changes you made may not be saved, are you sure you want to close? +$_MODULE['<{creativeelements}prestashop>_b9b371458ab7c314f88b81c553f6ce51'] = 'Hook'; // Hook +$_MODULE['<{creativeelements}prestashop>_e6c8da8ca137d6c8c67d2911cb39a7df'] = 'Especifique el gancho requerido si es necesario.'; // Specify the required hook if needed. +$_MODULE['<{creativeelements}prestashop>_1bacb9caa60813ee730288d7dd95e7fc'] = 'Sitio URL'; // Site URL +$_MODULE['<{creativeelements}prestashop>_30fc6bbba82125243ecf4ddb27fee645'] = 'Minimalista'; // Minimal +$_MODULE['<{creativeelements}prestashop>_4d5098c1fcd4aad3e501e7d48ba6678a'] = 'Barra superior'; // Topbar +$_MODULE['<{creativeelements}prestashop>_324118a6721dd6b8a9b9f4e327df2bf5'] = 'Input'; // Input +$_MODULE['<{creativeelements}prestashop>_3601146c4e948c32b6424d2c0a7f0118'] = 'Precio'; // Price +$_MODULE['<{creativeelements}prestashop>_a6b9b2b91d590b3b3ee18a918f1e0019'] = 'Lista de resultados'; // Result List +$_MODULE['<{creativeelements}prestashop>_fad52b41b8afc9dd3abfe62ddf2619ad'] = 'Lineas maximas'; // Max Lines +$_MODULE['<{creativeelements}prestashop>_0b60a73d19a81f2c1d7317facbb190cb'] = 'Tamaño de ícono'; // Icon Size +$_MODULE['<{creativeelements}prestashop>_d865317d1c523409ecfeb7fe4b36b022'] = 'Tamaño del borde'; // Border Size +$_MODULE['<{creativeelements}prestashop>_219ff7705d67d0c798779951dcf82e95'] = 'Barra lateral'; // Sidebar +$_MODULE['<{creativeelements}prestashop>_4eb86eb205d6b3d881389109cf04f5a2'] = 'Mensaje vacío'; // Empty Message +$_MODULE['<{creativeelements}prestashop>_47fffe3e93fbb9948af64f5669fa228a'] = 'No hay productos en el carrito.'; // No products in the cart. +$_MODULE['<{creativeelements}prestashop>_8fb5243396b45a73c0edda2c7216a520'] = 'Precio de envío'; // Shipping Price +$_MODULE['<{creativeelements}prestashop>_6ab3dc1c702beaee933398ab684ed0f5'] = 'Indicador de artículos'; // Items Indicator +$_MODULE['<{creativeelements}prestashop>_b6230dfc594205d0ea15d5890ac22d7f'] = 'Burbuja'; // Bubble +$_MODULE['<{creativeelements}prestashop>_76d19c2a8909c1336a839cc4aa86fa71'] = 'Ocultar vacío'; // Hide Empty +$_MODULE['<{creativeelements}prestashop>_2194aaec8cc7086ab0e93f74547e5f53'] = 'Subtotal'; // Subtotal +$_MODULE['<{creativeelements}prestashop>_4e0604a7752f38f11cc085a88d86560f'] = 'Añadir al carrito Acción'; // Add To Cart Action +$_MODULE['<{creativeelements}prestashop>_4766ca6cee31e96506d90b68e2dcd095'] = 'Mostrar modal'; // Show Modal +$_MODULE['<{creativeelements}prestashop>_bde17a3981c83c8c5967d989f40a7a27'] = 'Abrir carrito de compras'; // Open Shopping Cart +$_MODULE['<{creativeelements}prestashop>_b54ebc45d5968196122274ca0d93d849'] = 'Atributos del producto'; // Product Attributes +$_MODULE['<{creativeelements}prestashop>_488b35d8ad1e08e668ac0f2d3d463f68'] = 'Quitar ícono de elemento'; // Remove Item Icon +$_MODULE['<{creativeelements}prestashop>_290612199861c31d1036b185b4e69b75'] = 'Sumario'; // Summary +$_MODULE['<{creativeelements}prestashop>_5b3ec15499a125805b5bbf8e4afcec8c'] = 'Botones'; // Buttons +$_MODULE['<{creativeelements}prestashop>_59fc69e031ecb0f82efe467fd6692383'] = 'Ver el carro'; // View Cart +$_MODULE['<{creativeelements}prestashop>_e404dd0bece5f7c53d80edaa70513eec'] = 'Menú principal'; // Main Menu +$_MODULE['<{creativeelements}prestashop>_b5750478c3c490d2c1df5dfdfdd6b7a4'] = 'Lista de enlaces'; // Link List +$_MODULE['<{creativeelements}prestashop>_3f2a535406fb0b67258851e0b8816caa'] = 'Vaya al módulo %s para administrar los elementos de su menú.'; // Go to the %s module to manage your menu items. +$_MODULE['<{creativeelements}prestashop>_7498c445a737312f3678aa1494e01a38'] = 'Desplegable'; // Dropdown +$_MODULE['<{creativeelements}prestashop>_61cf8510205077b6f5491d38cd44c0f7'] = 'Puntero'; // Pointer +$_MODULE['<{creativeelements}prestashop>_852721aa5fc738dfedff2945d71da439'] = 'Subrayar'; // Underline +$_MODULE['<{creativeelements}prestashop>_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Overline'; // Overline +$_MODULE['<{creativeelements}prestashop>_14cc8634a5bfab35b6e853c9198925f7'] = 'Doble linea'; // Double Line +$_MODULE['<{creativeelements}prestashop>_d6b6b668dbca9d4fe774bb654226ebe3'] = 'Animación'; // Animation +$_MODULE['<{creativeelements}prestashop>_bb339e17211e92f514b07c1951d06e72'] = 'Indicador de submenú'; // Submenu Indicator +$_MODULE['<{creativeelements}prestashop>_a1e4659d43cc7eab28edeac2e9f75bc4'] = 'Alinear submenú'; // Submenu Align +$_MODULE['<{creativeelements}prestashop>_ead153a06f04c12e720c5aa0cffe0729'] = 'Mostrar submenú'; // Show Submenu +$_MODULE['<{creativeelements}prestashop>_9ccbedea8cb99c482cb42bbae12a75ea'] = 'En encima'; // On Hover +$_MODULE['<{creativeelements}prestashop>_6ddd42699e63792e32b11959de64ff6c'] = 'Al hacer clic'; // On Click +$_MODULE['<{creativeelements}prestashop>_98c9ea2e311ff0ddd10aa4a50c5cc04b'] = 'Desplegable mobile'; // Mobile Dropdown +$_MODULE['<{creativeelements}prestashop>_7129472c5eb598faf47e4e877f2618fd'] = 'Breakpoint'; // Breakpoint +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Ancho completo'; // Full Width +$_MODULE['<{creativeelements}prestashop>_29e7cdd1ed01040595b903308c492d8b'] = 'Estire el menú desplegable del menú a su ancho completo.'; // Stretch the dropdown of the menu to full width. +$_MODULE['<{creativeelements}prestashop>_91eb91e653c97c3600e5ee786226e68b'] = 'Botón de alternar'; // Toggle Button +$_MODULE['<{creativeelements}prestashop>_7aa99f13e44dd25f7de294bc71abe4ff'] = 'Hamburguesa'; // Hamburger +$_MODULE['<{creativeelements}prestashop>_f15f18ce20de4f5948ecb46b1958e7ea'] = 'Acolchado horizontal'; // Horizontal Padding +$_MODULE['<{creativeelements}prestashop>_55f2842d1d6cd77c91e84ae5e4d1aea2'] = 'Acolchado vertical'; // Vertical Padding +$_MODULE['<{creativeelements}prestashop>_0b1081024cf0544ac21de69d1b6a0f21'] = 'Ancho del puntero'; // Pointer Width +$_MODULE['<{creativeelements}prestashop>_b1c6469beab5f226ceb51402e429215e'] = 'Color del puntero'; // Pointer Color +$_MODULE['<{creativeelements}prestashop>_d11ed49f634022147a3ab4a0ac7e8f1d'] = 'En el escritorio, esto afectará al submenú. En dispositivos móviles, esto afectará a todo el menú.'; // On desktop, this will affect the submenu. On mobile, this will affect the entire menu. +$_MODULE['<{creativeelements}prestashop>_8a84bf5a983ed52ea6aca9188f21c927'] = 'Firmado en'; // Signed in +$_MODULE['<{creativeelements}prestashop>_bc910f8bdf70f29374f496f05be0330c'] = 'Primer nombre'; // First Name +$_MODULE['<{creativeelements}prestashop>_77587239bf4c54ea493c7033e1dbf636'] = 'Apellido'; // Last Name +$_MODULE['<{creativeelements}prestashop>_50346473cb92c34ef84e58f727a6a911'] = 'Menú de usuario'; // Usermenu +$_MODULE['<{creativeelements}prestashop>_d95cf4ab2cbf1dfb63f066b50558b07d'] = 'Mi cuenta'; // My account +$_MODULE['<{creativeelements}prestashop>_0fd8dc8abb2404ad11af4182f10643c1'] = 'Datos personales'; // Personal info +$_MODULE['<{creativeelements}prestashop>_284b47b0bb63ae2df3b29f0e691d6fcf'] = 'Direcciones'; // Addresses +$_MODULE['<{creativeelements}prestashop>_df96fcb565aa7ca076514dfb1f7d94a7'] = 'Nueva direccion'; // New Address +$_MODULE['<{creativeelements}prestashop>_782c8b38bce4f2f6975ca7f33ac8189b'] = 'Historial de pedidos'; // Order history +$_MODULE['<{creativeelements}prestashop>_cf3bae95c5f6023d5a10fe415b205a45'] = 'Factura por abono'; // Credit slip +$_MODULE['<{creativeelements}prestashop>_95d2137c196c7f84df5753ed78f18332'] = 'Descuento'; // My vouchers +$_MODULE['<{creativeelements}prestashop>_9b0af1b39d6dff87b095d7041924e7b8'] = 'Bandera del país'; // Country Flag +$_MODULE['<{creativeelements}prestashop>_ad68f9bafd9bf2dcf3865dac55662fd5'] = 'Código ISO'; // ISO code +$_MODULE['<{creativeelements}prestashop>_81ca343ca02154e6d9d0b1428a9dd2f6'] = 'Sin imagen'; // No Image +$_MODULE['<{creativeelements}prestashop>_e833b5e560bdc737fe850bc50d0c5f0c'] = 'Diapositivas'; // Slideshow +$_MODULE['<{creativeelements}prestashop>_a296104f0c61a9cf39f4824d05315e12'] = 'Cubo'; // Cube +$_MODULE['<{creativeelements}prestashop>_e8b4b2443c2f0e19957e1e77c3c92c12'] = 'Coverflow'; // Coverflow +$_MODULE['<{creativeelements}prestashop>_acc66e14d297c1bfc20986bf593cb054'] = 'Miniaturas'; // Thumbnails +$_MODULE['<{creativeelements}prestashop>_f63af7ab801158241f45d82e519df16d'] = 'Zoom al pasar por encima'; // Zoom on Hover +$_MODULE['<{creativeelements}prestashop>_882277bdf25efaeb8295e842ebcb3d11'] = 'Fallback'; // Fallback +$_MODULE['<{creativeelements}prestashop>_d2203cb1237cb6460cbad94564e39345'] = 'Regular'; // Regular +$_MODULE['<{creativeelements}prestashop>_19c562a36aeb455d09534f93b4f5236f'] = 'Unitario'; // Unit +$_MODULE['<{creativeelements}prestashop>_58ef6750a23ba432fc1377b7de085d9f'] = 'Impuestos excl.'; // Tax excl. +$_MODULE['<{creativeelements}prestashop>_4b78ac8eb158840e9638a3aeb26c4a9d'] = 'Impuestos'; // Tax +$_MODULE['<{creativeelements}prestashop>_104d9898c04874d0fbac36e125fa1369'] = 'Descuento'; // Discount +$_MODULE['<{creativeelements}prestashop>_a586532c728620b9fed5f6baa415ee64'] = 'Calificación media '; // Average Grade +$_MODULE['<{creativeelements}prestashop>_71d7a3826df386366c89230976b16aca'] = 'Número de comentarios'; // Comments Number +$_MODULE['<{creativeelements}prestashop>_9934bb23bbec740cca05409a9cd33d7f'] = 'Publicar comentario'; // Post Comment +$_MODULE['<{creativeelements}prestashop>_1be6f9eb563f3bf85c78b4219bf09de9'] = 'Marca'; // Brand +$_MODULE['<{creativeelements}prestashop>_91e85212ab7a0d0295d40e7b03ef4f1c'] = 'Proveedor'; // Supplier +$_MODULE['<{creativeelements}prestashop>_205b01b3197cf06688f6ed574faf5664'] = 'Plazo de entrega'; // Delivery Time +$_MODULE['<{creativeelements}prestashop>_241c3f2af65370ced61a874c5725e348'] = 'Fecha de disponibilidad'; // Availability Date +$_MODULE['<{creativeelements}prestashop>_9e2941b3c81256fac10392aaca4ccfde'] = 'Estado'; // Condition +$_MODULE['<{creativeelements}prestashop>_d95867deadfe690e40f42068d6b59df8'] = 'Referencias'; // References +$_MODULE['<{creativeelements}prestashop>_6665e3761028c84e1d228de3432229ed'] = 'Referencia'; // SKU +$_MODULE['<{creativeelements}prestashop>_3ccf74d463f8895cef06727cb9709d83'] = 'Colon'; // Colon +$_MODULE['<{creativeelements}prestashop>_0a045d39aea567664edf2daaa25860ff'] = 'Lista desplegable'; // Drop-down List +$_MODULE['<{creativeelements}prestashop>_7041d69f9024a46791714e59812fa68f'] = 'Botones de radio'; // Radio Buttons +$_MODULE['<{creativeelements}prestashop>_eaec849a5ffecf1b13b1ca2490cdb4e1'] = 'Botones de color/textura'; // Color/Texture Buttons +$_MODULE['<{creativeelements}prestashop>_c1f52fba179ff982b10e3881670b61ef'] = 'Compra ahora'; // Buy Now +$_MODULE['<{creativeelements}prestashop>_515c06a3b32dc640a16385b52ae67c56'] = 'Producto con combinaciones'; // Product with Combinations +$_MODULE['<{creativeelements}prestashop>_d248b7896bffb1d7bc56d6378930affb'] = 'Ver todos los detalles'; // View Full Details +$_MODULE['<{creativeelements}prestashop>_9abdae4fa5d93330363a88ed8a5e7946'] = 'Cursor'; // Cursor +$_MODULE['<{creativeelements}prestashop>_37b6bd7fe61d651735cec3d3b0356c66'] = 'Impar'; // Odd +$_MODULE['<{creativeelements}prestashop>_35537fbc25d87ffe59e4f35fefcd34b7'] = 'Par'; // Even +$_MODULE['<{creativeelements}prestashop>_689202409e48743b914713f96d93947c'] = 'Valor'; // Value +$_MODULE['<{creativeelements}prestashop>_eec89088ee408b80387155272b113256'] = 'Red'; // Network +$_MODULE['<{creativeelements}prestashop>_e2d9081a3961cdb83db1d1fa7582ad04'] = 'Portada del producto'; // Product Cover +$_MODULE['<{creativeelements}prestashop>_01b9e63c9fbfec3fe4863e79d46956fc'] = 'Personalización del producto'; // Product Customization +$_MODULE['<{creativeelements}prestashop>_f63e07e0b80ccecfebdc36e6fe11c876'] = 'Paquete de productos'; // Product Pack +$_MODULE['<{creativeelements}prestashop>_3b67fc912569438cec7b2cc96eb415a9'] = 'Descuentos de producto'; // Product Discounts +$_MODULE['<{creativeelements}prestashop>_87421dbd18a1eb6349fefd26db3a717d'] = 'Acciones del producto'; // Product Actions +$_MODULE['<{creativeelements}prestashop>_8bb5496d7ab4e19058067c0fa40d45ef'] = 'Disponibilidad de producto'; // Product Availability +$_MODULE['<{creativeelements}prestashop>_841368ddc1cc8ee4e5c8d010b62d3dd5'] = 'Cantidad mínima'; // Minimum Quantity +$_MODULE['<{creativeelements}prestashop>_e5c548d29f23c379b1452c40a208c445'] = 'Información adicional'; // Additional Info +$_MODULE['<{creativeelements}prestashop>_1c2df820420d0376965fb9da04eca4df'] = 'Seguridad del cliente'; // Reassurance +$_MODULE['<{creativeelements}prestashop>_75fa820aebc10bf31b310065b38447c7'] = 'Onglets produits'; // Product Tabs +$_MODULE['<{creativeelements}prestashop>_b8900d8adf598b6653bb8c071bc49a1d'] = 'Détails produit'; // Product Details +$_MODULE['<{creativeelements}prestashop>_623a9a1f669b091dd76bead27c3252ed'] = 'Quantités'; // Quantities +$_MODULE['<{creativeelements}prestashop>_4594f39c6dac58760daeb19d79389576'] = 'Références spécifiques'; // Specific References +$_MODULE['<{creativeelements}prestashop>_da1b85e60d23d8d59c77d31af402acda'] = 'Accessoires produit'; // Product Accessories +$_MODULE['<{creativeelements}prestashop>_9787028383eef1dfde2f09093a851373'] = 'Pied de page produit'; // Product Footer +$_MODULE['<{creativeelements}prestashop>_9909f0bb3eb94634e3f8cd0164dbacac'] = 'Actualmente te encuentras en modo multitienda: cualquier modificación afectará a todas tus tiendas o grupo de tiendas activas.'; // You are in a multistore context: any modification will impact all your shops, or each shop of the active group. diff --git a/modules/creativeelements/translations/fr.php b/modules/creativeelements/translations/fr.php new file mode 100644 index 00000000..4788d0c8 --- /dev/null +++ b/modules/creativeelements/translations/fr.php @@ -0,0 +1,1269 @@ +_71d8a11f3a1853ee785d61e210485c28'] = 'Creative Elements 2.5 introduit les principales modifications apportées à la mise en page à l’aide de CSS Flexbox. Vos pages existantes peuvent avoir été affectées, veuillez vérifier votre page avant de la publier.'; // Creative Elements 2.5 introduces key changes to the layout using CSS Flexbox. Your existing pages might have been affected, please review your page before publishing. +$_MODULE['<{creativeelements}prestashop>_20fe34eafdf840c5f35e60d4bdfd3876'] = 'Remarque : modifications Flexbox'; // Note: Flexbox Changes +$_MODULE['<{creativeelements}prestashop>_65b3710ad99ada6c018a6d36d23ff656'] = 'Orientation verticale'; // Vertical Orientation +$_MODULE['<{creativeelements}prestashop>_dfd0a82c4bf37b1e90b690a22a20692e'] = 'Décalage'; // Offset +$_MODULE['<{creativeelements}prestashop>_1b6f6fe2f7bc999abb893e7bea077f4c'] = 'Orientation horizontale'; // Horizontal Orientation +$_MODULE['<{creativeelements}prestashop>_4457d440870ad6d42bab9082d9bf9b61'] = 'Fixe'; // Fixed +$_MODULE['<{creativeelements}prestashop>_b51ca26c6c89cfc9bec338f7a0d3e0c8'] = 'Absolu'; // Absolute +$_MODULE['<{creativeelements}prestashop>_0ee951833c18c2a27c2967d5490ab899'] = 'Le positionnement personnalisé n’est pas considéré comme une pratique exemplaire pour la conception de sites web responsive et ne devrait pas être utilisé trop souvent.'; // Custom positioning is not considered best practice for responsive web design and should not be used too frequently. +$_MODULE['<{creativeelements}prestashop>_d95c4d0d7d8f6a51de4c86208c3b35b1'] = 'Veuillez noter !'; // Please note! +$_MODULE['<{creativeelements}prestashop>_56419bfabc4807a765543d23f357d55e'] = 'Largeur personnalisée'; // Custom Width +$_MODULE['<{creativeelements}prestashop>_506555a17a9375eb4a701c4fa22ab93c'] = 'Calculer'; // Calculate +$_MODULE['<{creativeelements}prestashop>_1dcb5758bddf39c3c93a63bec8d7655a'] = 'Tri'; // Order +$_MODULE['<{creativeelements}prestashop>_f13af8b45701da62165a903a828eb26a'] = 'Tri personnalisé'; // Custom Order +$_MODULE['<{creativeelements}prestashop>_7acdf85c69cc3c5305456a293524386e'] = 'Masqué'; // Hidden +$_MODULE['<{creativeelements}prestashop>_129e8109f319870e328cc7a1d5b5cae3'] = 'Débordement'; // Overflow +$_MODULE['<{creativeelements}prestashop>_a7f391c54b912211cd510fd1098e5308'] = 'Effets de mouvement'; // Motion Effects +$_MODULE['<{creativeelements}prestashop>_cdd416d7a24537ed830732917e74410d'] = 'Alignement horizontal'; // Horizontal Align +$_MODULE['<{creativeelements}prestashop>_daa3a8e38d3417760fe479ba9a956f21'] = 'Espace uniforme'; // Space Evenly +$_MODULE['<{creativeelements}prestashop>_48ad0b896ae6d7004eb87bad5a125d71'] = 'Espace autour'; // Space Around +$_MODULE['<{creativeelements}prestashop>_692af12e687aba7f0845b9a49b515c9d'] = 'Alignement vertical'; // Vertical Align +$_MODULE['<{creativeelements}prestashop>_d7f3d71483d1424cf1edaed61be43f40'] = 'Note : le lien d’ID accepte uniquement les caractères suivants : %s'; // Note: The ID link ONLY accepts these chars: %s +$_MODULE['<{creativeelements}prestashop>_e635032a5f71d809146d3872389f5b0c'] = 'Choisir un fichier'; // Choose File +$_MODULE['<{creativeelements}prestashop>_48b6dc1949d063860c1765ebd06bbc95'] = 'URL externe'; // External URL +$_MODULE['<{creativeelements}prestashop>_801322095c363689f7620e0147e3fd14'] = 'Trier par'; // Order By +$_MODULE['<{creativeelements}prestashop>_ce5bf551379459c1c61d2a204061c455'] = 'Emplacement'; // Location +$_MODULE['<{creativeelements}prestashop>_71bfb711908ea603a75e86c3e5dbb47a'] = 'Poursuivre la lecture %s'; // Continue reading %s +$_MODULE['<{creativeelements}prestashop>_54d0d7ad584d2f68657459fa49b9fa80'] = '(plus…)'; // (more…) +$_MODULE['<{creativeelements}prestashop>template_library_42d00bc24fd43cfe3e2e30d01f39ee95'] = 'Filtrer par catégorie'; // Filter by category +$_MODULE['<{creativeelements}prestashop>template_library_a6a2a55bea8760389dfca77132905b7c'] = 'Toutes les catégories'; // All Categories +$_MODULE['<{creativeelements}prestashop>template_library_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Catégorie'; // Category +$_MODULE['<{creativeelements}prestashop>template_library_af1b98adf7f686b84cd0b443e022b7a0'] = 'Catégories'; // Categories +$_MODULE['<{creativeelements}prestashop>template_library_7df96b18c230f90ada0a9e2307226338'] = 'Modèles'; // Templates +$_MODULE['<{creativeelements}prestashop>background_control_e7492ba5c0e269d4b32aecd208c0fbff'] = 'Position Y'; // Y Position +$_MODULE['<{creativeelements}prestashop>background_control_21e84455e7383dee4e606afc7ae6af83'] = 'Position X'; // X Position +$_MODULE['<{creativeelements}prestashop>background_control_90589c47f06eb971d548591f23c285af'] = 'Personnaliser'; // Custom +$_MODULE['<{creativeelements}prestashop>_0d4c14a20b4d98a5de54e1480bf99a25'] = 'Fenêtre surgissantes'; // Popup +$_MODULE['<{creativeelements}prestashop>_487df467aed02a8dd4a50648141fed82'] = 'Constructeur de thème'; // Theme Builder +$_MODULE['<{creativeelements}prestashop>_c3320c3457dfdfbada4a611a68854ea6'] = 'Non pris en charge'; // Not Supported +$_MODULE['<{creativeelements}prestashop>_95fc8385f09a0cb6cae00e2047ce8430'] = 'N’importe quelle vidéo'; // Any Video +$_MODULE['<{creativeelements}prestashop>_ba1f922207e50bf1fa2ee2b917e63a2b'] = 'Chaîne de la vidéo actuelle'; // Current Video Channel +$_MODULE['<{creativeelements}prestashop>_b46c2db25162b51009aba9c0317c2435'] = 'Couleur non marquée'; // Unmarked Color +$_MODULE['<{creativeelements}prestashop>_d37c550d781bfb93b0088a2470598bcf'] = 'Étoiles'; // Stars +$_MODULE['<{creativeelements}prestashop>_606b51cc1c9d0b4af394419a22f2ff1f'] = 'Contour'; // Outline +$_MODULE['<{creativeelements}prestashop>_7cdd5cfacc3e9c4fd0d1458df3d444f6'] = 'Style non marqué'; // Unmarked Style +$_MODULE['<{creativeelements}prestashop>_a1718ae9e0cbbac49b74f68a8a21cad2'] = 'Échelle de notation'; // Rating Scale +$_MODULE['<{creativeelements}prestashop>_dda9c06f33071c9b6fc237ee164109d8'] = 'Notation'; // Rating +$_MODULE['<{creativeelements}prestashop>_3d9d629289199cf23663a21c7a96190e'] = 'Notation par étoiles'; // Star Rating +$_MODULE['<{creativeelements}prestashop>_6a244a63f35840539994ca1b7d224a9c'] = 'Légende personnalisée'; // Custom Caption +$_MODULE['<{creativeelements}prestashop>_1c91473a92d118fb1929d3e6975f6a90'] = 'Légende du fichier joint'; // Attachment Caption +$_MODULE['<{creativeelements}prestashop>_0d82790b0612935992bd564a17ce37d6'] = 'Quitter'; // Quit +$_MODULE['<{creativeelements}prestashop>_5f405eb9720e7065c9c383de4d40e664'] = 'Raccourcis clavier'; // Keyboard Shortcuts +$_MODULE['<{creativeelements}prestashop>_0441244fcc68971ded749fe3c45fab92'] = 'Afficher/Masquer le panneau'; // Show / Hide Panel +$_MODULE['<{creativeelements}prestashop>_94764bde0434a9467c2452999bffc499'] = 'Aller à'; // Go To +$_MODULE['<{creativeelements}prestashop>_5afeaba074ef570dc720caaa855d49f6'] = 'Refaire'; // Redo +$_MODULE['<{creativeelements}prestashop>_1cdc076b28f70afac5fcedadf99fa119'] = 'Défaire'; // Undo +$_MODULE['<{creativeelements}prestashop>_d151508da8d36994e1635f7875594424'] = 'Finder'; // Finder +$_MODULE['<{creativeelements}prestashop>_adff855173c9b92b5478129af7d39e03'] = 'Futur'; // Future +$_MODULE['<{creativeelements}prestashop>_9157994442d3884a185e82b5df0931bd'] = 'Poster'; // Poster +$_MODULE['<{creativeelements}prestashop>_452a5c072ecdd2a6d27bb1cbb9108f8a'] = 'Chargement progressif'; // Lazy Load +$_MODULE['<{creativeelements}prestashop>_be8342af4ac5a74ec8d73f8cacec021d'] = 'Saisissez votre URL'; // Enter your URL +$_MODULE['<{creativeelements}prestashop>_12737e0ac21826611dba8b42ce43a4a6'] = 'Section interne'; // Inner Section +$_MODULE['<{creativeelements}prestashop>_0333d78f654f5c73ed8a1ac6866b94ef'] = 'Une fois votre page remplie avec du contenu, cette fenêtre vous donnera un aperçu de la disposition de tous les éléments de la page. Ainsi, vous pourrez aisément déplacer les différentes sections, colonnes et widgets.'; // Once you fill your page with content, this window will give you an overview display of all the page elements. This way, you can easily move around any section, column, or widget. +$_MODULE['<{creativeelements}prestashop>_d3db55a0ce1256f4a2121677fff695fb'] = 'La navigation facile est ici !'; // Easy Navigation is Here! +$_MODULE['<{creativeelements}prestashop>_ce2c8aed9c2fa0cfbed56cbda4d8bf07'] = 'Vide'; // Empty +$_MODULE['<{creativeelements}prestashop>_7392e5a07cc56647b45a9598ce4d646d'] = 'Navigateur'; // Navigator +$_MODULE['<{creativeelements}prestashop>_72ef2b9b6965d078e3c7f95487a82d1c'] = 'Passer'; // Skip +$_MODULE['<{creativeelements}prestashop>_5c3a475e00e0f928bebed9b03118a7fb'] = 'Collez ou saisissez votre URL'; // Paste URL or type +$_MODULE['<{creativeelements}prestashop>filter_control_fb5d805f5b3b22e4fd4a1bc66875dbe3'] = 'Ton'; // Hue +$_MODULE['<{creativeelements}prestashop>_4252b72e6ebcd4d4b4c2e46a786f03d2'] = 'Zoom'; // Zoom +$_MODULE['<{creativeelements}prestashop>_66ba162102bbf6ae31b522aec561735e'] = 'Unique'; // Single +$_MODULE['<{creativeelements}prestashop>_ca0de64bfaed84cff1811c8a557460e8'] = 'Tout le contenu'; // All Content +$_MODULE['<{creativeelements}prestashop>_771beb30ea03f1a09209a509ba0a95e7'] = 'Réinitialisation du style'; // Style Reset +$_MODULE['<{creativeelements}prestashop>_f373922b0d1d9582e2e01632fa435be2'] = 'Style collé'; // Style Pasted +$_MODULE['<{creativeelements}prestashop>_8c2857a9ad1d8f31659e35e904e20fa6'] = 'Logo'; // Logo +$_MODULE['<{creativeelements}prestashop>_bdc558034c3fa1f53c632cb2b4a081eb'] = 'Marque modeste'; // Modest Branding +$_MODULE['<{creativeelements}prestashop>_28f69ec829f28c18234aeb9b4bf84085'] = 'Infos de la vidéo'; // Video Info +$_MODULE['<{creativeelements}prestashop>_e6b391a8d2c4d45902a23a8b6585703d'] = 'URL'; // URL +$_MODULE['<{creativeelements}prestashop>_9b5e1c921934d0b8af2f354006adc776'] = 'Auto-hébergée'; // Self Hosted +$_MODULE['<{creativeelements}prestashop>_f31bbdd1b3e85bccd652680e16935819'] = 'Source'; // Source +$_MODULE['<{creativeelements}prestashop>_a102718b3b0839b017af5764e82f6bcd'] = 'Veuillez vous assurer que l’ID est unique et non utilisé ailleurs sur la page où ce formulaire est affiché. Ce champs autorise les caractères A-z 0-9 et tiret bas sans espace.'; // Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows A-z 0-9 & underscore chars without spaces. +$_MODULE['<{creativeelements}prestashop>_04d536bf597bcb004268f6d8c509dbde'] = 'ID du bouton'; // Button ID +$_MODULE['<{creativeelements}prestashop>_a7d6475ec8993b7224d6facc8cb0ead6'] = 'Site'; // Site +$_MODULE['<{creativeelements}prestashop>_8d5e7e72f12067991186cdf3cb7d5d9d'] = 'Prime'; // Premium +$_MODULE['<{creativeelements}prestashop>_86176e1d3dd3649de183dc33b7750f62'] = 'Mode de fusion'; // Blend Mode +$_MODULE['<{creativeelements}prestashop>_74f88681be25e673fa7caacae1b165bc'] = 'J’ai compris'; // Got It +$_MODULE['<{creativeelements}prestashop>_2cef6b933418f084afe1c5e44bcaa4bc'] = 'Vous pouvez maintenant accéder à toutes les actions de modification en utilisant le clic droit.'; // Now you can access all editing actions using right click. +$_MODULE['<{creativeelements}prestashop>_fd27a26bce8b01ecb7f38b4e1d6d2ad5'] = 'Découvrez le clic droit'; // Meet Right Click +$_MODULE['<{creativeelements}prestashop>_02b2a8ed2ee59fb6a1ccf3716c988597'] = 'Copier tout le contenu'; // Copy All Content +$_MODULE['<{creativeelements}prestashop>_e86a54e13ae40856b7c38b514dc6974b'] = 'Réinitialiser le style'; // Reset Style +$_MODULE['<{creativeelements}prestashop>_086efb53f636c4bf4fc83938d9a1d39e'] = 'Copier le style'; // Copy Style +$_MODULE['<{creativeelements}prestashop>_5fb63579fc981698f97d55bfecb213ea'] = 'Copier'; // Copy +$_MODULE['<{creativeelements}prestashop>_47858182067cd39bac29ead1d6772192'] = 'Prévisualisation pour %s'; // Preview for %s +$_MODULE['<{creativeelements}prestashop>_0f7c6d84b1393efc4b3666e1866a5759'] = 'Glissez un widget ici'; // Drag widget here +$_MODULE['<{creativeelements}prestashop>filter_control_7f491274a53763ba32b7356ade638e19'] = 'Filtres CSS'; // CSS Filters +$_MODULE['<{creativeelements}prestashop>filter_control_2e3307b9b1a2cc64b48f1cd6977a4b29'] = 'Saturation'; // Saturation +$_MODULE['<{creativeelements}prestashop>filter_control_c63ecd19a0ca74c22dfcf3063c9805d2'] = 'Contraste'; // Contrast +$_MODULE['<{creativeelements}prestashop>filter_control_b25323f99788ce64617f018b8a9f5f70'] = 'Luminosité'; // Brightness +$_MODULE['<{creativeelements}prestashop>filter_control_8b52de510bc5497ac43abfe566be48ab'] = 'Flou'; // Blur +$_MODULE['<{creativeelements}prestashop>_889deb44ad445ea359c1285d37f4a498'] = 'Spécifier une heure de fin (en secondes)'; // Specify an end time (in seconds) +$_MODULE['<{creativeelements}prestashop>_c91a577b72313356fad611c55f43c10f'] = 'Heure de fin'; // End Time +$_MODULE['<{creativeelements}prestashop>_3e06b49da8235ee588abdd3f0b58d040'] = 'Spécifiez une heure de début (en seconde)'; // Specify a start time (in seconds) +$_MODULE['<{creativeelements}prestashop>_2bbc845892f400626baab5af687527c5'] = 'Heure de début'; // Start Time +$_MODULE['<{creativeelements}prestashop>page_template_c45746064138c22a117ad58d89d67f4b'] = 'CE pleine largeur'; // CE Full Width +$_MODULE['<{creativeelements}prestashop>page_template_80aef4a77adcb8ced5b137d91a103239'] = 'CE canevas'; // CE Canvas +$_MODULE['<{creativeelements}prestashop>_bad6a5dd8c28e6b14f8e986615e3dc98'] = 'Opacité'; // Opacity +$_MODULE['<{creativeelements}prestashop>_7c7efec2d1dfd66eb653cf98d4cc865c'] = 'Quelque chose s’est mal passé.'; // Something went wrong. +$_MODULE['<{creativeelements}prestashop>_95e942c63e81ac4845c306bf110290a8'] = 'Largeur max.'; // Max Width +$_MODULE['<{creativeelements}prestashop>_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Position'; // Position +$_MODULE['<{creativeelements}prestashop>_8b1b1aa6c2a4785ab415c8fbf20e70d9'] = 'Supprimer %s'; // Delete %s +$_MODULE['<{creativeelements}prestashop>_95af255a86dc70e932634411b3f91e5f'] = 'Ce modèle inclut les en-tête, contenu pleine largeur et pied de page'; // This template includes the header, full-width content and footer +$_MODULE['<{creativeelements}prestashop>_daaa4b3e4a9000898257ccbe03236593'] = 'Aucun en-tête, aucun pied de page, juste Creative Elements'; // No header, no footer, just Creative Elements +$_MODULE['<{creativeelements}prestashop>_383478f70ecc7dc313b3653a3724ad5b'] = 'Modèle de page par défaut de votre thème'; // Default Page Template from your theme +$_MODULE['<{creativeelements}prestashop>_47b74b5cb415e0a295404acaa62ff67a'] = 'Modèle de page'; // Page Layout +$_MODULE['<{creativeelements}prestashop>_222a267cc5778206b253be35ee3ddab5'] = 'Courant'; // Current +$_MODULE['<{creativeelements}prestashop>_b6d34b10f9eae474e5843a027603c4a3'] = 'Lire la vidéo'; // Play Video +$_MODULE['<{creativeelements}prestashop>_0125cf5f3ca38b312ca5d3b511c45a13'] = 'En ligne'; // Inline +$_MODULE['<{creativeelements}prestashop>_04b2e4188d4ef8051e4699da8af01335'] = 'Séparateur'; // Separator +$_MODULE['<{creativeelements}prestashop>_26d59c8605cb411d04f53ba087fbde7b'] = 'Ajoutez des modèles et réutilisez-les sur votre site web. Exportez et importez-les facilement vers n’importe quel autre projet, pour un flux de travail optimisé.'; // Add templates and reuse them across your website. Easily export and import them to any other project, for an optimized workflow. +$_MODULE['<{creativeelements}prestashop>_70bb931768a57accd63e7496c25dfd18'] = 'Créez votre premier %s'; // Create Your First %s +$_MODULE['<{creativeelements}prestashop>_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Tout'; // All +$_MODULE['<{creativeelements}prestashop>template_library_b9390195ecad3986568746a2a9b56354'] = 'Mes modèles'; // My Templates +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Catégorie'; // Category +$_MODULE['<{creativeelements}prestashop>_284716247b12b363fd6b6a71bff0918e'] = 'Plus d’actions'; // More actions +$_MODULE['<{creativeelements}prestashop>_10e2fab434f7952f5e61211f6445032a'] = 'Rechercher des modèles :'; // Search Templates: +$_MODULE['<{creativeelements}prestashop>_453aceb005ceaf54a47da15fee8b2a26'] = 'Pages'; // Pages +$_MODULE['<{creativeelements}prestashop>_04c4f9f595c4f21d1de65eb07056c15a'] = 'Blocs'; // Blocks +$_MODULE['<{creativeelements}prestashop>_971fd8cc345d8bd9f92e9f7d88fdf20c'] = 'Dynamique'; // Dynamic +$_MODULE['<{creativeelements}prestashop>_9421c4ccec3719a5d299f1b02862412f'] = 'URL de contact'; // Contact URL +$_MODULE['<{creativeelements}prestashop>_9a99c312fda8b07dbdd8ac72dc0773f8'] = 'Date et heure actuelles'; // Current Date Time +$_MODULE['<{creativeelements}prestashop>_4001353741fc405c5786493d252a3991'] = 'URL interne'; // Internal URL +$_MODULE['<{creativeelements}prestashop>_e68c1ad1f675e02452d7f79969b9708e'] = 'Titre de page'; // Page Title +$_MODULE['<{creativeelements}prestashop>_ca341887d434838f3252e2d73f787680'] = 'Paramètre de la requête'; // Request Parameter +$_MODULE['<{creativeelements}prestashop>_781ee6c523f73dae7044617f7cac3941'] = 'Contact du boutique'; // Shop Contact +$_MODULE['<{creativeelements}prestashop>_5a43012799d4303730f0c9c32a41b0fd'] = 'URL du boutique'; // Shop URL +$_MODULE['<{creativeelements}prestashop>_04e0602d4335e2144468e51e5c424590'] = 'Règle Panier'; // Cart Rule +$_MODULE['<{creativeelements}prestashop>_4695483802b27812a65749cccd212b17'] = 'Nom de la catégorie'; // Category Name +$_MODULE['<{creativeelements}prestashop>_9bb87066bdb5b0307d442bd9d1552632'] = 'Catégorie URL'; // Category URL +$_MODULE['<{creativeelements}prestashop>_4232c2deb6ff317abf49721680bd818a'] = 'Nom de la marque'; // Brand Name +$_MODULE['<{creativeelements}prestashop>_cad080cee7f847c07d0a0061b2f5f771'] = 'URL de la marque'; // Brand URL +$_MODULE['<{creativeelements}prestashop>_8973510d727af4f8c2ba6c1c84d0b718'] = 'URL du produit'; // Product URL +$_MODULE['<{creativeelements}prestashop>_e21f91c630214ac206a785cccd853154'] = 'Règle du prix catalogue'; // Catalog Price Rule + +$_MODULE['<{creativeelements}prestashop>_b1da34ea28921a8fac7d5f1273327229'] = 'Suivant'; // Next +$_MODULE['<{creativeelements}prestashop>_033658cb7158c3f36bf7cf9c0f44fcde'] = 'Précédent'; // Previous +$_MODULE['<{creativeelements}prestashop>_eab23bbc21bd1fbd1207247a9864592b'] = 'Play'; // Play +$_MODULE['<{creativeelements}prestashop>_74322cb2d5a81d5daa8556673f478d7c'] = 'Pause'; // Pause +$_MODULE['<{creativeelements}prestashop>_f582dc21d5a9ffb1bbfadf74318bc5a6'] = 'Sélecteur'; // Selector +$_MODULE['<{creativeelements}prestashop>_2c7d98f10667515c7b00403e2b3ff9a5'] = 'Tél.'; // Tel +$_MODULE['<{creativeelements}prestashop>_83dff142c5bc22f9147bc823a52e2b4f'] = 'SMS'; // SMS +$_MODULE['<{creativeelements}prestashop>_56ad595875f55ad4163c2783f11fa964'] = 'Google Agenda'; // Google Calendar +$_MODULE['<{creativeelements}prestashop>_2f4523c3fec77710fbefd831cc1b893b'] = 'Outlook Calendar'; // Outlook Calendar +$_MODULE['<{creativeelements}prestashop>_a63a2923058723e763c1e82c75988f5c'] = 'Calendrier Yahoo'; // Yahoo Calendar +$_MODULE['<{creativeelements}prestashop>_251a780878152bc8ea7c44050a46f6a0'] = 'Sujet'; // Subject +$_MODULE['<{creativeelements}prestashop>_7f86db886a07a996fe3378fcbecc8041'] = 'Message'; // Message +$_MODULE['<{creativeelements}prestashop>_b6bda532a7e8a7ea0a75069f35ae864f'] = 'Identifiant'; // Username +$_MODULE['<{creativeelements}prestashop>_d93abbcc3d3ff28056c410d12757aa0a'] = 'Format de la date'; // Date Format +$_MODULE['<{creativeelements}prestashop>_c0740f55b6724b631052066baddbf7b0'] = 'Format de l’heure'; // Time Format +$_MODULE['<{creativeelements}prestashop>_1b4a75284a56a339d132e59456d27e3a'] = 'Format personnalisé'; // Custom Format +$_MODULE['<{creativeelements}prestashop>_169920a350e7960154dcdc875dafc8df'] = 'Documentation sur le formatage de la date et de l’heure'; // Documentation on date and time formatting +$_MODULE['<{creativeelements}prestashop>_df9a7c88f7bf07e724b934716cc790f4'] = 'Rechercher & sélectionner'; // Search & Select +$_MODULE['<{creativeelements}prestashop>_363507878ffebd26d035aa7ba2093f35'] = 'Tapez le nom du produit / Réf.'; // Type Product Name / Ref +$_MODULE['<{creativeelements}prestashop>_a9c548584e357eca69a0f96e8295e524'] = 'Nom du paramètre'; // Parameter Name +$_MODULE['<{creativeelements}prestashop>_6ba425ac509bdf319cbb43aae65ee954'] = 'Champ'; // Field +$_MODULE['<{creativeelements}prestashop>_45e41f822b049adbf2eedb23cb170188'] = 'Entreprise'; // Company +$_MODULE['<{creativeelements}prestashop>_4984ae7378622cd416b9aced4cdc7612'] = 'Adresse'; // Address +$_MODULE['<{creativeelements}prestashop>_a4c7dc56186aaf14cb52b6ad6e320d91'] = 'ID'; // ID +$_MODULE['<{creativeelements}prestashop>_882136c04720783972d2ba15cabb2533'] = 'Afficher le nom'; // Display Name +$_MODULE['<{creativeelements}prestashop>_719c34f35eef4e53e7a8060f4ac1f5b0'] = 'Anniversaire'; // Birthday +$_MODULE['<{creativeelements}prestashop>_cf8495c5e163a5edd0c194a344fa0458'] = 'Site'; // Website +$_MODULE['<{creativeelements}prestashop>_369ee98b6cc4c2ac77e0c4ed5665a33a'] = 'Du'; // From +$_MODULE['<{creativeelements}prestashop>_a2933e922ff8e0247d44938b93e5bb6a'] = 'Au'; // To +$_MODULE['<{creativeelements}prestashop>_ef69cf49bb993edf5f654dd21ff63f2a'] = 'Devise'; // Currency +$_MODULE['<{creativeelements}prestashop>_0cac3b5a1b412862847fce41fc8978fe'] = 'Montant du prix'; // Price Amount +$_MODULE['<{creativeelements}prestashop>_71bd0d3f32c2c668811a52eedc3ee8fc'] = 'Prix entier'; // Price Integer +$_MODULE['<{creativeelements}prestashop>_c504cce3f32c095020e882875cb77d45'] = 'Décimales de prix'; // Price Decimals +$_MODULE['<{creativeelements}prestashop>_d456e04d06b851d54f7dd7782cd7f5a2'] = 'Montant régulier'; // Regular Amount +$_MODULE['<{creativeelements}prestashop>_c3091d709b8b46ce1c89b9d2d7f3f3e1'] = 'Prix unitaire'; // Unit Price + +$_MODULE['<{creativeelements}prestashop>_d9c0bd850f0d755afe4a2f87790926bc'] = 'Cette étiquette n’a aucun réglage.'; // This tag has no settings. +$_MODULE['<{creativeelements}prestashop>border_control_a5d7f2d1b78f9222563004a41a616334'] = 'Rainure'; // Groove +$_MODULE['<{creativeelements}prestashop>_db71f6e371eb7124134284e029343fbb'] = 'Réglages de %s'; // %s Settings +$_MODULE['<{creativeelements}prestashop>_c9344eb2ff26e96823cc252a90f77de8'] = 'Image mise en avant'; // Featured Image +$_MODULE['<{creativeelements}prestashop>_442444e4a8a066e42bd056d71c649288'] = 'Style du corps'; // Body Style +$_MODULE['<{creativeelements}prestashop>_0945359809dad1fbf3dea1c95a0da951'] = 'Document'; // Document +$_MODULE['<{creativeelements}prestashop>_a130ecd03d333805829b11f98cc9c0f9'] = 'Action non trouvée.'; // Action not found. +$_MODULE['<{creativeelements}prestashop>_da900198c1a7d78f57e400a23733c8bd'] = 'Article non trouvé.'; // Post not found. +$_MODULE['<{creativeelements}prestashop>_8a7e7afe17d1c9c4258d5f80e7b7d224'] = 'Jeton expiré.'; // Token Expired. +$_MODULE['<{creativeelements}prestashop>_b377dbdf3aeb55f9443947236db71ab3'] = 'Définissez combien de diapositives défilent par glissement.'; // Set how many slides are scrolled per swipe. +$_MODULE['<{creativeelements}prestashop>_6cd988821d5e8796c47a32e453c95633'] = 'Remarque : le fichier joint fixé fonctionne uniquement sur ordinateur.'; // Note: Attachment Fixed works only on desktop. +$_MODULE['<{creativeelements}prestashop>_b1fce7d76fc2b85bb2203bed78d8514c'] = 'Google Early Access'; // Google Early Access +$_MODULE['<{creativeelements}prestashop>_b3ea5d4962bbcb423b6e3693d7a1ea9f'] = 'Erreur inconnue'; // Unknown Error +$_MODULE['<{creativeelements}prestashop>_ce71ffa436bfbe5fd6e1f8af2a0671eb'] = 'L’enregistrement a été désactivé jusqu’à ce que vous vous soyez reconnecté.'; // Saving has been disabled until you’re reconnected. +$_MODULE['<{creativeelements}prestashop>_dd9742741ad6a068ce129e4fa97aa294'] = 'Erreur serveur'; // Server Error +$_MODULE['<{creativeelements}prestashop>_89b5fd445acdad16cd2ee39330fd90bd'] = 'Connexion perdue'; // Connection Lost +$_MODULE['<{creativeelements}prestashop>_9d38dcdc957310dcaab2eda11f46c1f8'] = 'Il existe une sauvegarde auto de cet article qui est plus récente que la version ci-dessous. Vous pouvez restaurer les données enregistrées depuis le panneau Révisions'; // There is an autosave of this post that is more recent than the version below. You can restore the saved data fron the Revisions panel +$_MODULE['<{creativeelements}prestashop>_c81c48c260d8fe33746bb88a06a31b40'] = 'Restaurer les données auto enregistrées'; // Restore Auto Saved Data +$_MODULE['<{creativeelements}prestashop>_2bd339d85ee3b33e513359ce781b60cc'] = 'Restaurer'; // Restore +$_MODULE['<{creativeelements}prestashop>_5b008951213ac933cab550ae80b43529'] = 'Version actuelle'; // Current Version +$_MODULE['<{creativeelements}prestashop>_95d126b737c78e8f8a4e00c0e0170c3a'] = 'Modifier publié'; // Edit Published +$_MODULE['<{creativeelements}prestashop>_9b97514a6cb123cccf70b60ae40f9c92'] = 'Modifier le brouillon'; // Edit Draft +$_MODULE['<{creativeelements}prestashop>_94c7a492c400660d0ce730ceea7778a9'] = 'Lorsque vous activez le mode confidentialité, YouTube ne stocke pas d’information sur les visiteurs de votre site web, à moins qu’ils ne lisent la vidéo.'; // When you turn on privacy mode, YouTube won't store information about visitors on your website unless they play the video. +$_MODULE['<{creativeelements}prestashop>_b8a6d142349b07242bf3d2ec60016c41'] = 'Mode confidentialité'; // Privacy Mode +$_MODULE['<{creativeelements}prestashop>_cbdfcfddce72f99e436eca187f00b290'] = 'Saisissez votre code court'; // Enter your shortcode +$_MODULE['<{creativeelements}prestashop>_b70b756df7f18d4fee17dd1d38bcc135'] = 'Saisissez votre légende d’image'; // Enter your image caption +$_MODULE['<{creativeelements}prestashop>_16f6c60cf0b840982bc1f595ac1641cb'] = 'Saisissez votre code'; // Enter your code +$_MODULE['<{creativeelements}prestashop>_2fcd87fc57c33e7fb8a1df657776f274'] = 'Ajoutez votre titre ici'; // Add Your Heading Text Here +$_MODULE['<{creativeelements}prestashop>_1909e5c12b63e80afbedfe3a4f5c3363'] = 'Rejeter l’alerte'; // Dismiss alert +$_MODULE['<{creativeelements}prestashop>_960fa36947fbb569380aba693b494feb'] = 'Saisissez votre description'; // Enter your description +$_MODULE['<{creativeelements}prestashop>_92fb9e9788b3d8cad885c5fe16343c75'] = 'Ceci est une alerte'; // This is an Alert +$_MODULE['<{creativeelements}prestashop>_cdbf49d6ac280f03cc7d24714bc42a4e'] = 'Icône active'; // Active Icon +$_MODULE['<{creativeelements}prestashop>_f0a0314cf8e7c3ad6d977d5adacfeb0d'] = 'Dernière modification le %1$s par %2$s'; // Last edited on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>_4fccea1707d00bf8926ebf0897e4a325'] = 'Dernier enregistrement le %1$s par %2$s'; // Draft saved on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>revision_date_format_b29ef0e5dad2e3b86cfa343482ce8e9c'] = 'j M, H:i'; // M j, H:i +$_MODULE['<{creativeelements}prestashop>_c8a59e7135a20b362f9c768b09454fdb'] = 'Ignorer'; // Dismiss +$_MODULE['<{creativeelements}prestashop>_c829769966db94e5478e39391b995ac5'] = 'Voir toutes les révisions'; // View All Revisions +$_MODULE['<{creativeelements}prestashop>_70d4a329d37dc2df41466a420e983966'] = 'Regardez'; // Have a look +$_MODULE['<{creativeelements}prestashop>_2199472d685d3b90df180760ea665a71'] = 'Continuer à modifier'; // Keep Editing +$_MODULE['<{creativeelements}prestashop>_b1b95b84202450b35fd7afb914031d55'] = 'C’est juste un brouillon. Jouez et quand vous avez terminé - cliquez sur mettre à jour.'; // This is just a draft. Play around and when you're done - click update. +$_MODULE['<{creativeelements}prestashop>_57986647011dee008f9d492989a90fb1'] = 'Hourra ! Votre %s est en ligne.'; // Hurray! Your %s is live. +$_MODULE['<{creativeelements}prestashop>_a4d3b161ce1309df1c4e25df28694b7b'] = 'Soumettre'; // Submit +$_MODULE['<{creativeelements}prestashop>_06933067aafd48425d67bcb01bba5cb6'] = 'Mettre à jour'; // Update +$_MODULE['<{creativeelements}prestashop>_9b9d8a976b42e0bd66381797644943d5'] = 'Publié'; // Published +$_MODULE['<{creativeelements}prestashop>_010f371ad222d36015d7ab70f3256160'] = 'Continuer malgré tout'; // Proceed Anyway +$_MODULE['<{creativeelements}prestashop>_1a7acf9e1a4485f55a6d75bcc40655e3'] = 'Votre navigateur n’est pas compatible avec toutes les fonctionnalités de modification de CreativeElements. Nous vous recommandons de passer à un autre navigateur comme Chrome ou Firefox.'; // Your browser isn't compatible with all of Creative Elements' editing features. We recommend you switch to another browser like Chrome or Firefox. +$_MODULE['<{creativeelements}prestashop>_0c6f349a95f4864d65730cad900e3551'] = 'Votre navigateur n’est pas compatible'; // Your browser isn't compatible +$_MODULE['<{creativeelements}prestashop>_c12f59e844e6d839ba6ee4cd26e8ea27'] = 'Aucun résultat trouvé'; // No Results Found +$_MODULE['<{creativeelements}prestashop>_f12a625ade1d1349f8d760c137d2e4b8'] = 'Veuillez vous assurer que votre recherche est bien épelée ou essayez d’autres mots.'; // Please make sure your search is spelled correctly or try a different words. +$_MODULE['<{creativeelements}prestashop>_f44c3ec59688f8173b34c08b1ad961b2'] = 'Aucun modèle favori'; // No Favorite Templates +$_MODULE['<{creativeelements}prestashop>_081a48a2a1f0eee4b209bcdaf54803c0'] = 'Vous pouvez marquer chaque modèle préconçu comme favori.'; // You can mark any pre-designed template as a favorite. +$_MODULE['<{creativeelements}prestashop>_fb4fb9b2615dddca1a6cda5ecdfb47c0'] = 'Importer les réglages du document'; // Import Document Settings +$_MODULE['<{creativeelements}prestashop>_6083cfeb84f702b582e655b5f4168579'] = 'Afficher le panneau'; // Show Panel +$_MODULE['<{creativeelements}prestashop>_b95d3d403307efa40962df363734e941'] = 'Réglages de module'; // Module Settings +$_MODULE['<{creativeelements}prestashop>_1aa14e9f377b528b5537d70fbd35c6a2'] = 'Sélectionnez un fichier'; // Select File +$_MODULE['<{creativeelements}prestashop>_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'ou'; // or +$_MODULE['<{creativeelements}prestashop>_1a10f6476e54db68548305a69fdcec09'] = 'Glissez & déposez votre fichier modèle .JSON ou .zip'; // Drag & drop your .JSON or .zip template file +$_MODULE['<{creativeelements}prestashop>_4a66d51c9716349085fc7ea77edfe5c5'] = 'Importer un modèle dans votre bibliothèque'; // Import Template to Your Library +$_MODULE['<{creativeelements}prestashop>_936ccdb97115e9f35a11d35e3d5b5cad'] = 'Cliquez ici'; // Click here +$_MODULE['<{creativeelements}prestashop>_89ba5a0cd9537dd0cd44a3ece29b877a'] = 'Envie d’en savoir plus sur la bibliothèque CreativeElements?'; // Want to learn more about the Elementor library? +$_MODULE['<{creativeelements}prestashop>_01165dcf77c191e6c69b31d98b0ec6ff'] = 'Favori'; // Favorite +$_MODULE['<{creativeelements}prestashop>_52fc7a0ab6328f8aaabb6ef411816b9e'] = 'Date de création'; // Creation Date +$_MODULE['<{creativeelements}prestashop>_7b1255f8fdd0cb8751baee55621164e1'] = 'Créé par'; // Created By +$_MODULE['<{creativeelements}prestashop>_13348442cc6a27032d2b4aa28b75a5d3'] = 'Recherche'; // Search +$_MODULE['<{creativeelements}prestashop>_f2c3119ccf960f54688bf6f227390e36'] = 'Mes favoris'; // My Favorites +$_MODULE['<{creativeelements}prestashop>_2cc1943d4c0b46bfcf503a75c44f988b'] = 'Populaire'; // Popular +$_MODULE['<{creativeelements}prestashop>_349d789f5d11f630c282f547b568d08d'] = 'Tendance'; // Trend +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Nouveauté'; // New +$_MODULE['<{creativeelements}prestashop>_a0415b5ba0373565c33828715bba8c8d'] = 'Importer un modèle'; // Import Template +$_MODULE['<{creativeelements}prestashop>_1063e38cb53d94d386f21227fcd84717'] = 'Retirer'; // Remove +$_MODULE['<{creativeelements}prestashop>_ed75712b0eb1913c28a3872731ffd48d'] = 'Dupliquer'; // Duplicate +$_MODULE['<{creativeelements}prestashop>_9c4d6fcf53fc6c3ad770fed0e57ccc49'] = 'Glisser & déposer'; // Drag & Drop +$_MODULE['<{creativeelements}prestashop>_bf16d61e5b485458fa158bfb5584befc'] = 'Masquer le panneau'; // Hide Panel +$_MODULE['<{creativeelements}prestashop>_0bec922eda645e0ac505d942505b9be9'] = 'Enregistrer comme modèle'; // Save as Template +$_MODULE['<{creativeelements}prestashop>_5778e182c50cbba1d86e14690c8aa35c'] = 'Enregistrer le brouillon'; // Save Draft +$_MODULE['<{creativeelements}prestashop>_23183cd144a4dcc5a599a4b6506f7154'] = 'Enregistrer les options'; // Save Options +$_MODULE['<{creativeelements}prestashop>_110a4b01beabd53b661a47d4b44bd7a8'] = 'Publier'; // Publish +$_MODULE['<{creativeelements}prestashop>_b2e886db4593c5ddc8e369f34d3744f3'] = 'Prévisualiser les modifications'; // Preview Changes +$_MODULE['<{creativeelements}prestashop>_82815a6312a1e5a2ffafff6f1734df30'] = 'Revenir à back-office'; // Exit to Back-office +$_MODULE['<{creativeelements}prestashop>_4bda311edbaa9e54025c057c6c102fba'] = 'Widget de recherche :'; // Search Widget: +$_MODULE['<{creativeelements}prestashop>_b0d066425fa39974fe45240b33bbfacb'] = 'Retour à par défaut'; // Back to default +$_MODULE['<{creativeelements}prestashop>typography_control_46e52f6310c224aa5846b3a5a5b1c6fe'] = 'Ligne en travers'; // Line Through +$_MODULE['<{creativeelements}prestashop>typography_control_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Surligner'; // Overline +$_MODULE['<{creativeelements}prestashop>typography_control_852721aa5fc738dfedff2945d71da439'] = 'Souligner'; // Underline +$_MODULE['<{creativeelements}prestashop>typography_control_24365794120e03b807acbd05c0a48db9'] = 'Décoration'; // Decoration +$_MODULE['<{creativeelements}prestashop>_ff0a58d7006cd437862608b39e9cc7fe'] = 'Valeurs non liées'; // Unlinked values +$_MODULE['<{creativeelements}prestashop>_6ca8bf4766b9dc7b1ea8b69562faac3f'] = 'Extrait'; // Excerpt +$_MODULE['<{creativeelements}prestashop>_652122103181aa2752efaecab300edf0'] = 'Accès refusé.'; // Access denied. +$_MODULE['<{creativeelements}prestashop>_87557f11575c0ad78e4e28abedc13b6e'] = 'Fin'; // End +$_MODULE['<{creativeelements}prestashop>_a6122a65eaa676f700ae68d393054a37'] = 'Début'; // Start +$_MODULE['<{creativeelements}prestashop>_cf85e0aa6dbff8e1237bc70f6a1da1b2'] = 'Écrivez ici'; // Type Here +$_MODULE['<{creativeelements}prestashop>_289e1087105787353c5bae37c7982aa8'] = 'Recharger la page'; // Reload Page +$_MODULE['<{creativeelements}prestashop>_f9636eccbb10d99e4aabfefe4ebfe479'] = 'Votre session a expiré. Veuillez recharger la page pour continuer à modifier.'; // Your session has expired. Please reload the page to continue editing. +$_MODULE['<{creativeelements}prestashop>_c85a251cc457840f1e032f1b733e9398'] = 'Expiration'; // Timeout +$_MODULE['<{creativeelements}prestashop>_57b4c0031bc5c78e49d0a7e568115ff1'] = 'Nous sommes désolés, mais quelque chose s’est mal passé. Cliquer sur « En apprendre plus » et suivez chacune des étapes pour rapidement résoudre cela.'; // We're sorry, but something went wrong. Click on 'Learn more' and follow each of the steps to quickly solve it. +$_MODULE['<{creativeelements}prestashop>_fab4cde10ae2ec07bdee32a6749a3e7c'] = 'La prévisualisation n’a pas pu être chargée'; // The preview could not be loaded +$_MODULE['<{creativeelements}prestashop>_26342c8741f7cf60f979e91ad570b291'] = 'Couleurs par défaut'; // Default Colors +$_MODULE['<{creativeelements}prestashop>_b2f5eb6ce3e6e97e89ec594c52ba48c1'] = 'Valeur inconnue'; // Unknown Value +$_MODULE['<{creativeelements}prestashop>_351683969bd504e253fb05ef9b542bc8'] = 'Dès que vous travaillez, vous pouvez refaire/annuler toute action que vous avez faite dans l’éditeur.'; // Once you start working, you'll be able to redo / undo any action you make in the editor. +$_MODULE['<{creativeelements}prestashop>_abb565ed2df80ae405ca35167910924d'] = 'Encore aucun historique'; // No History Yet +$_MODULE['<{creativeelements}prestashop>_8d7eb55a18265b4dc59ea4f896e7c1ed'] = 'Basculer sur l’onglet Révisions pour les anciennes versions'; // Switch to Revisions tab for older versions +$_MODULE['<{creativeelements}prestashop>_fd88b11cfde6aa5e3c7ff0553b534885'] = 'Révisions'; // Revisions +$_MODULE['<{creativeelements}prestashop>_06df33001c1d7187fdd81ea1f5b277aa'] = 'Actions'; // Actions +$_MODULE['<{creativeelements}prestashop>_95bfdefaaf01553cbf21ccd942855c69'] = 'Déplacé'; // Moved +$_MODULE['<{creativeelements}prestashop>_f29ddbfb905eb2593fdcdfb243f9af85'] = 'Ajouté'; // Added +$_MODULE['<{creativeelements}prestashop>_5b6cf869265c13af8566f192b4ab3d2a'] = 'Documentation'; // Documentation +$_MODULE['<{creativeelements}prestashop>_16d2b386b2034b9488996466aaae0b57'] = 'Historique'; // History +$_MODULE['<{creativeelements}prestashop>_bf59b07aded13165bea058e8f636a308'] = 'Couleur au survol de l’UI'; // UI Hover Color +$_MODULE['<{creativeelements}prestashop>_ead9ed73aace2253b77e3455b2105ea3'] = 'Couleur d’UI'; // UI Color +$_MODULE['<{creativeelements}prestashop>_67ed6ddb7d890b23166c1bef771e9451'] = 'Modifié'; // Edited +$_MODULE['<{creativeelements}prestashop>_01a94df3c831063bf2b04d9c09e2b972'] = 'Modification commencée'; // Editing Started +$_MODULE['<{creativeelements}prestashop>text_shadow_control_3f39588bb19e28051d9aedfbb170025c'] = 'Ombre'; // Shadow +$_MODULE['<{creativeelements}prestashop>_00cd7be4cb21c59179316d7844a8cfc4'] = 'Muet'; // Mute +$_MODULE['<{creativeelements}prestashop>_03ea6664bd8bb744fadc253f84bf32d5'] = 'Choisissez un fichier JSON de modèle ou une archive .zip de modèles, puis ajoutez-les à la liste des modèles disponibles dans votre bibliothèque.'; // Choose a JSON template file or a .zip archive of templates, and add them to the list of templates available in your library. +$_MODULE['<{creativeelements}prestashop>text_shadow_control_86e470e0e13bcfec3b2e102c167fe223'] = 'Ombre du texte'; // Text Shadow +$_MODULE['<{creativeelements}prestashop>_a889e4cafb176aebf2d32a9037cbb227'] = 'Activer dans l’éditeur'; // Enable In Editor +$_MODULE['<{creativeelements}prestashop>_a97cc615f64c36e0f7cb6ea6e94c948d'] = 'Ouvrir tous les liens image dans une fenêtre surgissante de visionneuse. La visionneuse fonctionnera automatiquement sur tout lien qui mène à un fichier image.'; // Open all image links in a lightbox popup window. The lightbox will automatically work on any link that leads to an image file. +$_MODULE['<{creativeelements}prestashop>_060e9cb662a63ad93391971af1ced41e'] = 'Visionneuse d’image'; // Image Lightbox +$_MODULE['<{creativeelements}prestashop>_9a51a007b33a46e553def6423aad8648'] = 'Réglages généraux'; // Global Settings +$_MODULE['<{creativeelements}prestashop>_d727e004d42165085a9b12a006cf31fc'] = 'Définit l’espace par défaut entre les widgets (par défaut : 20)'; // Sets the default space between widgets (Default: 20) +$_MODULE['<{creativeelements}prestashop>_83473b478b2b3b5ece5200f5f60cb055'] = 'Délai d’animation'; // Animation Delay +$_MODULE['<{creativeelements}prestashop>_c626b471f89bc0c52d34a3a3f7df35c5'] = 'Index-Z'; // Z-Index +$_MODULE['<{creativeelements}prestashop>_a585b417342e2b83baa9e0c91631b635'] = 'Durée de transition'; // Transition Duration +$_MODULE['<{creativeelements}prestashop>_155731c389e7798846fc9daeb3d4872a'] = 'Délai de transition'; // Transition Delay +$_MODULE['<{creativeelements}prestashop>_f5b67dd021f56100a6ea99169a67bf5e'] = 'Espace des widgets'; // Widgets Space +$_MODULE['<{creativeelements}prestashop>_b95c09fb28e80cc672fd533a62252d70'] = 'Ajouter %s'; // Add %s +$_MODULE['<{creativeelements}prestashop>_b289b32a5fe99e0c7e9369e56f19700d'] = 'Attention : l’importation peut écraser les réglages précédents.'; // Attention: Importing may override previous settings. +$_MODULE['<{creativeelements}prestashop>_b3f82cf76f55546dc898d561c847b5d9'] = 'Souhaitez-vous également importer les réglages de document du modèle ?'; // Do you want to also import the document settings of the template? +$_MODULE['<{creativeelements}prestashop>_ebbb5896554d13cc4f2e46a9e44eb51e'] = 'Ajouter nofollow'; // Add nofollow +$_MODULE['<{creativeelements}prestashop>_2959ce8aed67d6b6e6f5cefd601f1091'] = 'Ouvrir dans une nouvelle fenêtre'; // Open in new window +$_MODULE['<{creativeelements}prestashop>_0fb7010ec16c91ec543a440daab8917b'] = 'Options du lien'; // Link Options +$_MODULE['<{creativeelements}prestashop>box_shadow_control_606b51cc1c9d0b4af394419a22f2ff1f'] = 'Contour'; // Outline +$_MODULE['<{creativeelements}prestashop>box_shadow_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Position'; // Position +$_MODULE['<{creativeelements}prestashop>_7dfa8bf72c98a7c1927d689cdbc49ce1'] = 'Modifier %s'; // Edit %s +$_MODULE['<{creativeelements}prestashop>_39a33ab3ae10c15b5c60328b23512713'] = 'Retirer %s'; // Remove %s +$_MODULE['<{creativeelements}prestashop>_60b3911c3a666b23f2579c62a6416542'] = 'Dupliquer %s'; // Duplicate %s +$_MODULE['<{creativeelements}prestashop>_6ed562a0d4381eef12d92c87520f3208'] = 'Widget'; // Widget +$_MODULE['<{creativeelements}prestashop>_ec53a8c4f07baed5d8825072c89799be'] = 'État'; // Status +$_MODULE['<{creativeelements}prestashop>_d511f8439ecde36647437fbba67a4394'] = 'Espace'; // Space +$_MODULE['<{creativeelements}prestashop>_cc74161b4d0042cb69688fc031335b36'] = 'Lettrine'; // Drop Cap +$_MODULE['<{creativeelements}prestashop>_91ba387c0204e8d0bdfa4e589f850606'] = 'Sélecteur de titre de page'; // Page Title Selector +$_MODULE['<{creativeelements}prestashop>_c39aca79ca3cc4558a313f65528a47a7'] = 'Coller le style'; // Paste Style +$_MODULE['<{creativeelements}prestashop>_278c491bdd8a53618c149c4ac790da34'] = 'Modèle'; // Template +$_MODULE['<{creativeelements}prestashop>_4dcd94eeeaad2b446cdea3c97f67c974'] = 'Ne fonctionne pas ? Vous pouvez définir un sélecteur différent pour le titre dans les Réglages de la page.'; // Not working? You can set a different selector for the title in the Settings page. +$_MODULE['<{creativeelements}prestashop>_d38fd78cc216991579c255174909bd73'] = 'Masquer le titre'; // Hide Title +$_MODULE['<{creativeelements}prestashop>_7e5d6ab43f675667c7109ecd0ea8dabf'] = 'Envoyer à l’avant-plan'; // Bring to Front +$_MODULE['<{creativeelements}prestashop>_ee08ead15605dc63a2ad3357d04f5838'] = 'Visionneuse'; // Lightbox +$_MODULE['<{creativeelements}prestashop>_5a2cafc2b0fdf3e5242d40a878db7129'] = 'Espace entre'; // Space Between +$_MODULE['<{creativeelements}prestashop>_4ee29ca12c7d126654bd0e5275de6135'] = 'Liste'; // List +$_MODULE['<{creativeelements}prestashop>shapes_2b1f94ef23b79bf90eb891cae1df7a90'] = 'Livre'; // Book +$_MODULE['<{creativeelements}prestashop>shapes_8a9e64d86ed12ad40de129bc7f4683b2'] = 'Fendu'; // Split +$_MODULE['<{creativeelements}prestashop>shapes_0f4e1aaabd074689b7d3ead824d1ee8e'] = 'Flèche'; // Arrow +$_MODULE['<{creativeelements}prestashop>shapes_2c7642ce7af68f37ad5f82153ec30f2b'] = 'Motif de vagues'; // Waves Pattern +$_MODULE['<{creativeelements}prestashop>shapes_a609a9143e96c90080bddddb3305284f'] = 'Pinceau de vagues'; // Waves Brush +$_MODULE['<{creativeelements}prestashop>shapes_a4b44939aabfe8df39b1ecf05fa95c0a'] = 'Vagues'; // Waves +$_MODULE['<{creativeelements}prestashop>shapes_62d331ed3fa84befe1b7b3a45fe3c630'] = 'Courbe asymétrique'; // Curve Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_2cb4d4a3f8dacd623fa045a44febd476'] = 'Courbe'; // Curve +$_MODULE['<{creativeelements}prestashop>shapes_8af1e1ff4512e7d258e9b8ea8e9b48ef'] = 'Opacité du ventilateur'; // Fan Opacity +$_MODULE['<{creativeelements}prestashop>shapes_253761d8ff1b6655697cb0d9962d2537'] = 'Opacité d’inclinaison'; // Tilt Opacity +$_MODULE['<{creativeelements}prestashop>shapes_686319a93c35facda5c3da08875fb394'] = 'Oscillation'; // Tilt +$_MODULE['<{creativeelements}prestashop>shapes_bef629014564e9ece50fad279b2ab211'] = 'Triangle asymétrique'; // Triangle Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_5e5500cb2b82eb72d550de644bd1b64b'] = 'Triangle'; // Triangle +$_MODULE['<{creativeelements}prestashop>shapes_ff8e3e7230eb6da5eb9df66861459010'] = 'Pyramides'; // Pyramids +$_MODULE['<{creativeelements}prestashop>shapes_4fae8be981bd327f1302f4b678afe734'] = 'Zigzag'; // Zigzag +$_MODULE['<{creativeelements}prestashop>shapes_4a8f72b777dc9735afaebac72822c77e'] = 'Nuages'; // Clouds +$_MODULE['<{creativeelements}prestashop>shapes_08fb41620aa4c498a1f2ef09bbc1183c'] = 'Gouttes'; // Drops +$_MODULE['<{creativeelements}prestashop>shapes_8e8c2adc91106422362ffd9b8b44e9a2'] = 'Montagnes'; // Mountains +$_MODULE['<{creativeelements}prestashop>_9b8958acb7be504bb5f55f17c0eea366'] = 'Inverser'; // Invert +$_MODULE['<{creativeelements}prestashop>_9ffbd422925a6839ee820ddbc59278c5'] = 'Retournement'; // Flip +$_MODULE['<{creativeelements}prestashop>_3dd971eb0a2385db4f30e71a456daf8a'] = 'Forme de séparation'; // Shape Divider +$_MODULE['<{creativeelements}prestashop>_48686859ede3505d93db63bedafb649e'] = 'Remarque : les couleurs suivantes ne fonctionneront pas si les couleurs par défaut sont activées.'; // Note: The following colors won't work if Default Colors are enabled. +$_MODULE['<{creativeelements}prestashop>_7d11089c148e5d9b9e686b62454a491e'] = 'Largeur de navigation'; // Navigation Width +$_MODULE['<{creativeelements}prestashop>_eee0168be69b854c20621fc6f01cc3fc'] = 'Au survol'; // Hover +$_MODULE['<{creativeelements}prestashop>_d55b3ffa9fc8021e934158ca07e2770e'] = 'Ajouter votre id personnalisé sans la touche carré. par exemple : mon-id'; // Add your custom id WITHOUT the Pound key. e.g: my-id +$_MODULE['<{creativeelements}prestashop>_7b366044b5cb5aad6cc2fabb977c8534'] = 'ID de CSS'; // CSS ID +$_MODULE['<{creativeelements}prestashop>background_control_45f4ce6c3306644b1efe333f4f8d6929'] = 'Angle'; // Angle +$_MODULE['<{creativeelements}prestashop>background_control_fdc32a55217f1ca054f1f2b51ef4f6ec'] = 'Radial'; // Radial +$_MODULE['<{creativeelements}prestashop>background_control_32a843da6ea40ab3b17a3421ccdf671b'] = 'Linéaire'; // Linear +$_MODULE['<{creativeelements}prestashop>background_control_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Type'; // Type +$_MODULE['<{creativeelements}prestashop>background_control_d9eb9d6792d85c5d2433902a63116ad5'] = 'Seconde couleur'; // Second Color +$_MODULE['<{creativeelements}prestashop>background_control_ce5bf551379459c1c61d2a204061c455'] = 'Emplacement'; // Location +$_MODULE['<{creativeelements}prestashop>background_control_5e59525cb7d1d1cd93be0b9f36e9d09a'] = 'Dégradé'; // Gradient +$_MODULE['<{creativeelements}prestashop>_512fec27328fb722291cf6ecf36fa913'] = 'Les URL « de » et « à » doivent être différentes'; // The `from` and `to` URL's must be different +$_MODULE['<{creativeelements}prestashop>_d2b49c98219ccb89d57a87f2a0a4b4c2'] = 'Les URL « de » et « à » doivent être valides'; // The `from` and `to` URL's must be valid URL's +$_MODULE['<{creativeelements}prestashop>_2b3a87fb1d58406bd4b58eeb2af2f23c'] = 'Impossible de supprimer cette révision.'; // Cannot delete this revision. +$_MODULE['<{creativeelements}prestashop>_ee9d01da1e865af1b559fa7c8c047555'] = 'Il y a %1$s (%2$s)'; // %1$s ago (%2$s) +$_MODULE['<{creativeelements}prestashop>revision_date_format_bd8abeec6fc85d0fa0846a78ef6554b8'] = 'j M @ h:i'; // M j @ H:i +$_MODULE['<{creativeelements}prestashop>_0cc5d0ddd0ea34a8490e6e7fdb2cf924'] = 'Sauvegarde automatique'; // Autosave +$_MODULE['<{creativeelements}prestashop>_32c676ac5296556c0573a301ef5ab07b'] = 'Révision'; // Revision +$_MODULE['<{creativeelements}prestashop>_3fb0206d178d45a9b3542587483d4cd2'] = 'Il semble que la fonctionnalité de révision après publication n’est pas disponible sur votre site web.'; // It looks like the post revision feature is unavailable in your website. +$_MODULE['<{creativeelements}prestashop>_3c4f26f0975793eb27edab314f670410'] = 'Commencez à concevoir votre page et vous pourrez voir l’historique de révision complet ici.'; // Start designing your page and you'll be able to see the entire revision history here. +$_MODULE['<{creativeelements}prestashop>_b8c4a80d0eda1423acdda2bd6680be78'] = 'L’historique des révisions vous permet de sauvegarder les versions précédentes de votre travail et de les restaurer à tout moment.'; // Revision history lets you save your previous versions of your work, and restore them any time. +$_MODULE['<{creativeelements}prestashop>_53e5aa2c97fef1555d2511de8218c544'] = 'Par'; // By +$_MODULE['<{creativeelements}prestashop>_585823316b8534dcef7df30ebeab9951'] = 'Encore aucune révision enregistrée'; // No Revisions Saved Yet +$_MODULE['<{creativeelements}prestashop>_cf82b977e27ef9ac33709a3effde83a2'] = 'Séparateur de milliers'; // Thousand Separator +$_MODULE['<{creativeelements}prestashop>background_control_7a1920d61156abc05a60135aefe8bc67'] = 'Par défaut'; // Default +$_MODULE['<{creativeelements}prestashop>_6579fbb112744c89b2c74f479df5f94b'] = 'Le CSS personnalisé vous permet d’ajouter du code CSS à n’importe quel widget et d’avoir le rendu en direct dans l’éditeur.'; // Custom CSS lets you add CSS code to any widget, and see it render live right in the editor. +$_MODULE['<{creativeelements}prestashop>_42e6feb7f76e910efcda54034ecc83ce'] = 'CSS personnalisé'; // Custom CSS +$_MODULE['<{creativeelements}prestashop>_525e4cfb0dd9f1b84d6018feff823cfe'] = 'Avec cette fonctionnalité, vous pouvez enregistrer un widget comme global, puis l’ajouter à plusieurs zones. Toutes les zones seront modifiables à partir d’un seul endroit.'; // With this feature, you can save a widget as global, then add it to multiple areas. All areas will be editable from one single place. +$_MODULE['<{creativeelements}prestashop>_d15305d7a4e34e02489c74a5ef542f36'] = 'Arrêt'; // Off +$_MODULE['<{creativeelements}prestashop>_521c36a31c2762741cf0f8890cbe05e3'] = 'Marche'; // On +$_MODULE['<{creativeelements}prestashop>_5d4d8771b47d6c5166952822e552f082'] = 'Très grand'; // Extra Large +$_MODULE['<{creativeelements}prestashop>_581a3d012fd82e4905a9fe0db3b37bfe'] = 'Très petit'; // Extra Small +$_MODULE['<{creativeelements}prestashop>_52293f13937b8aed21da15967dad191a'] = 'Données non valides : l’ID du modèle ne peut pas être le même que le modèle en cours de modification. Veuillez en choisir un autre.'; // Invalid Data: The Template ID cannot be the same as the currently edited template. Please choose a different one. +$_MODULE['<{creativeelements}prestashop>_9313566fe19aca293daefe4ce37942bf'] = 'Habillage'; // Skin +$_MODULE['<{creativeelements}prestashop>_3c1065e0c6f9907043f41d333a91b80e'] = 'Choisissez quelles couleurs apparaissent dans le sélecteur de couleur de l’éditeur. Cela rend bien plus facile l’accès aux couleurs que vous choisissez pour le site.'; // Choose which colors appear in the editor's color picker. This makes accessing the colors you chose for the site much easier. +$_MODULE['<{creativeelements}prestashop>_280123f6890e1c72895353373d2caf09'] = 'Ordre décroissant'; // Descending order +$_MODULE['<{creativeelements}prestashop>_a4f0054ae4e726280b463caec716d1e9'] = 'Ordre croissant'; // Ascending order +$_MODULE['<{creativeelements}prestashop>_22f41f72bb164a942b3320ad48914c00'] = 'Attention : vous êtes sur le point de supprimer tout le contenu de cette page. Confirmez-vous vouloir faire cela ?'; // Attention: We are going to DELETE ALL CONTENT from this page. Are you sure you want to do that? +$_MODULE['<{creativeelements}prestashop>_e0ec11596b5e9fec2ae608c59800cebe'] = 'Supprimer tout le contenu'; // Delete All Content +$_MODULE['<{creativeelements}prestashop>_7ffb0536a7eb8a1924bc8cddd5ebd992'] = '%s sont désactivés'; // %s are disabled +$_MODULE['<{creativeelements}prestashop>_c6f6c095c286b1f7a30b3366e22ef17f'] = 'Mettre à jour les modifications apportées à la page'; // Update changes to page +$_MODULE['<{creativeelements}prestashop>_55fb1b11cc3dbb67782af12731c07206'] = 'Sélecteur de couleur'; // Color Picker +$_MODULE['<{creativeelements}prestashop>_bad32986401d36fef61ae1ea7d8c6c4b'] = 'Saisissez le sélecteur de l’élément parent auquel s’étendront les sections (ex: #primary/.wrapper /main etc.). Laissez vide pour adapter à la largeur de la page.'; // Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width. +$_MODULE['<{creativeelements}prestashop>_b844b7c80a87be2619f6876933b07aea'] = 'Section étirée ajustée à'; // Stretched Section Fit To +$_MODULE['<{creativeelements}prestashop>_e1e75c2b4e63835910c8aee262af0d02'] = 'Définit la largeur par défaut de la zone de contenu (par défaut : 1140)'; // Sets the default width of the content area (Default: 1140) +$_MODULE['<{creativeelements}prestashop>_b7b6baa53f2fedf6c3b60e0327c95a2f'] = 'Section à onglets'; // Tabbed Section +$_MODULE['<{creativeelements}prestashop>_fbfd467e50aef807cbdabd58a86621d3'] = 'Barre d’onglets'; // Tab Bar +$_MODULE['<{creativeelements}prestashop>_8c5751b7fdbcb82b348c2e5ad90b3183'] = 'Défilement de débordement'; // Overflow Scrolling +$_MODULE['<{creativeelements}prestashop>_7bafc2154ab2b900bbb572c80ba6c423'] = 'Étire la section en pleine largeur en utilisant JS.'; // Stretch the section to the full width of the page using JS. +$_MODULE['<{creativeelements}prestashop>_442a913f95b8efa0a564f8acd5953752'] = 'Étirer la section'; // Stretch Section +$_MODULE['<{creativeelements}prestashop>_d87d1f34e54b9466c18bca47e34b0c37'] = 'Cette image de couverture remplacera l’arrière-plan vidéo sur écrans mobile et tablette.'; // This cover image will replace the background video on mobile and tablet devices. +$_MODULE['<{creativeelements}prestashop>_7a007d6bcd82bb60a6d3e4d45dc61eb4'] = 'Inverser les colonnes'; // Reverse Columns +$_MODULE['<{creativeelements}prestashop>_87d17f4624a514e81dc7c8e016a7405c'] = 'Mobile'; // Mobile +$_MODULE['<{creativeelements}prestashop>_aba47e8f90c4d9395507038e9215582f'] = 'Aperçu par défaut'; // Default Preview +$_MODULE['<{creativeelements}prestashop>_bc30b765dbe7cfa8d8cfa4184af2c620'] = 'Lier les valeurs ensemble'; // Link values together +$_MODULE['<{creativeelements}prestashop>_6feadb455c64759731e453380c52fbd9'] = 'Code court'; // Shortcode +$_MODULE['<{creativeelements}prestashop>_f8508f576cd3f742dfc268258dcdf0dd'] = 'Distant'; // Remote +$_MODULE['<{creativeelements}prestashop>_b9709e1b50c06ed39df03fa0b90d40ab'] = 'Importer maintenant'; // Import Now +$_MODULE['<{creativeelements}prestashop>_fcbad5f8e00955d4129fe79370802ff1'] = 'Importer des modèles'; // Import Templates +$_MODULE['<{creativeelements}prestashop>_e153ba109d2d09abb855127d99ed6f25'] = 'Exporter un modèle'; // Export Template +$_MODULE['<{creativeelements}prestashop>_2e46eab92bf73b409799a8baaa13f8f2'] = '(sans titre)'; // (no title) +$_MODULE['<{creativeelements}prestashop>template_library_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Type'; // Type +$_MODULE['<{creativeelements}prestashop>template_library_c7ae4d8246472b41edae4e734cc323aa'] = 'Aucun modèle trouvé dans la corbeille'; // No Templates found in Trash +$_MODULE['<{creativeelements}prestashop>template_library_6d9743b85d09a6bc07b10c70ef974687'] = 'Aucun modèle trouvé'; // No Templates found +$_MODULE['<{creativeelements}prestashop>template_library_0e74beca97e711d51cf7a12165d583b7'] = 'Rechercher un modèle'; // Search Template +$_MODULE['<{creativeelements}prestashop>template_library_842adbd6cb91017b2ff5a1d89bd7c54f'] = 'Voir le modèle'; // View Template +$_MODULE['<{creativeelements}prestashop>template_library_b9e1606876afab10e75fb80740c860a0'] = 'Tous les modèles'; // All Templates +$_MODULE['<{creativeelements}prestashop>template_library_01c91564910069ffcc8f67ecb2180d38'] = 'Nouveau modèle'; // New Template +$_MODULE['<{creativeelements}prestashop>template_library_e838b63505c498050eccbcd6090a8262'] = 'Modifier le modèle'; // Edit Template +$_MODULE['<{creativeelements}prestashop>template_library_5a6eb418df400f68052e7725cdc1170a'] = 'Ajouter un nouveau modèle'; // Add New Template +$_MODULE['<{creativeelements}prestashop>template_library_de9ced9bf5e9829de4a93ad8c9d7a170'] = 'Ajouter un nouveau'; // Add New +$_MODULE['<{creativeelements}prestashop>template_library_278c491bdd8a53618c149c4ac790da34'] = 'Modèle'; // Template +$_MODULE['<{creativeelements}prestashop>_509820290d57f333403f490dde7316f4'] = 'Local'; // Local +$_MODULE['<{creativeelements}prestashop>_917d94376951e7a0fd3d30a655a12f2e'] = 'Synchroniser la librairie'; // Sync Library +$_MODULE['<{creativeelements}prestashop>_3da44b906269817f50ef58ea29f5f38d'] = 'Voulez vous vraiment supprimer ce modèle ?'; // Are you sure you want to delete this template? +$_MODULE['<{creativeelements}prestashop>_12113ea41be8a8ac8ed3301094d4c007'] = 'Supprimer le modèle'; // Delete Template +$_MODULE['<{creativeelements}prestashop>_193cfc9be3b995831c6af2fea6650e60'] = 'Page'; // Page +$_MODULE['<{creativeelements}prestashop>_64c2250bbf2bc80767d781cd19bb82af'] = 'Enregistrez votre %s dans la bibliothèque'; // Save Your %s to Library +$_MODULE['<{creativeelements}prestashop>_db10a1ce6ae80065018ce639ce2b8989'] = 'Les erreurs suivantes sont apparues durant le traitement de la requête :'; // The following error(s) occurred while processing the request: +$_MODULE['<{creativeelements}prestashop>_a25c753ee3e4be15ec0daa5a40deb7b8'] = 'Une erreur est apparue'; // An error occurred +$_MODULE['<{creativeelements}prestashop>_b10355bde8ffa109adfb72095166e87d'] = 'Ceci est le lieu où vos modèles doivent être. Créez les, enregistrez les, réutilisez les.'; // This is where your templates should be. Design it. Save it. Reuse it. +$_MODULE['<{creativeelements}prestashop>_9593b20ca67ef909af17be47183d93d2'] = 'Vous n’avez pas encore de modèles enregistrés ?'; // Haven’t Saved Templates Yet? +$_MODULE['<{creativeelements}prestashop>_ad07bae09061eb7eadc703f182e8c889'] = 'Saisissez le nom du modèle'; // Enter Template Name +$_MODULE['<{creativeelements}prestashop>_d51fd6071c560eaade2f7f5b326bb472'] = 'Vos designs pourront être exportés et réutilisés pour toute page ou site.'; // Your designs will be available for export and reuse on any page or website +$_MODULE['<{creativeelements}prestashop>_0095a9fa74d1713e43e370a7d7846224'] = 'Export'; // Export +$_MODULE['<{creativeelements}prestashop>_3e30a35f9c0c80e76e91b32e7a59a41c'] = 'Restez connectés ! D’autres modèles encore plus incroyables seront bientôt disponibles.'; // Stay tuned! More awesome templates coming real soon. +$_MODULE['<{creativeelements}prestashop>_b8b8e9f67faf0bb214c1686c52166ec4'] = 'Retour à la bibliothèque'; // Back to Library +$_MODULE['<{creativeelements}prestashop>_a458be0f08b7e4ff3c0f633c100176c0'] = 'Insérer'; // Insert +$_MODULE['<{creativeelements}prestashop>_b9390195ecad3986568746a2a9b56354'] = 'Mes modèles'; // My Templates +$_MODULE['<{creativeelements}prestashop>_4d70254b3a8e2bc38b6147fa6ee813be'] = 'Bibliothèque'; // Library +$_MODULE['<{creativeelements}prestashop>_d3d2e617335f08df83599665eef8a418'] = 'Fermer'; // Close +$_MODULE['<{creativeelements}prestashop>_31a9301fb39db9e093b3894b9eb582d1'] = 'Modèles enregistrés'; // Saved Templates +$_MODULE['<{creativeelements}prestashop>_45f474dd60a551d4bb0d346df55d1cc4'] = 'Bibliothèque de modèles'; // Template Library +$_MODULE['<{creativeelements}prestashop>_ec8c82009f9de01c14037e4b85106701'] = 'Sélectionnez votre structure'; // Select your Structure +$_MODULE['<{creativeelements}prestashop>_e37f4fc0441c524ee5a89453f12178c8'] = 'Ajouter un modèle'; // Add Template +$_MODULE['<{creativeelements}prestashop>_f5395c9793af8a11b406ca7c1ac70da9'] = 'En savoir plus'; // Learn More +$_MODULE['<{creativeelements}prestashop>_9de70901d3562acdbec7f907c2ca62e7'] = 'Animation de survol'; // Hover Animation +$_MODULE['<{creativeelements}prestashop>_d0799ce2e6e121f7d748fe60ca5ee142'] = 'Adaptation de l’objet'; // Object Fit +$_MODULE['<{creativeelements}prestashop>_dc448aa55848e923ec2cc916305b6d2b'] = 'Empêcher le défilement'; // Prevent Scroll +$_MODULE['<{creativeelements}prestashop>_e16b5b7f26f54214445cbe38d72c2828'] = 'Rapide'; // Fast +$_MODULE['<{creativeelements}prestashop>_efa5397985b8609a5dbeb430a4bcadd3'] = 'Lent'; // Slow +$_MODULE['<{creativeelements}prestashop>_c78a3584ba81e0cd0ba8c29487e85d10'] = 'Polices par défaut'; // Default Fonts +$_MODULE['<{creativeelements}prestashop>_b201b2e7e7a20df48b625f20c2f0933e'] = 'Palettes de couleurs'; // Color Palettes +$_MODULE['<{creativeelements}prestashop>_373492f01889c61ff7d8bb91cf43d1bd'] = 'Animation d’entrée'; // Entrance Animation +$_MODULE['<{creativeelements}prestashop>_f0153907b3a8a6ab6d24ebda1e079951'] = 'Vous pouvez les activer depuis la page des réglages de module.'; // You can enable it from the module settings page. +$_MODULE['<{creativeelements}prestashop>box_shadow_control_b56d315e49178ba86341ff3b4e337c6b'] = 'Position interne'; // Inset +$_MODULE['<{creativeelements}prestashop>box_shadow_control_838389e9675a112e8187aa34a4f61709'] = 'Ombre de boîte'; // Box Shadow +$_MODULE['<{creativeelements}prestashop>_06ce2a25e5d12c166a36f654dbea6012'] = 'Vertical'; // Vertical +$_MODULE['<{creativeelements}prestashop>_c1b5fa03ecdb95d4a45dd1c40b02527f'] = 'Horizontal'; // Horizontal +$_MODULE['<{creativeelements}prestashop>_180bc3b1c5619aaef40e803f49921012'] = 'Diffuser'; // Spread +$_MODULE['<{creativeelements}prestashop>_8b52de510bc5497ac43abfe566be48ab'] = 'Flou'; // Blur +$_MODULE['<{creativeelements}prestashop>_a3d68d897c2e60e93783fe59e4da7ebf'] = 'De côté'; // Aside +$_MODULE['<{creativeelements}prestashop>_5289f1a930358cba4623a7234db5c71e'] = 'Témoignage'; // Testimonial +$_MODULE['<{creativeelements}prestashop>_30e624fbe7c9345f3cdb243bc2eeacfd'] = 'Couleur officielle'; // Official Color +$_MODULE['<{creativeelements}prestashop>_bef2481eda40bd121482f1814d72314f'] = 'Rondes'; // Rounded +$_MODULE['<{creativeelements}prestashop>_786c4bcb88b15bd37b70d4b9d62ba324'] = 'Icônes réseaux sociaux'; // Social Icons +$_MODULE['<{creativeelements}prestashop>_9769396cc39a68db5cb5ff02896596ea'] = 'Ma compétence'; // My Skill +$_MODULE['<{creativeelements}prestashop>_3f761a65a378ebfdfc28741392606662'] = 'Bouton de téléchargement'; // Download Button +$_MODULE['<{creativeelements}prestashop>_b682e97ce55b3fbc9cc299c667cea845'] = 'Superposition d’arrière-plan'; // Background Overlay +$_MODULE['<{creativeelements}prestashop>_f23578fcd2a868168854ab714e7de537'] = 'Étendre'; // Extended +$_MODULE['<{creativeelements}prestashop>_812a48ba719daeda82e4da8e812d426c'] = 'URL personnalisée'; // Custom URL +$_MODULE['<{creativeelements}prestashop>_36bb6559696dc9124986ae120515984f'] = 'Coller'; // Paste +$_MODULE['<{creativeelements}prestashop>_a9ded1e5ce5d75814730bb4caaf49419'] = 'Arrière-plan'; // Background +$_MODULE['<{creativeelements}prestashop>_ec114b1e189d6c3044e5706e93682fa8'] = 'Plus large'; // Wider +$_MODULE['<{creativeelements}prestashop>_0db377921f4ce762c62526131097968f'] = 'Général'; // General +$_MODULE['<{creativeelements}prestashop>_737e6c4a46563dd9da1557b304178be1'] = 'Intro par ligne'; // Intro Byline +$_MODULE['<{creativeelements}prestashop>_627b24abf27e2d03d38537f84e81cb2e'] = 'Espacement'; // Spacing +$_MODULE['<{creativeelements}prestashop>_76fbf0ccd7fcd64879c2ff2119dc15a4'] = 'À l’extérieur'; // Outside +$_MODULE['<{creativeelements}prestashop>_9b6d3000134648fc9f1e71094ae0847d'] = 'À l’intérieur'; // Inside +$_MODULE['<{creativeelements}prestashop>_02674a4ef33e11c879283629996c8ff8'] = 'Direction'; // Direction +$_MODULE['<{creativeelements}prestashop>_a301fb6c9931e5b86a9b36a31b9c9e6d'] = 'Options supplémentaires'; // Additional Options +$_MODULE['<{creativeelements}prestashop>_6649c4b2e13734c911fbd45e025d9431'] = 'Flèches et points'; // Arrows and Dots +$_MODULE['<{creativeelements}prestashop>_b26ff651c2d7385db87fa44737402935'] = 'Largeur de la bordure gauche'; // Left Border Width +$_MODULE['<{creativeelements}prestashop>_c7f201c52862951afad2ae9802595286'] = 'Durée de l’animation'; // Animation Duration +$_MODULE['<{creativeelements}prestashop>_17b04c58b2a994e2a115530681ca25e3'] = 'Étirer l’image'; // Image Stretch +$_MODULE['<{creativeelements}prestashop>_35773b27596fe91a749ddbf3e1257966'] = 'Carrousel d’images'; // Image Carousel +$_MODULE['<{creativeelements}prestashop>_0dc52fcd265149dd09a6d1f5b0e5a3b5'] = 'Vitesse d’animation'; // Animation Speed +$_MODULE['<{creativeelements}prestashop>_7b49a3eb804d134cdce5579121787fc3'] = 'Vous pouvez recadrer la taille de l’image d’origine à n’importe quelle taille personnalisée. Vous pouvez également définir une valeur unique pour la hauteur ou la largeur afin de conserver le rapport de taille d’origine.'; // You can crop the original image size to any custom size. You can also set a single value for height or width in order to keep the original size ratio. +$_MODULE['<{creativeelements}prestashop>_f9641a2d9ee9b7d52b4c15b7745c5ad6'] = 'Vous devez insérer la position de module (point d’accroche) sélectionnée dans le modèle actuel pour que CreativeElements fonctionne sur cette page.'; // You must insert the selected module position (hook) in the current template, in order for CreativeElements to work on this page. +$_MODULE['<{creativeelements}prestashop>_9e24be381f41ce80bb67674e03f7b83a'] = 'Désolé, la zone de contenu n’a pas été trouvée dans votre page.'; // Sorry, the content area was not found in your page. +$_MODULE['<{creativeelements}prestashop>_8250b33e7828c54440743f11d36c2204'] = 'Contrôle la couleur'; // Controls Color +$_MODULE['<{creativeelements}prestashop>_87cd4e8df281e8565913cb1dee924173'] = 'Portrait d’intro'; // Intro Portrait +$_MODULE['<{creativeelements}prestashop>_54f70e7001bba1a2f8b2c7394b7fbc65'] = 'Titre d’intro'; // Intro Title +$_MODULE['<{creativeelements}prestashop>_89d7b10cb4238977d2b523dfd9ea7745'] = 'Boucle'; // Loop +$_MODULE['<{creativeelements}prestashop>_4182f4b55a58f5a6a3e3ee9fdb9b6b88'] = 'Options vidéo'; // Video Options +$_MODULE['<{creativeelements}prestashop>_34e2d1989a1dbf75cd631596133ee5ee'] = 'Vidéo'; // Video +$_MODULE['<{creativeelements}prestashop>_b9987a246a537f4fe86f1f2e3d10dbdb'] = 'Affichage'; // Display +$_MODULE['<{creativeelements}prestashop>_1779d23035f16bb6f8a0f548f1eaa6b9'] = 'Insérez un média'; // Insert Media +$_MODULE['<{creativeelements}prestashop>_849a0c92b921bb7fd3c9f4f6d197f89c'] = '%s images sélectionnées'; // %s Images Selected +$_MODULE['<{creativeelements}prestashop>image_size_control_0e0613e1f93d33fba15773ba3ff6f56a'] = 'Dimension de l’image'; // Image Dimension +$_MODULE['<{creativeelements}prestashop>image_size_control_90589c47f06eb971d548591f23c285af'] = 'Personnalisé'; // Custom +$_MODULE['<{creativeelements}prestashop>border_control_eb656e41b6da91494775ecf47a51da91'] = 'Tirets'; // Dashed +$_MODULE['<{creativeelements}prestashop>border_control_90c09393a4c0970bc9a6703ad527781c'] = 'Pointillés'; // Dotted +$_MODULE['<{creativeelements}prestashop>border_control_d909d38d705ce75386dd86e611a82f5b'] = 'Double'; // Double +$_MODULE['<{creativeelements}prestashop>border_control_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Continue'; // Solid +$_MODULE['<{creativeelements}prestashop>_04e0385c10aefee8e4681617d2f3ef40'] = 'Fondu'; // Fade +$_MODULE['<{creativeelements}prestashop>_a62d22910732d5343689f5117999abfa'] = 'Effet'; // Effect +$_MODULE['<{creativeelements}prestashop>image_size_control_bbd47109890259c0127154db1af26c75'] = 'Entière'; // Full +$_MODULE['<{creativeelements}prestashop>_d3eea2f5aca8f6254f0938b5e8a33506'] = 'Alignement vertical'; // Vertical Alignment +$_MODULE['<{creativeelements}prestashop>_431c060088b62effa79dd9c710d20b00'] = 'Boucle infinie'; // Infinite Loop +$_MODULE['<{creativeelements}prestashop>_4c72d232d1a1406e6c26251bbf6c3b25'] = 'Points'; // Dots +$_MODULE['<{creativeelements}prestashop>_8c38c6601843e340c9e290746e5f92cc'] = 'Réinitialiser la structure'; // Reset Structure +$_MODULE['<{creativeelements}prestashop>image_size_control_7d25feb59b8a44341084a00840d860d1'] = 'Taille de l’image'; // Image Size +$_MODULE['<{creativeelements}prestashop>typography_control_6adf97f83acf6453d4a6a4b1070f3754'] = 'Aucun'; // None +$_MODULE['<{creativeelements}prestashop>_59a1c1ca0188302c39e06c1ceaf9b4d5'] = 'Balise HTML de titre'; // Title HTML Tag +$_MODULE['<{creativeelements}prestashop>_33f5f59c40d41e206fd9af76ba81f8a2'] = 'Cliquez sur le bouton modifier pour changer ce texte. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'; // Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo. +$_MODULE['<{creativeelements}prestashop>_b4dbdac374f627ca60f562d1dd368e97'] = 'Ceci est le titre'; // This is the heading +$_MODULE['<{creativeelements}prestashop>_ddedab99da4615aa6cb108466ba35bf1'] = 'Ajoutez votre classe personnalisée sans le point. Ex : ma-classe'; // Add your custom class WITHOUT the dot. e.g: my-class +$_MODULE['<{creativeelements}prestashop>_46c613087b2b4545ce4ef4ca82dc579c'] = 'Attention : Les réglages d’affichage (afficher/masquer pour mobile, tablette ou ordinateur) ne prendront effet qu’une fois que vous êtes sur l’aperçu ou la page en direct, et pas pendant que vous êtes en mode modification dans CreativeElements.'; // Attention: The display settings (show/hide for mobile, tablet or desktop) will only take effect once you are on the preview or live page, and not while you're in editing mode in Elementor. +$_MODULE['<{creativeelements}prestashop>_5e8fe619138eb3ea59cbc11b4e977a3c'] = 'La liste des polices utilisées si la police choisie n’est pas disponible.'; // The list of fonts used if the chosen font is not available. +$_MODULE['<{creativeelements}prestashop>_527173285a0e8a11e07da121e3dc9493'] = 'Polices génériques par défaut'; // Default Generic Fonts +$_MODULE['<{creativeelements}prestashop>_a1a1577b9a9dddef5aa6644847575ef0'] = 'Lien YouTube ou fichier vidéo (mp4 est recommandé).'; // YouTube link or video file (mp4 is recommended). +$_MODULE['<{creativeelements}prestashop>_aa56a2e65d8106aef3c61e4f6bf94fdb'] = 'Éléments'; // Elements +$_MODULE['<{creativeelements}prestashop>_7070a8e837fa8d255ec7aff468edb08d'] = 'Le constructeur de page par glisser-déposer le plus avancé. Créez des sites web haut de gamme aux pixels parfaits à la vitesse de l’éclair. N’importe quel thème, n’importe quelle page, n’importe quelle conception.'; // The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design. +$_MODULE['<{creativeelements}prestashop>_f4f70727dc34561dfde1a3c529b6205c'] = 'Réglages'; // Settings +$_MODULE['<{creativeelements}prestashop>typography_control_12a8e47062ed3272e04dc0b991e38466'] = 'Oblique'; // Oblique +$_MODULE['<{creativeelements}prestashop>typography_control_1d874710ccdcd46b95397049d2e7500c'] = 'Italique'; // Italic +$_MODULE['<{creativeelements}prestashop>typography_control_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normal'; // Normal +$_MODULE['<{creativeelements}prestashop>typography_control_97a62b5e6d3cae255036b6bc37b87b44'] = 'Capitaliser'; // Capitalize +$_MODULE['<{creativeelements}prestashop>typography_control_dc1ff975a46c75335d6d640abdc0c3a6'] = 'Minuscule'; // Lowercase +$_MODULE['<{creativeelements}prestashop>typography_control_621e7b8ece62fecc55e883252ff2fbe7'] = 'Majuscule'; // Uppercase +$_MODULE['<{creativeelements}prestashop>_512e805300422d5e8a86031b665ef28c'] = 'Icône de lecture'; // Play Icon +$_MODULE['<{creativeelements}prestashop>_9bcffa546758e012c3379c285a9e95c4'] = 'Superposition d’image'; // Image Overlay +$_MODULE['<{creativeelements}prestashop>_3248e7a58c1ea530e42933f72bb676e6'] = 'Contrôles du lecteur'; // Player Controls +$_MODULE['<{creativeelements}prestashop>_ee17cbac55d446219173726589867db9'] = 'Vidéos suggérées'; // Suggested Videos +$_MODULE['<{creativeelements}prestashop>_ac97682c8f12cd9e67d121e87da0338d'] = 'Ratio d’aspect'; // Aspect Ratio +$_MODULE['<{creativeelements}prestashop>_9690ccd809b1cbdb861d0bad3c0802c9'] = 'Contenu de va-et-vient'; // Toggle Content +$_MODULE['<{creativeelements}prestashop>_ccf67c36b837af38fd05d41dec1b47ec'] = 'Titre de va-et-vient'; // Toggle Title +$_MODULE['<{creativeelements}prestashop>_a1be4433701f8936cdf49569eb44e3ab'] = 'Va-et-vient #2'; // Toggle #2 +$_MODULE['<{creativeelements}prestashop>_0eb925daf423fe1169c3f6720e3c74c0'] = 'Va-et-vient #1'; // Toggle #1 +$_MODULE['<{creativeelements}prestashop>_f2a9f78110ca6de657f70b3ee9cd5320'] = 'Éléments de va-et-vient'; // Toggle Items +$_MODULE['<{creativeelements}prestashop>_a8875bbe4272c0bdd786cfaaedf77921'] = 'Va-et-vient'; // Toggle +$_MODULE['<{creativeelements}prestashop>_e0f1691bdb67d9859e5a6a8d7c26e6a1'] = 'Éditeur de texte'; // Text Editor +$_MODULE['<{creativeelements}prestashop>_5a9bf0bc2b910b5e03c3f85d363838e7'] = 'Contenu de l’onglet'; // Tab Content +$_MODULE['<{creativeelements}prestashop>_3acb228e77768f2611ae59e04595a90d'] = 'Titre de l’onglet'; // Tab Title +$_MODULE['<{creativeelements}prestashop>_ef6bec3512b7dee69f91f853f5fe7292'] = 'Onglet #2'; // Tab #2 +$_MODULE['<{creativeelements}prestashop>_d9acb2b50c1ced5fe56790e1518532b2'] = 'Onglet #1'; // Tab #1 +$_MODULE['<{creativeelements}prestashop>_30eb111c6722ac96a4239a87dddfe5ae'] = 'Éléments d’onglet'; // Tabs Items +$_MODULE['<{creativeelements}prestashop>_7015777bcc86cd0c5e4819310d62b040'] = 'Onglets'; // Tabs +$_MODULE['<{creativeelements}prestashop>_6533b60847609ca99607d99753b6ea9b'] = 'Pause au survol'; // Pause on Hover +$_MODULE['<{creativeelements}prestashop>_7396285ad8822a609e7d737cc82f6076'] = 'Vitesse de lecture automatique'; // Autoplay Speed +$_MODULE['<{creativeelements}prestashop>_4e05974b02cc4aa95db4d85baef6b6b4'] = 'Flèches'; // Arrows +$_MODULE['<{creativeelements}prestashop>_6160a53ece50ce6d4f5ef4452549835e'] = 'Diapositive'; // Slide +$_MODULE['<{creativeelements}prestashop>_3cc101db14264780bd1e84bc80d588f1'] = 'Style du titre'; // Title Style +$_MODULE['<{creativeelements}prestashop>_2bf376babbb3b4d6d1158aabc5b49109'] = 'Couleur du texte interne'; // Inner Text Color +$_MODULE['<{creativeelements}prestashop>_90d254b1e4a44ef82a0eff5ce2dd30bf'] = 'Concepteur web'; // Web Designer +$_MODULE['<{creativeelements}prestashop>_8eb7d29b13b3a8389bef4c465053f63f'] = 'ex : concepteur web'; // e.g. Web Designer +$_MODULE['<{creativeelements}prestashop>_2ffe8a03531a12477e27a146bc15a3ba'] = 'Texte interne'; // Inner Text +$_MODULE['<{creativeelements}prestashop>_e7832ab13448cc6894f4262dc1e05d0d'] = 'Afficher le pourcentage'; // Display Percentage +$_MODULE['<{creativeelements}prestashop>_37be07209f53a5d636d5c904ca9ae64c'] = 'Pourcentage'; // Percentage +$_MODULE['<{creativeelements}prestashop>_8e4a53e769f15496d5c8f4fe9d0729df'] = 'Barre de progression'; // Progress Bar +$_MODULE['<{creativeelements}prestashop>_1fec9f77e87864f1bc863596105c295d'] = 'Par exemple : à propos'; // For Example: About +$_MODULE['<{creativeelements}prestashop>_697b67a9f0a74057bdbb8743bbb3c46e'] = 'L’ID de l’ancre de menu.'; // The ID of Menu Anchor. +$_MODULE['<{creativeelements}prestashop>_704fe059b7613cbd3353262998cdf836'] = 'Cet ID sera l’ID CSS que vous devrez utiliser sur votre propre page, sans #.'; // This ID will be the CSS ID you will have to use in your own page, Without #. +$_MODULE['<{creativeelements}prestashop>_a34285645af2703a9501db6fc881e5df'] = 'Ancre'; // Anchor +$_MODULE['<{creativeelements}prestashop>_7551d2d59d73e7d2650f7e2b9959efbf'] = 'Ancre de menu'; // Menu Anchor +$_MODULE['<{creativeelements}prestashop>_13c31590d98cc452fc3794eaf0811e4d'] = 'Position de l’image'; // Image Position +$_MODULE['<{creativeelements}prestashop>_ac2c0f8fbfcea1d561d0dbbfafc1747d'] = 'Espacement de l’image'; // Image Spacing +$_MODULE['<{creativeelements}prestashop>_7d25feb59b8a44341084a00840d860d1'] = 'Taille de l’image'; // Image Size +$_MODULE['<{creativeelements}prestashop>_fb07b027d8d8c04f512f1a6a0f7bc365'] = 'Boîte d’image'; // Image Box +$_MODULE['<{creativeelements}prestashop>_37e929a6d14b3e6eeb834900e8216c6e'] = 'Survol de l’icône'; // Icon Hover +$_MODULE['<{creativeelements}prestashop>_757e8d7a69c388d1b39efa9bd3d54d4d'] = 'Largeur de la bordure'; // Border Width +$_MODULE['<{creativeelements}prestashop>_8d2de5368588552fbae54044ac5c7b3d'] = 'Rotation'; // Rotate +$_MODULE['<{creativeelements}prestashop>_020a9f6a979825fc9349eccc66bef6db'] = 'Couleur secondaire'; // Secondary Color +$_MODULE['<{creativeelements}prestashop>_f951a1e1ff1ed0d24a2758b6441a3431'] = 'Couleur principale'; // Primary Color +$_MODULE['<{creativeelements}prestashop>_ceb46ca115d05c51aa5a16a8867c3304'] = 'Carré'; // Square +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Cercle'; // Circle +$_MODULE['<{creativeelements}prestashop>_880c1273b27d27cfc82004c3a4b205c9'] = 'Forme'; // Shape +$_MODULE['<{creativeelements}prestashop>_6b73ad372508225645eb96a2e505a602'] = 'Encadré'; // Framed +$_MODULE['<{creativeelements}prestashop>_29b733fdb4bddeda910b3b4a659c2fef'] = 'Empilé'; // Stacked +$_MODULE['<{creativeelements}prestashop>_0c03306ef001b4e3d7f76ee2faad389e'] = 'Retrait du texte'; // Text Indent +$_MODULE['<{creativeelements}prestashop>_3f7b121ec5cc19cf6676a28656e0d5b8'] = 'Élément de liste'; // List Item +$_MODULE['<{creativeelements}prestashop>_8d35756b5a8f878d9d20f3ba0851786d'] = 'Élément de liste #3'; // List Item #3 +$_MODULE['<{creativeelements}prestashop>_043fd607b45939749a567bcb850978bc'] = 'Élément de liste #2'; // List Item #2 +$_MODULE['<{creativeelements}prestashop>_88e38f5c21b56f5f87896476088a1783'] = 'Élément de liste #1'; // List Item #1 +$_MODULE['<{creativeelements}prestashop>_591180770b39c5f069a1b2f9e643952c'] = 'Liste d’icône'; // Icon List +$_MODULE['<{creativeelements}prestashop>_0c02adc8335c386e48c48be7304d6f9e'] = 'https://your-link.com'; // https://your-link.com +$_MODULE['<{creativeelements}prestashop>_917aedb05020a5ad03b91720c66d1900'] = 'Espacement de l’icône'; // Icon Spacing +$_MODULE['<{creativeelements}prestashop>_3902b5474a18ab7e9f8ce952a8f8123f'] = 'Boîte d’icône'; // Icon Box +$_MODULE['<{creativeelements}prestashop>_e0ec89dede7dfb470b66327694fcd96c'] = 'Code HTML'; // HTML Code +$_MODULE['<{creativeelements}prestashop>_4c4ad5fca2e7a3f74dbb1ced00381aa4'] = 'HTML'; // HTML +$_MODULE['<{creativeelements}prestashop>_022586563e1d7808a2dcc1adf7d31cdd'] = 'Balise HTML'; // HTML Tag +$_MODULE['<{creativeelements}prestashop>_d8e4922dd15f21a02528d54926dcceac'] = 'Saisissez votre titre'; // Enter your title +$_MODULE['<{creativeelements}prestashop>_0101316665d4f82adaa26d86fbbb2d6e'] = 'Titre'; // Heading +$_MODULE['<{creativeelements}prestashop>_ec6d39989d44bfedcd0ddaa3651fa194'] = 'London Eye, Londres, Royaume-Uni'; // London Eye, London, United Kingdom +$_MODULE['<{creativeelements}prestashop>_46f3ea056caa3126b91f3f70beea068c'] = 'Carte'; // Map +$_MODULE['<{creativeelements}prestashop>_272ba7d164aa836995be6319a698be84'] = 'Légende'; // Caption +$_MODULE['<{creativeelements}prestashop>_fff0d600f8a0b5e19e88bfb821dd1157'] = 'Images'; // Images +$_MODULE['<{creativeelements}prestashop>_64663f4646781c9c0110838b905daa23'] = 'Aléatoire'; // Random +$_MODULE['<{creativeelements}prestashop>_6e475c4e40cb8bdfd54c18345937bc9a'] = 'Fichier média'; // Media File +$_MODULE['<{creativeelements}prestashop>_6861444ec5168a915bf147d856ecb91b'] = 'Page de pièce-jointe'; // Attachment Page +$_MODULE['<{creativeelements}prestashop>_d33c208fe1458eff399189b5b0515025'] = 'Ajouter des images'; // Add Images +$_MODULE['<{creativeelements}prestashop>_9cc51a9ca0ed0404f8b9125ad563ade9'] = 'Galerie d’images'; // Image Gallery +$_MODULE['<{creativeelements}prestashop>_466b98ca0f38bd8bf2260246c91f6882'] = 'Écart'; // Gap +$_MODULE['<{creativeelements}prestashop>_cb5feb1b7314637725a2e73bdc9f7295'] = 'Couleur'; // Color +$_MODULE['<{creativeelements}prestashop>_8c489d0946f66d17d73f26366a4bf620'] = 'Graisse'; // Weight +$_MODULE['<{creativeelements}prestashop>_6ab9a295c00f945cf4881fd7667a0334'] = 'Espaceur'; // Spacer +$_MODULE['<{creativeelements}prestashop>_2908050e771fb91a3afbb7809972e90c'] = 'Séparateur'; // Divider +$_MODULE['<{creativeelements}prestashop>_b2ee912b91d69b435159c7c3f6df7f5f'] = 'Nombre'; // Number +$_MODULE['<{creativeelements}prestashop>_7776af0e9a7220bb12e18bbb20d49314'] = 'Numéro cool'; // Cool Number +$_MODULE['<{creativeelements}prestashop>_32ba78fe43257d3e7f88e3935a8ea0d4'] = 'Plus'; // Plus +$_MODULE['<{creativeelements}prestashop>_5b122ce454e4b9f39a663d8d8ed6e85c'] = 'Suffixe du nombre'; // Number Suffix +$_MODULE['<{creativeelements}prestashop>_83294d77029945fdb8dc4a5388829d27'] = 'Préfixe du nombre'; // Number Prefix +$_MODULE['<{creativeelements}prestashop>_0cb5ed4f4d6f3d8b739d1f10fec8d36d'] = 'Nombre de fin'; // Ending Number +$_MODULE['<{creativeelements}prestashop>_ededf9a7b5f65a321a5f20ebf58e9517'] = 'Nombre de départ'; // Starting Number +$_MODULE['<{creativeelements}prestashop>_64d129224a5377b63e9727479ec987d9'] = 'Compteur'; // Counter +$_MODULE['<{creativeelements}prestashop>_05b1dc77590105a18fc4c02526fe0c7a'] = 'Lecture automatique'; // Autoplay +$_MODULE['<{creativeelements}prestashop>_059910d00f03f1aad921ecef33b1deb7'] = 'Diapositives à faire défiler'; // Slides to Scroll +$_MODULE['<{creativeelements}prestashop>_d7b5e50ef2050d92c3972793da595f49'] = 'Diapositives à afficher'; // Slides to Show +$_MODULE['<{creativeelements}prestashop>_10bf609ae34aa1c82f39f0e90cf6ffaf'] = 'Choisissez une image'; // Choose Image +$_MODULE['<{creativeelements}prestashop>_be53a0541a6d36f6ecb879fa2c584b08'] = 'Image'; // Image +$_MODULE['<{creativeelements}prestashop>_070554647306343cbea29ebfdd278ba8'] = 'Bordure'; // Border +$_MODULE['<{creativeelements}prestashop>_7bfcadb5535fe8aad5032762b7bfe159'] = 'Après'; // After +$_MODULE['<{creativeelements}prestashop>_9060587edeb01a63e3d3edc959678d1e'] = 'Avant'; // Before +$_MODULE['<{creativeelements}prestashop>_f26664db07487754bb4b21355caad9ca'] = 'Position de l’icône'; // Icon Position +$_MODULE['<{creativeelements}prestashop>_817434295a673aed431435658b65d9a7'] = 'Icône'; // Icon +$_MODULE['<{creativeelements}prestashop>_6f6cb72d544962fa333e2e34ce64f719'] = 'Taille'; // Size +$_MODULE['<{creativeelements}prestashop>_058cc077563d4b47b43ae642a6478159'] = 'Justifié'; // Justified +$_MODULE['<{creativeelements}prestashop>_a63706eecfa33f67b315f978392ad7ae'] = 'Alignement'; // Alignment +$_MODULE['<{creativeelements}prestashop>_e737584ec6ea30637b1e2b1dde624fbe'] = 'XXL'; // XXL +$_MODULE['<{creativeelements}prestashop>_a7a4ccc5e1a068d87f4965e014329201'] = 'XL'; // XL +$_MODULE['<{creativeelements}prestashop>_3a69b34ce86dacb205936a8094f6c743'] = 'Grand'; // Large +$_MODULE['<{creativeelements}prestashop>_87f8a6ab85c9ced3702b4ea641ad4bb5'] = 'Moyen'; // Medium +$_MODULE['<{creativeelements}prestashop>_2660064e68655415da2628c2ae2f7592'] = 'Petit'; // Small +$_MODULE['<{creativeelements}prestashop>_87b7760f14fbff78d8819291f36ab9a0'] = 'Bouton'; // Button +$_MODULE['<{creativeelements}prestashop>_7dce122004969d56ae2e0245cb754d35'] = 'Modifier'; // Edit +$_MODULE['<{creativeelements}prestashop>_8c51f4baf5c75864896a9984fdd085ed'] = 'Masquer sur mobile'; // Hide On Mobile +$_MODULE['<{creativeelements}prestashop>_4365dd761ee313b7154369721242ca54'] = 'Masquer sur tablette'; // Hide On Tablet +$_MODULE['<{creativeelements}prestashop>_c936f9927e7b00ada48d5b571b74ff7d'] = 'Masquer sur ordinateur'; // Hide On Desktop +$_MODULE['<{creativeelements}prestashop>_b80517a37221cf35ccdfb5dfe99e57df'] = 'Rayon de bordure'; // Border Radius +$_MODULE['<{creativeelements}prestashop>_b5a7adde1af5c87d7fd797b6245c2a39'] = 'Description'; // Description +$_MODULE['<{creativeelements}prestashop>_b78a3223503896721cca1303f776159b'] = 'Titre'; // Title +$_MODULE['<{creativeelements}prestashop>_75e7422f2fe253fc69d3f6c148d197ee'] = 'Couleur de l’arrière-plan'; // Background Color +$_MODULE['<{creativeelements}prestashop>_62a5e490880a92eef74f167d9dc6dca0'] = 'Masquer'; // Hide +$_MODULE['<{creativeelements}prestashop>_498f79c4c5bbde77f1bceb6c86fd0f6d'] = 'Afficher'; // Show +$_MODULE['<{creativeelements}prestashop>_5c6dc399ce706d7c8114864dfe2e85cd'] = 'Bouton annuler'; // Dismiss Button +$_MODULE['<{creativeelements}prestashop>_53d7e9d912b9a2e0eb070e2f6ac8185b'] = 'Je suis une description. Cliquez sur le bouton modifier pour changer ce texte.'; // I am a description. Click the edit button to change this text. +$_MODULE['<{creativeelements}prestashop>_70124948c153a25f90f234807d432051'] = 'Titre & description'; // Title & Description +$_MODULE['<{creativeelements}prestashop>_990816b607ebf99b1415760965e4d564'] = 'Danger'; // Danger +$_MODULE['<{creativeelements}prestashop>_0eaadb4fcb48a0a0ed7bc9868be9fbaa'] = 'Avertissement'; // Warning +$_MODULE['<{creativeelements}prestashop>_505a83f220c02df2f85c3810cd9ceb38'] = 'Succès'; // Success +$_MODULE['<{creativeelements}prestashop>_4059b0251f66a18cb56f544728796875'] = 'Info'; // Info +$_MODULE['<{creativeelements}prestashop>_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Type'; // Type +$_MODULE['<{creativeelements}prestashop>_b92071d61c88498171928745ca53078b'] = 'Alerte'; // Alert +$_MODULE['<{creativeelements}prestashop>_779a68e20d5ee1a07b0968deda651684'] = 'Couleur active'; // Active Color +$_MODULE['<{creativeelements}prestashop>_475c80ecff56299d3527cf51af68e48c'] = 'Couleur de bordure'; // F +$_MODULE['<{creativeelements}prestashop>_4351cfebe4b61d8aa5efa1d020710005'] = 'Voir'; // View +$_MODULE['<{creativeelements}prestashop>_01fa2fa7f98169b137677336c3f670f0'] = 'Contenu d’accordéon'; // Accordion Content +$_MODULE['<{creativeelements}prestashop>_708714aa8d5537518f5a8a8439012354'] = 'Titre d’accordéon'; // Accordion Title +$_MODULE['<{creativeelements}prestashop>_7ad033dd18a58e91f283103cdcd98d24'] = 'Accordéon #2'; // Accordion #2 +$_MODULE['<{creativeelements}prestashop>_228e7e4cc19e59ae320bd052cd12aeb3'] = 'Accordéon #1'; // Accordion #1 +$_MODULE['<{creativeelements}prestashop>_ff3defaa406e66b49d1fd11ecebe07aa'] = 'Éléments d’accordéon'; // Accordion Items +$_MODULE['<{creativeelements}prestashop>_4d5aae0b218a0bb62ff4513b66fc34d0'] = 'Accordéon'; // Accordion +$_MODULE['<{creativeelements}prestashop>_49ee3087348e8d44e1feda1917443987'] = 'Nom'; // Name +$_MODULE['<{creativeelements}prestashop>_bafd7322c6e97d25b6299b5d6fe8920b'] = 'Non'; // No +$_MODULE['<{creativeelements}prestashop>_93cba07454f06a4a960172bbd6e2a435'] = 'Oui'; // Yes +$_MODULE['<{creativeelements}prestashop>_52f4393e1b52ba63e27310ca92ba098c'] = 'Réglages généraux'; // General Settings +$_MODULE['<{creativeelements}prestashop>_5096bb1a69971401c543c0fd182777e9'] = 'Texte d’accentuation'; // Accent Text +$_MODULE['<{creativeelements}prestashop>_c1800412bc0184dd8339a641907b549f'] = 'Texte de corps'; // Body Text +$_MODULE['<{creativeelements}prestashop>_c3cc351e0f5298324ba1af3535b17e97'] = 'Titres secondaires'; // Secondary Headline +$_MODULE['<{creativeelements}prestashop>_ecb45ba774122b23aa38ed2072872c19'] = 'Titres principaux'; // Primary Headline +$_MODULE['<{creativeelements}prestashop>_c900e1bd8e22771d610bd2a5861b544f'] = 'Accentué'; // Accent +$_MODULE['<{creativeelements}prestashop>_9dffbf69ffba8bc38bc4e01abf4b1675'] = 'Texte'; // Text +$_MODULE['<{creativeelements}prestashop>_0c7d6cf19426e01dcfa32434828ed266'] = 'Secondaire'; // Secondary +$_MODULE['<{creativeelements}prestashop>_074de7e7c226d5c60f8af14c20725352'] = 'Principal'; // Primary +$_MODULE['<{creativeelements}prestashop>_846495f9ceed11accf8879f555936a7d'] = 'Navigation'; // Navigation +$_MODULE['<{creativeelements}prestashop>_972e73b7a882d0802a4e3a16946a2f94'] = 'Basique'; // Basic +$_MODULE['<{creativeelements}prestashop>_205a36f1b372fa213113504073738be0'] = 'Position du contenu'; // Content Position +$_MODULE['<{creativeelements}prestashop>_b1ca34f82e83c52b010f86955f264e05'] = 'Milieu'; // Middle +$_MODULE['<{creativeelements}prestashop>_fbb09a82eafab60150d0996e8fe46560'] = 'Etirée'; // Stretch +$_MODULE['<{creativeelements}prestashop>_a36618027461bc0fd7bb6868929ffaec'] = 'Position de la colonne'; // Column Position +$_MODULE['<{creativeelements}prestashop>_4565b790baf0d98c20e624636451a43f'] = 'Hauteur minimum'; // Minimum Height +$_MODULE['<{creativeelements}prestashop>_c7a7e65064fdd9a2e9aa712fa88e9878'] = 'Hauteur min.'; // Min Height +$_MODULE['<{creativeelements}prestashop>_3232bb2700bece80661b7b9f834be06d'] = 'Adapté à l’écran'; // Fit To Screen +$_MODULE['<{creativeelements}prestashop>_eec6c4bdbd339edf8cbea68becb85244'] = 'Hauteur'; // Height +$_MODULE['<{creativeelements}prestashop>_e7c770a61dbdf81ca922ae0260e327c1'] = 'Large'; // Wide +$_MODULE['<{creativeelements}prestashop>_4a7ab319be06025840ef3389301424b9'] = 'Étroit'; // Narrow +$_MODULE['<{creativeelements}prestashop>_845366c74d6395b273fa175bc2e057c3'] = 'Aucun écart'; // No Gap +$_MODULE['<{creativeelements}prestashop>_58b95bbe80c80c7dc3f16d8db0c506e8'] = 'Écart de colonnes'; // Columns Gap +$_MODULE['<{creativeelements}prestashop>_399df326b0ba3630641583807b229bfe'] = 'Largeur du contenu'; // Content Width +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Pleine largeur'; // Full Width +$_MODULE['<{creativeelements}prestashop>_6d1ca8184c6a1f11ecccfa17f8f9048a'] = 'Encadré'; // Boxed +$_MODULE['<{creativeelements}prestashop>_32954654ac8fe66a1d09be19001de2d4'] = 'Largeur'; // Width +$_MODULE['<{creativeelements}prestashop>_ebd9bec4d70abc789d439c1f136b0538'] = 'Mise en page'; // Layout +$_MODULE['<{creativeelements}prestashop>_02fbde656ea799c09d5d647dc0f5960a'] = 'Ajouter une nouvelle colonne'; // Add New Column +$_MODULE['<{creativeelements}prestashop>_4f5f086e367315e5f52722c8c8e9b3e3'] = 'Largeur de colonne'; // Column Width +$_MODULE['<{creativeelements}prestashop>_9a64f91eb059eb9a1ecf038d3467e09f'] = 'Classes CSS'; // CSS Classes +$_MODULE['<{creativeelements}prestashop>_a10443964156b9e87c95e74c8f9baf15'] = 'Marge interne'; // Padding +$_MODULE['<{creativeelements}prestashop>_98369609669478919c74c916440e9978'] = 'Marge'; // Margin +$_MODULE['<{creativeelements}prestashop>_4f1f6016fc9f3f2353c0cc7c67b292bd'] = 'Centré'; // Center +$_MODULE['<{creativeelements}prestashop>_b14a348d14021b3f79da6be488d63253'] = 'Alignement du texte'; // Text Align +$_MODULE['<{creativeelements}prestashop>_8435207e2ede48cf57a3a26e10a9e7a3'] = 'Couleur du lien au survol'; // Link Hover Color +$_MODULE['<{creativeelements}prestashop>_59ece6dc07b89f5c61320dd130579a7f'] = 'Couleur du lien'; // Link Color +$_MODULE['<{creativeelements}prestashop>_0a06bdec3ccc4e4b6f6401881cf922f6'] = 'Couleur du titre'; // Heading Color +$_MODULE['<{creativeelements}prestashop>_8903861290617267b361478ab7f16f31'] = 'Couleur du texte'; // Text Color +$_MODULE['<{creativeelements}prestashop>_603850e072131401265c4fc01027db93'] = 'Typographie'; // Typography +$_MODULE['<{creativeelements}prestashop>_93f07b720ebf7d1246512569761a5804'] = 'Retiré'; // Removed +$_MODULE['<{creativeelements}prestashop>_1976d7f704de389d9fe064e08ea35b2d'] = 'Colonne'; // Column +$_MODULE['<{creativeelements}prestashop>_d2c24d59e0baff4d0155fbdf62590867'] = 'Section'; // Section +$_MODULE['<{creativeelements}prestashop>_dc4c71563b9bc39a65be853457e6b7b6'] = 'Structure'; // Structure +$_MODULE['<{creativeelements}prestashop>_b2b2df378a7c7ade199bbaf944cb3f35'] = 'Responsive'; // Responsive +$_MODULE['<{creativeelements}prestashop>_9b6545e4cea9b4ad4979d41bb9170e2b'] = 'Avancé'; // Advanced +$_MODULE['<{creativeelements}prestashop>_ae284f900f9d6e21ba69144cfc91e41b'] = 'Style'; // Style +$_MODULE['<{creativeelements}prestashop>_f15c1cae7882448b3fb0404682e17e61'] = 'Contenu'; // Content +$_MODULE['<{creativeelements}prestashop>_168b82d33f8073018c50a4f658a02559'] = 'Colonnes'; // Columns +$_MODULE['<{creativeelements}prestashop>_6ed482754b5780176fd1ba9dd789dea3'] = 'À propos de Creative Elements'; // About Creative Elements +$_MODULE['<{creativeelements}prestashop>_e0583393371074d791e836b0087dcbae'] = 'Historique des révisions'; // Revision History +$_MODULE['<{creativeelements}prestashop>_b5ccb7d52b4f221253779a94cd40e902'] = 'Bientôt'; // Soon +$_MODULE['<{creativeelements}prestashop>_5d50889672f6f860d14f502de3de1957'] = 'Couleurs'; // Colors +$_MODULE['<{creativeelements}prestashop>_d3b67861c9d313014761beb38d771889'] = 'Veuillez noter : toutes les modifications non enregistrées seront perdues.'; // Please note: All unsaved changes will be lost. +$_MODULE['<{creativeelements}prestashop>_248336101b461380a4b2391a7625493d'] = 'Enregistré'; // Saved +$_MODULE['<{creativeelements}prestashop>_4f2f5e1d6e2a13469ad431474a68ab82'] = 'Retour'; // Go Back +$_MODULE['<{creativeelements}prestashop>_2e83ec658a7776a62a320cdee2690826'] = 'Prendre le contrôle'; // Take Over +$_MODULE['<{creativeelements}prestashop>_ea4788705e6873b424c65e91c2846b19'] = 'Annuler'; // Cancel +$_MODULE['<{creativeelements}prestashop>_47748fe5d78900c50f5bfe078cd3d44d'] = '%s a pris le contrôle et est en cours de modification. Voulez-vous prendre le contrôle de la modification de cette page ?'; // %s has taken over and is currently editing. Do you want to take over this page editing? +$_MODULE['<{creativeelements}prestashop>_a5dd7c693ee0caedf9aa691116106572'] = 'Confirmez-vous vouloir supprimer ce %s ?'; // Are you sure you want to remove this %s? +$_MODULE['<{creativeelements}prestashop>_040814c79beb48a59a293776e292ccb9'] = 'Plus de palettes'; // More Palettes +$_MODULE['<{creativeelements}prestashop>_5463fe6752b217567e3f1ab1921dd3cc'] = 'Palette de couleur'; // Color Palette +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Appliquer'; // Apply +$_MODULE['<{creativeelements}prestashop>_d94b42030b9785fd754d5c1754961269'] = 'Jeter'; // Discard +$_MODULE['<{creativeelements}prestashop>_526d688f37a86d3c3f27d0c5016eb71d'] = 'Réinitialiser'; // Reset +$_MODULE['<{creativeelements}prestashop>_31fde7b05ac8952dacf4af8a704074ec'] = 'Aperçu'; // Preview +$_MODULE['<{creativeelements}prestashop>_c9cc8cce247e49bae79f15173ce97354'] = 'Enregistrer'; // Save +$_MODULE['<{creativeelements}prestashop>_36384a9ea3ec791e6bd4ab6b36f2ff2a'] = 'Tablette'; // Tablet +$_MODULE['<{creativeelements}prestashop>_2310408a63388fe57e3a4177168a8798'] = 'Ordinateur'; // Desktop +$_MODULE['<{creativeelements}prestashop>_628cef8c7f89a898c3c70b431700841b'] = 'Mode responsive'; // Responsive Mode +$_MODULE['<{creativeelements}prestashop>_e4b846392f10f46b032cf155c39a0eaf'] = 'Voir la page'; // View Page +$_MODULE['<{creativeelements}prestashop>_dd1a7e71effdaeffedeebbd060621250'] = 'Panneau des widgets'; // Widgets Panel +$_MODULE['<{creativeelements}prestashop>_b61541208db7fa7dba42c85224405911'] = 'Menu'; // Menu +$_MODULE['<{creativeelements}prestashop>_9804fe0d898c7de798c4e175f59f6672'] = 'Rechercher un widget…'; // Search Widget... +$_MODULE['<{creativeelements}prestashop>_1907bd03c6adcacb7ad68404b14ca18b'] = 'Ajouter une nouvelle section'; // Add New Section +$_MODULE['<{creativeelements}prestashop>_16bfbf9c462762cf1cba4134ec53c504'] = 'Chargement'; // Loading +$_MODULE['<{creativeelements}prestashop>_5230001af73bfa7b6518d06ce7328efa'] = 'Plus de structures'; // More Structures +$_MODULE['<{creativeelements}prestashop>_138103c4e1d9c846d0afd000e5b928c8'] = 'Ajouter un élément'; // Add Item +$_MODULE['<{creativeelements}prestashop>_f2a6c498fb90ee345d997f888fce3b18'] = 'Effacer'; // Delete +$_MODULE['<{creativeelements}prestashop>_fe146ea3246d82386939d718b5869c88'] = 'Sélectionnez une icône'; // Select Icon +$_MODULE['<{creativeelements}prestashop>_90589c47f06eb971d548591f23c285af'] = 'Personnalisé'; // Custom +$_MODULE['<{creativeelements}prestashop>typography_control_81cb1a74d81616f475b029b26a548cc9'] = 'Espacement des lettres'; // Letter Spacing +$_MODULE['<{creativeelements}prestashop>typography_control_2ea0cce3b1e76eb9a13c814937e7d295'] = 'Hauteur de ligne'; // Line-Height +$_MODULE['<{creativeelements}prestashop>_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normal'; // Normal +$_MODULE['<{creativeelements}prestashop>typography_control_ae284f900f9d6e21ba69144cfc91e41b'] = 'Style'; // Style +$_MODULE['<{creativeelements}prestashop>typography_control_2ff4148554480a37f85efd299df04850'] = 'Transformation'; // Transform +$_MODULE['<{creativeelements}prestashop>typography_control_8c489d0946f66d17d73f26366a4bf620'] = 'Graisse'; // Weight +$_MODULE['<{creativeelements}prestashop>typography_control_cefc4f7cbc8c34762e0f76703e7e174e'] = 'Famille'; // Family +$_MODULE['<{creativeelements}prestashop>typography_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Taille'; // Size +$_MODULE['<{creativeelements}prestashop>border_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Couleur'; // Color +$_MODULE['<{creativeelements}prestashop>border_control_32954654ac8fe66a1d09be19001de2d4'] = 'Largeur'; // Width +$_MODULE['<{creativeelements}prestashop>_eb656e41b6da91494775ecf47a51da91'] = 'Tirets'; // Dashed +$_MODULE['<{creativeelements}prestashop>_90c09393a4c0970bc9a6703ad527781c'] = 'Pointillés'; // Dotted +$_MODULE['<{creativeelements}prestashop>_d909d38d705ce75386dd86e611a82f5b'] = 'Double'; // Double +$_MODULE['<{creativeelements}prestashop>_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Solide'; // Solid +$_MODULE['<{creativeelements}prestashop>_6adf97f83acf6453d4a6a4b1070f3754'] = 'Aucun'; // None +$_MODULE['<{creativeelements}prestashop>border_control_f142def200da13d2a17cd85d74258d54'] = 'Type de bordure'; // Border Type +$_MODULE['<{creativeelements}prestashop>background_control_16619cb16904fc183583f843307c4645'] = 'Rappel d’arrière-plan'; // Background Fallback +$_MODULE['<{creativeelements}prestashop>background_control_69620f6919f430e72c0f67207535605b'] = 'Lien de la vidéo'; // Video Link +$_MODULE['<{creativeelements}prestashop>background_control_db3e3f51c9107e26c9bccf9a188ce2ed'] = 'Remplir'; // Fill +$_MODULE['<{creativeelements}prestashop>background_control_c795dfff10a7c952f4c5438951e9ece9'] = 'Couvrir'; // Cover +$_MODULE['<{creativeelements}prestashop>background_control_0e75eff17752bae4ab31af7ad9b45484'] = 'Contenir'; // Contain +$_MODULE['<{creativeelements}prestashop>background_control_06b9281e396db002010bde1de57262eb'] = 'Auto'; // Auto +$_MODULE['<{creativeelements}prestashop>background_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Taille'; // Size +$_MODULE['<{creativeelements}prestashop>background_control_cfb23be94c536c4a0bc7e9a1e9b902fb'] = 'Répéter verticalement'; // Repeat-y +$_MODULE['<{creativeelements}prestashop>background_control_f57da73b22e4c4b324499f5a19c8b782'] = 'Répéter horizontalement'; // Repeat-x +$_MODULE['<{creativeelements}prestashop>background_control_08b9e4f31c7aa3c1cfc97736ed8e6f81'] = 'Non-répété'; // No-repeat +$_MODULE['<{creativeelements}prestashop>background_control_7020426cfb0a204051be4b3053d2acc8'] = 'Répéter'; // Repeat +$_MODULE['<{creativeelements}prestashop>background_control_4457d440870ad6d42bab9082d9bf9b61'] = 'Fixe'; // Fixed +$_MODULE['<{creativeelements}prestashop>background_control_105078d294d30c978ca2badf7f376934'] = 'Défilement'; // Scroll +$_MODULE['<{creativeelements}prestashop>background_control_e9cb217697088a98b1937d111d936281'] = 'Fichier joint'; // Attachment +$_MODULE['<{creativeelements}prestashop>background_control_4d297f5df921dca388a17e3336cad50f'] = 'Inférieur droit'; // Bottom Right +$_MODULE['<{creativeelements}prestashop>background_control_a088c172f6a893ef408116488ef672cd'] = 'Inférieur centre'; // Bottom Center +$_MODULE['<{creativeelements}prestashop>background_control_7eb5542553fa5e5db4656e1c16f1316d'] = 'Inférieur gauche'; // Bottom Left +$_MODULE['<{creativeelements}prestashop>background_control_d7afdc5ae6dccbb16e24d9cac4067b41'] = 'Centre droit'; // Center Right +$_MODULE['<{creativeelements}prestashop>background_control_cac17249ab9a6f510f995b5005dc94a2'] = 'Centre centré'; // Center Center +$_MODULE['<{creativeelements}prestashop>background_control_617e1d17c0297a4b2c409f397618737e'] = 'Centre gauche'; // Center Left +$_MODULE['<{creativeelements}prestashop>background_control_5f9f678446e1abe7e062b056e755e059'] = 'Supérieur droit'; // Top Right +$_MODULE['<{creativeelements}prestashop>background_control_a20c9be95933e1fcf306b4b62d3792ea'] = 'Supérieur centré'; // Top Center +$_MODULE['<{creativeelements}prestashop>background_control_ac71274aea488e58bea2a8c716fc578f'] = 'Supérieur gauche'; // Top Left +$_MODULE['<{creativeelements}prestashop>background_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Position'; // Position +$_MODULE['<{creativeelements}prestashop>background_control_abd809c9e3c1c08e97740f86b8ceabfb'] = 'Image d’arrière-plan'; // Background Image +$_MODULE['<{creativeelements}prestashop>background_control_be53a0541a6d36f6ecb879fa2c584b08'] = 'Image'; // Image +$_MODULE['<{creativeelements}prestashop>background_control_75e7422f2fe253fc69d3f6c148d197ee'] = 'Couleur d’arrière-plan'; // Background Color +$_MODULE['<{creativeelements}prestashop>background_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Couleur'; // Color +$_MODULE['<{creativeelements}prestashop>background_control_8278a49e7da177e78b606cd1fae2f08f'] = 'Type d’arrière-plan'; // Background Type +$_MODULE['<{creativeelements}prestashop>background_control_32954654ac8fe66a1d09be19001de2d4'] = 'Largeur'; // Width +$_MODULE['<{creativeelements}prestashop>background_control_06504aee6c05f084754e10986c07d51e'] = 'Vidéo en arrière-plan'; // Background Video +$_MODULE['<{creativeelements}prestashop>background_control_d35b51b639528d580362ca7042de6a0e'] = 'Classique'; // Classic +$_MODULE['<{creativeelements}prestashop>_a45da96d0bf6575970f2d27af22be28a'] = 'Système'; // System +$_MODULE['<{creativeelements}prestashop>_97e7c9a7d06eac006a28bf05467fcc8b'] = 'Lien'; // Link +$_MODULE['<{creativeelements}prestashop>_945d5e233cf7d6240f6b783b36a374ff'] = 'Gauche'; // Left +$_MODULE['<{creativeelements}prestashop>_2ad9d63b69c4a10a5cc9cad923133bc4'] = 'Bas'; // Bottom +$_MODULE['<{creativeelements}prestashop>_92b09c7c48c520c3c55e497875da437c'] = 'Droite'; // Right +$_MODULE['<{creativeelements}prestashop>_a4ffdcf0dc1f31b9acaf295d75b51d00'] = 'Haut'; // Top +$_MODULE['<{creativeelements}prestashop>_7a1920d61156abc05a60135aefe8bc67'] = 'Par défaut'; // Default + +$_MODULE['<{creativeelements}prestashop>backoffice_header_36f76decda17622c3cca1592a5a5bbb5'] = 'Modifier avec Creative Elements'; // Edit with Creative Elements +$_MODULE['<{creativeelements}prestashop>backoffice_header_fbf27983c033a1a3a9567cb19b10df48'] = 'Revenir à l’éditeur PrestaShop'; // Back to PrestaShop Editor +$_MODULE['<{creativeelements}prestashop>creativeelements_1352b53a1f0602c4682ed452b411bac1'] = 'Veuillez enregistrer le formulaire avant de le modifier avec Creative Elements.'; // Please save the form before editing with Creative Elements +$_MODULE['<{creativeelements}prestashop>creativeelements_58e1cede60a89e8489918834221dfe2e'] = 'La boutique est en mode maintenance, veuillez ajouter votre IP à la liste blanche.'; // The shop is in maintenance mode, please whitelist your IP +$_MODULE['<{creativeelements}prestashop>creativeelements_5972f8e1a9936ed85e8ad83b600bcc35'] = 'Vous ne pouvez pas modifier les éléments qui ne sont pas affichés, car un fichier de remplacement est manquant. Veuillez nous contacter sur https://addons.prestashop.com'; // You can not edit items which are not displayed, because an override file is missing. Please contact us on https://addons.prestashop.com +$_MODULE['<{creativeelements}prestashop>_9988f25f46a8a5fbf780ea53f748841e'] = 'Position indéfinie!'; // Undefined Position! +$_MODULE['<{creativeelements}prestashop>_ad8e46819e3ac7ff26d3db6a887164e6'] = 'Placez le contenu n’importe où'; // Place Content Anywhere +$_MODULE['<{creativeelements}prestashop>_f7f19392da30e81c3abf433ce7b8ca38'] = 'Créé le'; // Created on +$_MODULE['<{creativeelements}prestashop>_155d14c40d6267b444be21ad136c5f60'] = 'Modifié le'; // Modified on +$_MODULE['<{creativeelements}prestashop>_49ed4f70af1d8e7ba23a097c3daa9b6b'] = 'Liste de modèles'; // Templates List +$_MODULE['<{creativeelements}prestashop>_5a6eb418df400f68052e7725cdc1170a'] = 'Ajouter un nouveau modèle'; // Add New Template +$_MODULE['<{creativeelements}prestashop>_e838b63505c498050eccbcd6090a8262'] = 'Modifier le modèle'; // Edit Template +$_MODULE['<{creativeelements}prestashop>_a14e0a7ee36fa87535472a963ba30bea'] = 'Fichier modèle'; // Template file +$_MODULE['<{creativeelements}prestashop>_bf50d5e661106d0abe925af3c2e6f7e7'] = 'En-tête'; // Header +$_MODULE['<{creativeelements}prestashop>_ded40f2a77c30efc6062db0cbd857746'] = 'Pied de page'; // Footer +$_MODULE['<{creativeelements}prestashop>_cfe6e34a4c7f24aad32aa4299562f5b1'] = 'Page d’accueil'; // Home Page +$_MODULE['<{creativeelements}prestashop>_b60d1950a4271a0e4dd4f647d479dfa4'] = 'Page de contact'; // Contact Page +$_MODULE['<{creativeelements}prestashop>_6a015ba06ba180aa8a893610dbf1061a'] = 'Page 404'; // 404 Page +$_MODULE['<{creativeelements}prestashop>_235e8d1a54ecddcf1d3ff533331ed416'] = 'Page du produit'; // Product Page +$_MODULE['<{creativeelements}prestashop>_70f23ff594252e51839210b6cc9641fc'] = 'Aperçu rapide'; // Quick View +$_MODULE['<{creativeelements}prestashop>_15cff73eea419d7365dc3b88e95e7367'] = 'Produit miniature'; // Product Miniature +$_MODULE['<{creativeelements}prestashop>_7bf70debc40b3303954a6c18ae1aea62'] = 'Miniature'; // Miniature +$_MODULE['<{creativeelements}prestashop>_88331ec25a3ecf67656071351edacce5'] = 'Réglages de la prévisualisation'; // Preview Settings +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Appliquer et prévisualiser'; // Apply & Preview +$_MODULE['<{creativeelements}prestashop>_20928185e5bc74a3b872efdb77a2d806'] = 'Ajuster au contenu'; // Fit To Content +$_MODULE['<{creativeelements}prestashop>_6b551379c3c0b59326abdaf3b4395bd3'] = 'Superposition'; // Overlay +$_MODULE['<{creativeelements}prestashop>_31e0a3a16f717e60e27cb65195dcb128'] = 'Bouton fermer'; // Close Button +$_MODULE['<{creativeelements}prestashop>_e873d89b2c012e5f3d22f8540180bd0e'] = 'Réglage des thèmes'; // Theme Settings +$_MODULE['<{creativeelements}prestashop>_c14300d0aebc9cf1a8da9f6bd83e700c'] = 'Liste des polices'; // Fonts List +$_MODULE['<{creativeelements}prestashop>_630bd947659ab07c114e5ccef701a7af'] = 'Ajouter une nouvelle police'; // Add New Font +$_MODULE['<{creativeelements}prestashop>_486841ebd4c0bc17e6fc279da5268645'] = 'Modifier la police'; // Edit Font +$_MODULE['<{creativeelements}prestashop>_8ab72d49e1108ccb328f74491ea49c03'] = 'Nom de la police'; // Font Name +$_MODULE['<{creativeelements}prestashop>_729d37b0c80d21143c60b3a877b88f43'] = 'Saisir une famille de police'; // Enter Font Family +$_MODULE['<{creativeelements}prestashop>_e52ada68529abb857b61e9f2cf3ea369'] = 'Fichiers de polices'; // Font Files +$_MODULE['<{creativeelements}prestashop>_2eb11617fc1cce6c73173d413f9c271c'] = 'Ajouter une variante de police'; // Add Font Variation +$_MODULE['<{creativeelements}prestashop>_729a51874fe901b092899e9e8b31c97a'] = 'Confirmez-vous ?'; // Are you sure? +$_MODULE['<{creativeelements}prestashop>_0d9c8dfe174c5be68d35a4055031de0d'] = '%s fichier'; // %s File +$_MODULE['<{creativeelements}prestashop>_d68a6107129a6d62c76f49d59ffe9800'] = 'Format de police Web Open, utilisé par les navigateurs modernes'; // The Web Open Font Format, Used by Modern Browsers +$_MODULE['<{creativeelements}prestashop>_73e633e5de0477512fcb1b06f8a6ab89'] = 'Format 2 de police Web Open, utilisé par les navigateurs très récents'; // The Web Open Font Format 2, Used by Super Modern Browsers +$_MODULE['<{creativeelements}prestashop>_fc4106231d0296304e3cafd5d7296d12'] = 'Police TrueType, utilisée pour une meilleure prise en charge de Safari, Android, iOS'; // TrueType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_d6abbfda58c20a18061c96fda4408779'] = 'Police OpenType, utilisée pour une meilleure prise en charge de Safari, Android, iOS'; // OpenType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_794df3791a8c800841516007427a2aa3'] = 'Licence'; // License +$_MODULE['<{creativeelements}prestashop>_c5985660600c4825c7a02653cdd26fe1'] = 'Activer la licence'; // Activate License +$_MODULE['<{creativeelements}prestashop>_684b15c2f38b9147cc86e0af9d62ed53'] = 'Veuillez activer votre licence pour obtenir un accès illimité à la bibliothèque de modèles.'; // Please activate your license to get unlimited access to the template library. +$_MODULE['<{creativeelements}prestashop>_4a4fdd49ee2bc115b68859296441fe43'] = 'État de la licence:'; // License Status: +$_MODULE['<{creativeelements}prestashop>_924272e395a0e2d3acf641224d5c67d8'] = 'Votre site Web est activé. Vous voulez activer ce site web avec une autre licence?'; // Your website is activated. Want to activate this website by a different license? +$_MODULE['<{creativeelements}prestashop>_63cfad19115e3d7777f7767827160582'] = 'Régénérer le CSS'; // Regenerate CSS +$_MODULE['<{creativeelements}prestashop>_be99e107a4ef9dfbfa2f80d5d1ea1ab7'] = 'Les styles actuels dans Creative Elements sont enregistrés dans les fichiers CSS. Recréez ces fichiers, en fonction des réglages les plus récents.'; // Styles set in Creative Elements are saved in CSS files. Recreate those files, according to the most recent settings. +$_MODULE['<{creativeelements}prestashop>_2846a86c26360bf5060ad147ae5e5757'] = 'Remplacer l’URL'; // Replace URL +$_MODULE['<{creativeelements}prestashop>_727ce4730bb0818c4b26f8fffc8f68d9'] = 'Mettre à jour l’adresse du site (URL)'; // Update Site Address (URL) +$_MODULE['<{creativeelements}prestashop>_15fa88522f8cb6d0c1fc3a9ac8010731'] = 'Il est fortement recommandé de sauvegarder votre base de données avant d’utiliser le remplacement d’URL.'; // It is strongly recommended that you backup your database before using Replace URL. +$_MODULE['<{creativeelements}prestashop>_fea9d3952e7afb5f07cee1d876907752'] = 'Saisissez les anciennes et nouvelles URLs de votre installation PrestaShop pour mettre à jour toutes les données Creative Elements (pertinent pour les transferts de domaine ou le passage au ’HTTPS’)'; // Enter your old and new URLs for your PrestaShop installation, to update all Creative Elements data (Relevant for domain transfers or move to 'HTTPS'). +$_MODULE['<{creativeelements}prestashop>_e60cf455794a35c95ea8d1fef0472731'] = 'Afficher l’icône d’édition sur le frontend'; // Show Edit Icon on Frontend +$_MODULE['<{creativeelements}prestashop>_604354d5a72ee39a59fea613aef87e41'] = 'Afficher l’icône d’édition sur le front-office pendant que l’employé a une session active. En cliquant sur cette icône, l’éditeur en direct s’ouvrira.'; // Displays an edit icon on frontend while employee has active session. By clicking on this icon the live editor will open. +$_MODULE['<{creativeelements}prestashop>_f02c1c38095f6c8954522d0ce7a22695'] = 'Limiter les révisions'; // Limit Revisions +$_MODULE['<{creativeelements}prestashop>_f1a68d0a9ec7321ff122615cda20e15c'] = 'Définit le nombre maximum de révisions par contenu.'; // Sets the maximum number of revisions per content. +$_MODULE['<{creativeelements}prestashop>_ee75e395394c62827452484b6762a3c3'] = 'Désactiver l’historique des révisions'; // Disable Revision History +$_MODULE['<{creativeelements}prestashop>_4606c5e64748843a35978c392679fded'] = 'Désactiver les couleurs par défaut'; // Disable Default Colors +$_MODULE['<{creativeelements}prestashop>_d43bf721ede9d072d2301ca64c8625d8'] = 'Si vous préférez hériter des couleurs de votre thème, vous pouvez désactiver cette fonctionnalité.'; // If you prefer to inherit the colors from your theme, you can disable this feature. +$_MODULE['<{creativeelements}prestashop>_e04e5c4768c5991e460a58f2cabdc6d3'] = 'Désactiver les polices par défaut'; // Disable Default Fonts +$_MODULE['<{creativeelements}prestashop>_c9915f4e48ec2247d30af2034ec81f24'] = 'Si vous préférez hériter des polices de votre thème, vous pouvez désactiver cette fonctionnalité ici.'; // If you prefer to inherit the fonts from your theme, you can disable this feature here. +$_MODULE['<{creativeelements}prestashop>_aace7931afa15411153641f4fb5dd0fa'] = 'Paramètres de style'; // Style Settings +$_MODULE['<{creativeelements}prestashop>_c6083c97affb33b00b4236fc08125b4e'] = 'Vous pouvez masquer le titre dans les paramètres du document. Cela fonctionne pour les thèmes qui ont un sélecteur « %s ». Si le sélecteur de votre thème est différent, saisissez-le ci-dessus.'; // You can hide the title at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_8a756d3484d64b800c304144d79ff78e'] = 'Sélecteur de wrapper de contenu'; // Content Wrapper Selector +$_MODULE['<{creativeelements}prestashop>_4550c700c57cabfc47b677f26d598c14'] = 'Vous pouvez supprimer la marge, le remplissage et la largeur maximale de l’enveloppe du contenu dans les paramètres du document. Cela fonctionne pour les thèmes qui ont un sélecteur « %s ». Si le sélecteur de votre thème est différent, saisissez-le ci-dessus.'; // You can clear margin, padding, max-width from content wrapper at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_4038e06d3f1c2ed9a8b8ba1418842203'] = 'Point de rupture tablette'; // Tablet Breakpoint +$_MODULE['<{creativeelements}prestashop>_df1a7f57a6d0fa52039a36b1ee55851c'] = 'Définit le point de rupture entre les écrans de bureau et de tablette. En dessous de ce point de rupture, la mise en page tablette apparaît (par défaut :%dpx).'; // Sets the breakpoint between desktop and tablet devices. Below this breakpoint tablet layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_5b23136cd3711bdae57560b72e66e923'] = 'Point de rupture mobile'; // Mobile Breakpoint +$_MODULE['<{creativeelements}prestashop>_4f663f113b83a55f1218b5403739d9e0'] = 'Définit le point de rupture entre les écrans de tablette et de mobile. En dessous de ce point de rupture, la mise en page mobile apparaît (par défaut : %dpx).'; // Sets the breakpoint between tablet and mobile devices. Below this breakpoint mobile layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_9ffc3ccc968a96d902af963c6d7b4e97'] = 'Réglages avancés'; // Advanced Settings +$_MODULE['<{creativeelements}prestashop>_d626d902c43ae80039304aaabb577ebe'] = 'Ne modifiez pas ces options sans expérience, des paramètres incorrects pourraient endommager votre site.'; // Do not change these options without experience, incorrect settings might break your site. +$_MODULE['<{creativeelements}prestashop>_8b682d779569cdb4f8eac8f8113882b6'] = 'Méthode d’impression CSS'; // CSS Print Method +$_MODULE['<{creativeelements}prestashop>_86921a38b6b13f5bac7815b64261bfc3'] = 'Utilisez des fichiers CSS externes pour toutes les feuilles de style générées. Choisissez ce réglage pour de meilleures performances (recommandé).'; // Use external CSS files for all generated stylesheets. Choose this setting for better performance (recommended). +$_MODULE['<{creativeelements}prestashop>_df46e4e4a37b992335889fe0bcc9fbc2'] = 'Fichier externe'; // External File +$_MODULE['<{creativeelements}prestashop>_8654f2b13455edc295f7ce17c14c9887'] = 'Intégration interne'; // Internal Embedding +$_MODULE['<{creativeelements}prestashop>_b49eb11b7c3a0762a6df47f7424c4d99'] = 'Poignées d’édition'; // Editing Handles +$_MODULE['<{creativeelements}prestashop>_8fabaa06bc2da9ec5a25a0b9ee554e99'] = 'Afficher les poignées d’édition lors du survol du bouton de modification des éléments.'; // Show editing handles when hovering over the element edit button +$_MODULE['<{creativeelements}prestashop>_7e6a43ce8ac6c832c95ecedb00a6064e'] = 'Exclure les catégories du widget Module'; // Exclude Categories from Module widget +$_MODULE['<{creativeelements}prestashop>_723d690837af8a91be989751fadab183'] = 'Charger la bibliothèque FontAwesome'; // Load FontAwesome Library +$_MODULE['<{creativeelements}prestashop>_c1a1c7d11028c7a1436198ca59331944'] = 'FontAwesome vous offre des icônes vectorielles évolutives qui peuvent être instantanément personnalisées - taille, couleur, ombre portée et tout ce qui peut être fait avec la puissance du CSS.'; // FontAwesome gives you scalable vector icons that can instantly be customized - size, color, drop shadow, and anything that can be done with the power of CSS. +$_MODULE['<{creativeelements}prestashop>_0016eea9e78adc9ba06072ac9b6a1b75'] = 'Charger la bibliothèque Waypoints'; // Load Waypoints Library +$_MODULE['<{creativeelements}prestashop>_498b278c8d4479bdedb1bb77be02b4f2'] = 'La bibliothèque de waypoints est le moyen le plus simple de déclencher une fonction lorsque vous faites défiler jusqu’à un élément.'; // Waypoints library is the easiest way to trigger a function when you scroll to an element. +$_MODULE['<{creativeelements}prestashop>_03ee559731e9434a9740773f516a38df'] = 'Charger la bibliothèque Slick'; // Load Slick Library +$_MODULE['<{creativeelements}prestashop>_050ddbb779fbf2dc5b64861639b5eb41'] = 'Slick est un plugin jQuery pour créer des carrousels / curseurs entièrement personnalisables, réactifs et compatibles avec les mobiles qui fonctionnent avec tous les éléments HTML.'; // Slick is a jQuery plugin for creating fully customizable, responsive and mobile friendly carousels/sliders that work with any html elements. +$_MODULE['<{creativeelements}prestashop>_4829262cecb9828817b33e0f9c907f91'] = 'Expériences'; // Experiments +$_MODULE['<{creativeelements}prestashop>_84f8df76775e37ae5a4a2b857220f90b'] = 'Accédez aux nouvelles fonctionnalités expérimentales de Creative Elements avant leur sortie officielle. Comme ces fonctionnalités sont encore en développement, elles sont susceptibles de changer, d’évoluer ou même d’être complètement supprimées.'; // Access new and experimental features from Creative Elements before they're officially released. As these features are still in development, they are likely to change, evolve or even be removed altogether. +$_MODULE['<{creativeelements}prestashop>_f1dbba0d570fb6cc1b5dcf7c2f7cb374'] = 'Supprimer les éléments cachés'; // Remove Hidden Elements +$_MODULE['<{creativeelements}prestashop>_cafe73a877fb194de8fe2fb509502f61'] = 'Lorsque vous masquez des éléments dans « Onglet Avancé / Section Responsive », leur code sera supprimé du DOM.'; // When you hide elements on "Advanced tab / Responsive section" their markup will be removed from DOM. +$_MODULE['<{creativeelements}prestashop>_0000495ba408d49c02c05686a067646c'] = 'Section Visibilité'; // Visibility Section +$_MODULE['<{creativeelements}prestashop>_d2d862f4b4341afe63f8164ca80f0373'] = 'Si vous souhaitez programmer des éléments ou les filtrer par groupes de clients sélectionnés, cette fonctionnalité vous sera utile. Il apparaîtra sous l’onglet Avancé.'; // If you would like to schedule elements or filter them by selected customer groups, then this feature will be handy. It will appear under Advanced tab. +$_MODULE['<{creativeelements}prestashop>_1729a56cfc89021478498fe0c89a843a'] = 'Visibilité'; // Visibility +$_MODULE['<{creativeelements}prestashop>_25f7347236b51a5eae4ba01a7862cb55'] = 'Programmer'; // Schedule +$_MODULE['<{creativeelements}prestashop>_08b02383dce834815c99539f02f0fd89'] = 'Groupe de clients'; // Customer Group +$_MODULE['<{creativeelements}prestashop>_1c0d77992f834a9640d9e094e7a73fb9'] = 'Affichage pour'; // Show for +$_MODULE['<{creativeelements}prestashop>_449ca279e02730b90da2695e4261c154'] = 'Cacher pour'; // Hide for +$_MODULE['<{creativeelements}prestashop>_777475dcd2749b94375fe07762d9d76f'] = 'Sélectionner...'; // Select... +$_MODULE['<{creativeelements}prestashop>_e18056ef5b17ae8dda5f90f67c9e8533'] = '%s an'; // %s year +$_MODULE['<{creativeelements}prestashop>_2fa7fca44cb89fd199a257dc02b3b1e5'] = '%s ans'; // %s years +$_MODULE['<{creativeelements}prestashop>_f44e927446959585ff1c59871ec2d5a3'] = '%s mois'; // %s month +$_MODULE['<{creativeelements}prestashop>_7a9362f7b668d13007042dfeb04377f0'] = '%s mois'; // %s months +$_MODULE['<{creativeelements}prestashop>_059fb9aa56ea0f60a309243c0f1b7584'] = '%s semaine'; // %s week +$_MODULE['<{creativeelements}prestashop>_a6a22726bcd37b84a44dcb29adcd9028'] = '%s semaines'; // %s weeks +$_MODULE['<{creativeelements}prestashop>_cc0c6aa19f38a763c6138695ea957edc'] = '%s jour'; // %s day +$_MODULE['<{creativeelements}prestashop>_b95227314c538383cf221dae2172b047'] = '%s jours'; // %s days +$_MODULE['<{creativeelements}prestashop>_0aaff30699e63ba9bf8133d98b1d6832'] = '%s heure'; // %s hour +$_MODULE['<{creativeelements}prestashop>_99e8d9aecac65d9833e10a2d3bbee4f7'] = '%s heures'; // %s hours +$_MODULE['<{creativeelements}prestashop>_b3f066d7b12126d9a43fc20a691994bb'] = '%s min'; // %s min +$_MODULE['<{creativeelements}prestashop>_9bd57b1597a0cd2a2d7e9a10ea01b41d'] = '%s mins'; // %s mins +$_MODULE['<{creativeelements}prestashop>_6c5505b168fe8a3f3acc9ab255fc8f29'] = '%s sec'; // %s sec +$_MODULE['<{creativeelements}prestashop>_0174b36c22db64939888c723079becd9'] = '%s secs'; // %s secs +$_MODULE['<{creativeelements}prestashop>_88183b946cc5f0e8c96b2e66e1c74a7e'] = 'Inconnue'; // Unknown +$_MODULE['<{creativeelements}prestashop>_89ee97029bec768357951c7583ff541e'] = 'Ne fonctionne pas? Vous pouvez définir un sélecteur différent pour le wrapper de contenu dans les Réglages de la page.'; // Not working? You can set a different selector for the content wrapper in the Settings page. +$_MODULE['<{creativeelements}prestashop>_00d23a76e43b46dae9ec7aa9dcbebb32'] = 'Activé'; // Enabled +$_MODULE['<{creativeelements}prestashop>_b9f5c797ebbf55adccdd8539a65a0241'] = 'Désactivé'; // Disabled +$_MODULE['<{creativeelements}prestashop>_303efff2ee73c68202a22c21e900df83'] = 'http://docs.webshopworks.com/creative-elements?gt=fr'; +$_MODULE['<{creativeelements}prestashop>_4994a8ffeba4ac3140beb89e8d41f174'] = 'Langue'; // Language +$_MODULE['<{creativeelements}prestashop>_c10ffb2e13c40ebe8294e296b7d499b2'] = 'Effets de défilement'; // Scrolling Effects +$_MODULE['<{creativeelements}prestashop>_1e7581a778b92c0a0090b551a1a8d068'] = 'Défilement vertical'; // Vertical Scroll +$_MODULE['<{creativeelements}prestashop>_4467c46a4d7150d5fb2079bd0fde510c'] = 'Défilement horizontal'; // Horizontal Scroll +$_MODULE['<{creativeelements}prestashop>_6f7956741d5d673ff0c8eacc8d8c961c'] = 'Transparence'; // Transparency +$_MODULE['<{creativeelements}prestashop>_85a7cd587d6142dbfc1a4de05af7b75d'] = 'Échelle'; // Scale +$_MODULE['<{creativeelements}prestashop>_a0db49ba470c1c9ae2128c3470339153'] = 'Niveau'; // Level +$_MODULE['<{creativeelements}prestashop>_f3b666f2a16c1deb05bd6aa7eacfeb92'] = 'Point d’ancrage X'; // X Anchor Point +$_MODULE['<{creativeelements}prestashop>_b41864fcc199583ca5c19b10e0afc25a'] = 'Point d’ancrage Y'; // Y Anchor Point +$_MODULE['<{creativeelements}prestashop>_85cfe2037fb50aaf0632e12e655ce3db'] = 'Appliquer les effets sur'; // Apply Effects On +$_MODULE['<{creativeelements}prestashop>_31978abc991a7e1367f73b112e817c7d'] = 'Effets relatifs à'; // Effects Relative To +$_MODULE['<{creativeelements}prestashop>_8d6f3510a5cca2c1281c9c6afe7e0da2'] = 'Viewport'; // Viewport +$_MODULE['<{creativeelements}prestashop>_b670b69ddb8e225df6bb7ad005d3c33e'] = 'Page entière'; // Entire Page +$_MODULE['<{creativeelements}prestashop>_c26f05fe62ad1f8fc2a83eddd105285b'] = 'Effets au passage de la souris'; // Mouse Effects +$_MODULE['<{creativeelements}prestashop>_96c30ab1599bf72dca1549df71fe32af'] = 'Mouvement de la souris'; // Mouse Track +$_MODULE['<{creativeelements}prestashop>_8ac8e312b9397d6c7a2c5b1b63967803'] = 'Inclinaison 3D'; // 3D Tilt +$_MODULE['<{creativeelements}prestashop>_fd1dd0c603be8170f9eae0be9f2f6afb'] = 'Direct'; // Direct +$_MODULE['<{creativeelements}prestashop>_d8d76e03141ed1cf0d5704df71efbfef'] = 'Opposé'; // Opposite +$_MODULE['<{creativeelements}prestashop>_d8f6d391ba573fe747a3360afb99904d'] = 'Épinglé'; // Sticky +$_MODULE['<{creativeelements}prestashop>_79441290f51f6ddfd0bd605d31b5d913'] = 'Épinglage actif'; // Sticky On +$_MODULE['<{creativeelements}prestashop>_6db6ce4ce0746f333c58972e1e3682bf'] = 'Décalage des effets'; // Effects Offset +$_MODULE['<{creativeelements}prestashop>_9218088d5225c7174f7299cb339ebce9'] = 'Rester en colonne'; // Stay In Column +$_MODULE['<{creativeelements}prestashop>_f2f52cbf3a183f750f261f615e25d622'] = 'Masquer sur le défilement'; // Hide on Scroll +$_MODULE['<{creativeelements}prestashop>_c1171931c7b83ccac8c962e368963010'] = 'Sticked'; // Sticked +$_MODULE['<{creativeelements}prestashop>_2ff4148554480a37f85efd299df04850'] = 'Transformer'; // Transform +$_MODULE['<{creativeelements}prestashop>_33a9fad969f69834a37b94c729d98b2a'] = 'Rotation 3D'; // 3D Rotate +$_MODULE['<{creativeelements}prestashop>_b78a58fa389c15e3e9676406754bb1df'] = 'Rotation en X'; // Rotate X +$_MODULE['<{creativeelements}prestashop>_0d10ed97cb17c5220132a845f6a78d0a'] = 'Rotation en Y'; // Rotate Y +$_MODULE['<{creativeelements}prestashop>_a80420eef88d11f77532f1b9cb467fa3'] = 'Perspective'; // Perspective +$_MODULE['<{creativeelements}prestashop>_85702e5968e1616bd5c577cf306b9806'] = 'Décalage X'; // Offset X +$_MODULE['<{creativeelements}prestashop>_73411f5996beaef37222d8cac0b89b71'] = 'Décalage Y'; // Offset Y +$_MODULE['<{creativeelements}prestashop>_2d69a9a5782855ac84602cc45863f342'] = 'Conserver les proportions'; // Keep Proportions +$_MODULE['<{creativeelements}prestashop>_df1195616b85f74c8828e20c5781cdd7'] = 'Décalage X'; // Scale X +$_MODULE['<{creativeelements}prestashop>_979de706f6ea1f9eb5fba71c83a56c99'] = 'Décalage Y'; // Scale Y +$_MODULE['<{creativeelements}prestashop>_2f2227d480b0c69364d7fddfecb82bd0'] = 'Distorsion'; // Skew +$_MODULE['<{creativeelements}prestashop>_8bf35b556bf5a142730e8a8ed3d8137a'] = 'Distorsion X'; // Skew X +$_MODULE['<{creativeelements}prestashop>_15c7890285219037e6f29c0814063128'] = 'Inclinaison Y'; // Skew Y +$_MODULE['<{creativeelements}prestashop>_fb7d5e3a3f491ac9d3b6711daa32cd00'] = 'Retournement horizontal'; // Flip Horizontal +$_MODULE['<{creativeelements}prestashop>_5b83f92ddc4d4ff9e3a211c23268665d'] = 'Retourner verticalement'; // Flip Vertical +$_MODULE['<{creativeelements}prestashop>_29d94dad2c561873cffebf8d5ee4ba0c'] = 'Déclenchement par'; // Trigger By +$_MODULE['<{creativeelements}prestashop>_690c6e22d9a3b56d19e83710af87da0a'] = 'Ajoutez votre propre CSS personnalisé ici'; // Add your own custom CSS here +$_MODULE['<{creativeelements}prestashop>_c5c6bcf867da29493e4bb1bd4b6b0a78'] = 'Utilisez «selector» pour cibler l’élément wrapper. Exemples:'; // Use "selector" to target wrapper element. Examples: +$_MODULE['<{creativeelements}prestashop>_756bcf5c0d47a6c968964d25f0eeaf57'] = "/* Pour élément principal */\nselector { color: red; }\n/* Pour élément enfant */\nselector .child-element { margin: 10px; }\n/* Ou utiliser un sélecteur personnalisé */\n.my-class { text-align: center; }"; +$_MODULE['<{creativeelements}prestashop>_80460385b65514494dcbb9fe041905d1'] = 'Cliquez sur le bouton modifier pour changer ce texte. Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; +$_MODULE['<{creativeelements}prestashop>_756b97abbc9f4c13c541b1adf847eaf0'] = 'Page Facebook'; // Facebook Page +$_MODULE['<{creativeelements}prestashop>_d8a2783eec9416dc80f620f6dfba578c'] = 'Bouton Facebook'; // Facebook Button +$_MODULE['<{creativeelements}prestashop>_c859113fb39b64631ca542ac10b0a7d5'] = 'Boite dynamique'; // Flip Box +$_MODULE['<{creativeelements}prestashop>_a601e28fb6c693bef281e5e63179674d'] = 'Appel à l’action'; // Call to Action +$_MODULE['<{creativeelements}prestashop>_e64465da4a42d65847b321045b155602'] = 'Compte à rebours'; // Countdown +$_MODULE['<{creativeelements}prestashop>_c4d22d7c40de128eb983fcf5f2ae2674'] = 'Carrousel de témoignages'; // Testimonial Carousel +$_MODULE['<{creativeelements}prestashop>_dbade2f6a2f7257aa7377edb1c2f1c4a'] = 'Hotspot d’image'; // Image Hotspot +$_MODULE['<{creativeelements}prestashop>_0016012d63bde0bbb9a8c4e7e5ba113f'] = 'Recherche AJAX'; // AJAX Search +$_MODULE['<{creativeelements}prestashop>_b0c309bbd6756d4e0d4dbb491dee248a'] = 'Avis sur TrustedShops'; // TrustedShops Reviews +$_MODULE['<{creativeelements}prestashop>_5d2d75cb0a2913351601b255eaa17bb6'] = 'Grille produit'; // Product Grid +$_MODULE['<{creativeelements}prestashop>_aeb0c8a362126a14711eb2441769f851'] = 'Produit carrousel'; // Product Carousel +$_MODULE['<{creativeelements}prestashop>_2e9436e79e59f39483f89ddeb4c9fac6'] = 'Boîte de produit'; // Product Box +$_MODULE['<{creativeelements}prestashop>_396cfc95445a375fa678d71c6657fd21'] = 'Curseur d’image'; // Image Slider +$_MODULE['<{creativeelements}prestashop>_1e56256dd5d600c0f0bf54ca1259139d'] = 'Inscription à newsletter'; // Email Subscription +$_MODULE['<{creativeelements}prestashop>_2750dfebe7e01be17a0aaadf6b5effcc'] = 'Liens des catégories'; // Category Tree +$_MODULE['<{creativeelements}prestashop>_e55f75a29310d7b60f7ac1d390c8ae42'] = 'Module'; // Module +$_MODULE['<{creativeelements}prestashop>_a7c83a652241f74e9e8c13d4a8e77327'] = 'Logo du boutique'; // Shop Logo +$_MODULE['<{creativeelements}prestashop>_c62ada394e70783b9d5c00bc249af5a6'] = 'Titre du boutique'; // Shop Title +$_MODULE['<{creativeelements}prestashop>_b75443a19207ed3a3552edda86536857'] = 'Panier'; // Shopping Cart +$_MODULE['<{creativeelements}prestashop>_ca9085e1c300127e6d45bb7cc9a00a1c'] = 'Menu de navigation'; // Nav Menu +$_MODULE['<{creativeelements}prestashop>_6e9accb242f0c478ccd34428e96c782b'] = 'Sélecteur de langue'; // Language Selector +$_MODULE['<{creativeelements}prestashop>_162a8c580f44c2fe1357f6aab84ef88a'] = 'Sélecteur de devises'; // Currency Selector +$_MODULE['<{creativeelements}prestashop>_b9aefa40a54680bb258f9f9569290fae'] = 'Nom produit'; // Product Name +$_MODULE['<{creativeelements}prestashop>_646911b123e94f0fb11d711926dd2c4b'] = 'Badges produit'; // Product Badges +$_MODULE['<{creativeelements}prestashop>_76dd13f20840d624f3da3784f9d72c92'] = 'Images produit'; // Product Images +$_MODULE['<{creativeelements}prestashop>_3c38027cd61ce6345509574bc269f54c'] = 'Image produit'; // Product Image +$_MODULE['<{creativeelements}prestashop>_e4cc585947db6303293acd6e50e23abd'] = 'Prix produit'; // Product Price +$_MODULE['<{creativeelements}prestashop>_a3598f51ebb4d31d7e7811fc0fbd358f'] = 'Évaluation produit'; // Product Rating +$_MODULE['<{creativeelements}prestashop>_4cc55681d14e73c3febdf5dd0566315c'] = 'Compte à rebours reduction'; // Sale Countdown +$_MODULE['<{creativeelements}prestashop>_2eb2d7fb081e1ae3127a46c53f10119e'] = 'Image marque'; // Brand Image +$_MODULE['<{creativeelements}prestashop>_d20724dd5e4e41245018a3626478e81e'] = 'Métas produit'; // Product Meta +$_MODULE['<{creativeelements}prestashop>_36e3402e4ddef43e92b99aef016c057e'] = 'Description courte'; // Short Description +$_MODULE['<{creativeelements}prestashop>_c12b4ee170ad3dbeda03b91102c76da2'] = 'Variantes produit'; // Product Variations +$_MODULE['<{creativeelements}prestashop>_d0629ccdf9ac5d63566c3f46f375b4a8'] = 'Stock produit'; // Product Stock +$_MODULE['<{creativeelements}prestashop>_608315af4932b03356df72ac18092446'] = 'Quantité produit'; // Product Quantity +$_MODULE['<{creativeelements}prestashop>_638f592f71fc3fac3351534e69f9d29f'] = 'Ajouter au panier'; // Add to Cart +$_MODULE['<{creativeelements}prestashop>_87f3cd376f8aa27326148860be759c19'] = 'Caractéristiques produit'; // Product Features +$_MODULE['<{creativeelements}prestashop>_6a5373df703ab2827a4ba7facdfcf779'] = 'Ajouter à la liste d’envies'; // Add to Wishlist +$_MODULE['<{creativeelements}prestashop>_854ee576475a63775d79cbfd6e4b13b6'] = 'Description produit'; // Product Description +$_MODULE['<{creativeelements}prestashop>_a1e3a46a20f81b1e21b30156a2370812'] = 'Documents joints'; // Product Attachments +$_MODULE['<{creativeelements}prestashop>_167881850315c4df68e31d56fd9dd5d9'] = 'Partage produit'; // Product Share +$_MODULE['<{creativeelements}prestashop>_1d845dde77864747f09c10275b281f1a'] = 'Bloc produit'; // Product Block +$_MODULE['<{creativeelements}prestashop>_01f00f96696da28ccd6583f819385e71'] = 'Chemin du texte'; // Text Path +$_MODULE['<{creativeelements}prestashop>_03ac26b00f3492797a3c8d54f0337c9b'] = 'Ajouter votre texte courbé ici'; // Add Your Curvy Text Here +$_MODULE['<{creativeelements}prestashop>_233017ea023bfe5ee5cebc8a7970f06c'] = 'Type de chemin'; // Path Type +$_MODULE['<{creativeelements}prestashop>_d911b34823c7674c292556dc56148c27'] = 'Vague'; // Wave +$_MODULE['<{creativeelements}prestashop>_2b73f91683611c489560a1d163e37902'] = 'Arc'; // Arc +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Cercle'; // Circle +$_MODULE['<{creativeelements}prestashop>_4803e6b9e63dabf04de980788d6a13c4'] = 'Ligne'; // Line +$_MODULE['<{creativeelements}prestashop>_01733ae48f19ae284165e55dd2934b61'] = 'Ovale'; // Oval +$_MODULE['<{creativeelements}prestashop>_c978545ade9f5ce21bfa0353c04feda9'] = 'Spirale'; // Spiral +$_MODULE['<{creativeelements}prestashop>_22c6682f4ddd4efe02aafd67ba1896e6'] = 'Vous souhaitez créer des chemins de texte personnalisés ?'; // Want to create custom text paths? +$_MODULE['<{creativeelements}prestashop>_e96dee4d699a25d7033bbd706a416ee9'] = 'Direction du texte'; // Text Direction +$_MODULE['<{creativeelements}prestashop>_ae2023195822977b20f4557cb2c231e5'] = 'Afficher le chemin'; // Show Path +$_MODULE['<{creativeelements}prestashop>_a11b6ae4ff43bc27097fa1899010cd4a'] = 'Espacement des mots'; // Word Spacing +$_MODULE['<{creativeelements}prestashop>_c9fc5918d5031ae2a84dc85c1392d236'] = 'Point de départ'; // Starting Point +$_MODULE['<{creativeelements}prestashop>_ac70412e939d72a9234cdebb1af5867b'] = 'Chemin'; // Path +$_MODULE['<{creativeelements}prestashop>_8e763d9065582268c9ffa345a3f81f5f'] = 'Contour'; // Stroke +$_MODULE['<{creativeelements}prestashop>_e72cd05de3b0f5e87e01f1043d250226'] = 'Contour de texte'; // Text Stroke +$_MODULE['<{creativeelements}prestashop>_fb4e932947262c76d46e7671a667eb03'] = 'Couleur de contour'; // Stroke Color +$_MODULE['<{creativeelements}prestashop>_1ec22a9ec8fc7840e53abdf9f2761db4'] = 'Coller le lien de la page Facebook.'; // Paste the URL of the Facebook page. +$_MODULE['<{creativeelements}prestashop>_3d1f92a565d3b1a61880236e33c49bf3'] = 'Ligne chronologique'; // Timeline +$_MODULE['<{creativeelements}prestashop>_87f9f735a1d36793ceaecd4e47124b63'] = 'Événements'; // Events +$_MODULE['<{creativeelements}prestashop>_41de6d6cfb8953c021bbe4ba0701c8a1'] = 'Messages'; // Messages +$_MODULE['<{creativeelements}prestashop>_f4629a6a3f69f39737e590fe9072a20f'] = 'Petit Header'; // Small Header +$_MODULE['<{creativeelements}prestashop>_7e109af3848e4849f6230a1a04d45859'] = 'Photos de profil'; // Profile Photos +$_MODULE['<{creativeelements}prestashop>_cd7c1196d2d970d5cfb3f84af649a5ee'] = 'Bouton CTA personnalisé'; // Custom CTA Button +$_MODULE['<{creativeelements}prestashop>_98b82c200a2e309b24cb481970f3fcc4'] = 'J’aime'; // Like +$_MODULE['<{creativeelements}prestashop>_cab1fe09bb50a19ae3975657afeec8f4'] = 'Recommander'; // Recommend +$_MODULE['<{creativeelements}prestashop>_eb6d8ae6f20283755b339c0dc273988b'] = 'Standard'; // Standard +$_MODULE['<{creativeelements}prestashop>_85967e33b3ebf9c859f2b50ef9bf151d'] = 'Nombre de boutons'; // Button Count +$_MODULE['<{creativeelements}prestashop>_f2f81540eb0898cdbbbbeae97e17c3e0'] = 'Nombre de boîtes'; // Box Count +$_MODULE['<{creativeelements}prestashop>_f4a216cd03ef98f742fa9dffedc6f1f9'] = 'Bouton de partage'; // Share Button +$_MODULE['<{creativeelements}prestashop>_e64df1d7c22b9638f084ce8a4aff3ff3'] = 'URL Cible'; // Target URL +$_MODULE['<{creativeelements}prestashop>_f88589c3e803217e3f6fe9d8e740e6e8'] = 'Page actuelle'; // Current Page +$_MODULE['<{creativeelements}prestashop>_5835bab1ade0060909e31a06af2e2cde'] = 'Devant'; // Front +$_MODULE['<{creativeelements}prestashop>_0557fa923dcee4d0f86b1409f5c2167f'] = 'Derrière'; // Back +$_MODULE['<{creativeelements}prestashop>_2a458f5ab135bec8376047e4fd5bec7b'] = 'Élément graphique'; // Graphic Element +$_MODULE['<{creativeelements}prestashop>_63295c99f929bee9eed51f39328abd5e'] = 'Appliquer le lien sur'; // Apply Link on +$_MODULE['<{creativeelements}prestashop>_eceba382c8d2965c9969f3c50e38fd1d'] = 'Bouton uniquement'; // Button Only +$_MODULE['<{creativeelements}prestashop>_3974ce153db569952e044cdfdfbc83cd'] = 'Toute la boîte'; // Whole Box +$_MODULE['<{creativeelements}prestashop>_0f714135a0bce5c010291b55524b0f2e'] = 'Effet de retournement'; // Flip Effect +$_MODULE['<{creativeelements}prestashop>_67727c06d3264f409d0e11009b322911'] = 'Sens du retournement'; // Flip Direction +$_MODULE['<{creativeelements}prestashop>_258f49887ef8d14ac268c92b02503aaa'] = 'En haut'; // Up +$_MODULE['<{creativeelements}prestashop>_08a38277b0309070706f6652eeae9a53'] = 'En bas'; // Down +$_MODULE['<{creativeelements}prestashop>_a0157ad2638ad23725b7ab940ea92500'] = 'Profondeur 3D'; // 3D Depth +$_MODULE['<{creativeelements}prestashop>_3cfce651e667ab85486dd42a8185f98a'] = 'Boîte'; // Box +$_MODULE['<{creativeelements}prestashop>_f309bf4bccf801eb2fe4541107671578'] = 'Ruban'; // Ribbon +$_MODULE['<{creativeelements}prestashop>_5b469fd01889ec12f1e84c6e66829fc1'] = 'Au-dessus'; // Above +$_MODULE['<{creativeelements}prestashop>_45b5de8fb2930cf2cc1dc2c6d20bd72a'] = 'Texte du bouton'; // Button Text +$_MODULE['<{creativeelements}prestashop>_de6e9435dd82a9bf0416380e2b093166'] = 'Icône de bouton'; // Button Icon +$_MODULE['<{creativeelements}prestashop>_d35b51b639528d580362ca7042de6a0e'] = 'Classique'; // Classic +$_MODULE['<{creativeelements}prestashop>_c795dfff10a7c952f4c5438951e9ece9'] = 'Couvrir'; // Cover +$_MODULE['<{creativeelements}prestashop>_021cee4b91f9ef9dccdbc396c88fbc96'] = 'Position verticale'; // Vertical Position +$_MODULE['<{creativeelements}prestashop>_3338cc479e22ce066463f8a571039a1b'] = 'Effets au survol'; // Hover Effects +$_MODULE['<{creativeelements}prestashop>_d7f3c1bb6150f237c08a4ab1e69c5ba9'] = 'Animation séquencée'; // Sequenced Animation +$_MODULE['<{creativeelements}prestashop>_3711e805016ec3364cac6040610418ae'] = 'Couleur de superposition'; // Overlay Color +$_MODULE['<{creativeelements}prestashop>_14c841eea7774b78caf79c58989f9625'] = 'Date d’échéance'; // Due Date +$_MODULE['<{creativeelements}prestashop>_5e27ff9d1365046388c9422316d0aecb'] = 'Date définie en fonction de votre fuseau horaire: %s.'; // Date set according to your timezone: %s. +$_MODULE['<{creativeelements}prestashop>_e807d3ccf8d24c8c1a3d86db5da78da8'] = 'Jours'; // Days +$_MODULE['<{creativeelements}prestashop>_6a7e73161603d87b26a8eac49dab0a9c'] = 'Heures'; // Hours +$_MODULE['<{creativeelements}prestashop>_f670ea66cfb0e90bd6090472ad692694'] = 'Minutes'; // Minutes +$_MODULE['<{creativeelements}prestashop>_8f19a8c7566af54ea8981029730e5465'] = 'Seconds'; // Seconds +$_MODULE['<{creativeelements}prestashop>_91e23f92acf00ad0c0a49d05a0412473'] = 'Étiquette personnalisée'; // Custom Label +$_MODULE['<{creativeelements}prestashop>_3c1bb91f28c38aed22a0b45bc185efda'] = 'Actions après expiration'; // Actions After Expire +$_MODULE['<{creativeelements}prestashop>_4202ef115ebede37eb22297113f5fb32'] = 'Réorienter'; // Redirect +$_MODULE['<{creativeelements}prestashop>_dea4346d3e834aa308004b9d9a3bddd0'] = 'Voir le message'; // Show Message +$_MODULE['<{creativeelements}prestashop>_13ea583f6474cdce6c0c9b289b652ffe'] = 'Referenzen'; // Testimonials +$_MODULE['<{creativeelements}prestashop>_9a56fece0f74241ee0ad926dae7142af'] = 'Image en ligne'; // Image Inline +$_MODULE['<{creativeelements}prestashop>_6d8a959b6100d1127c23225c11fa883b'] = 'Image empilée'; // Image Stacked +$_MODULE['<{creativeelements}prestashop>_0feb1fedcd7c19a716f395aaaee18724'] = 'Image au-dessus'; // Image Above +$_MODULE['<{creativeelements}prestashop>_225bf3d9290b5f536b2e442259e78652'] = 'Carousel'; // Carousel +$_MODULE['<{creativeelements}prestashop>_11b2f0f6f0bc356b0016cef1f65d43f7'] = 'Éléments de hotspot'; // Hotspots +$_MODULE['<{creativeelements}prestashop>_1ba9660cdf805a4d401168d890e267f0'] = 'Identifiant TrustedShops'; // TrustedShops Id +$_MODULE['<{creativeelements}prestashop>_96a3a918504b7fc5557a988a909b8731'] = 'Vous avez reçu votre identifiant TS personnel lors de votre inscription auprès de Trusted Shops.'; // You received your personal TS ID when you registered with Trusted Shops. +$_MODULE['<{creativeelements}prestashop>_19c1a6a025c55f0f62ace3d44736df57'] = 'Filtrer les avis'; // Filter Reviews +$_MODULE['<{creativeelements}prestashop>_eb92025cb8c66f1850c13a9b602a1856'] = 'Montre tout'; // Show all +$_MODULE['<{creativeelements}prestashop>_7ed67a77aee0decb9cad36d739c734ad'] = 'Montrer de %d étoiles'; // Show from %d Stars +$_MODULE['<{creativeelements}prestashop>_34e80a799d144cfe4af46815e103f017'] = 'Évaluations'; // Reviews +$_MODULE['<{creativeelements}prestashop>_44749712dbec183e983dcd78a7736c41'] = 'Date'; // Date +$_MODULE['<{creativeelements}prestashop>_0be8406951cdfda82f00f79328cf4efc'] = 'Commentaire'; // Comment +$_MODULE['<{creativeelements}prestashop>_56ee3495a32081ccb6d2376eab391bfa'] = 'Référencement'; // Listing +$_MODULE['<{creativeelements}prestashop>_cf8156f1f57a8603cd6b3a28c9c2c61b'] = 'Produits populaires'; // Featured Products +$_MODULE['<{creativeelements}prestashop>_7f82cf6868d89ca72d670092caedfb86'] = 'Promotions'; // Prices Drop +$_MODULE['<{creativeelements}prestashop>_1529636c2dd134b028a08f7b131115b5'] = 'Nouveaux produits'; // New Products +$_MODULE['<{creativeelements}prestashop>_e4e3e01496bc4f69bb08fc7da19f6d45'] = 'Meilleures ventes'; // Best Sales +$_MODULE['<{creativeelements}prestashop>_534ed3f39af7a636f6cf7a59f74fe824'] = 'Vu récemment'; // Recently Viewed +$_MODULE['<{creativeelements}prestashop>_347da0da598694c57fff1cbaa197d615'] = 'Produits associés'; // Related Products +$_MODULE['<{creativeelements}prestashop>_640925b217801653719fa252c768f21e'] = 'Produits par marque'; // Products by Brand +$_MODULE['<{creativeelements}prestashop>_a086d764f6d125919a1f1ae36610be98'] = 'Produits par fournisseur'; // Products by Supplier +$_MODULE['<{creativeelements}prestashop>_3543501e965f5cae13f8257f51c96bf7'] = 'Produits sur mesure'; // Custom Products +$_MODULE['<{creativeelements}prestashop>_8a4f5a66d0fcc9d13614516db6e3d47a'] = 'Produits de la même catégorie'; // Products in the same category +$_MODULE['<{creativeelements}prestashop>_704d59dbf9c0f798de6d48d9514f8c93'] = 'Produits de la même marque'; // Products with the same brand +$_MODULE['<{creativeelements}prestashop>_39a3224a7760b9e3963f1d91b2a1679c'] = 'Produits du même fournisseur'; // Products with the same supplier +$_MODULE['<{creativeelements}prestashop>_64b7a126e62d47bb341dff4b51ef8ee4'] = 'Produit actuel'; // Current Product +$_MODULE['<{creativeelements}prestashop>_068f80c7519d0528fb08e82137a72131'] = 'Produits'; // Products +$_MODULE['<{creativeelements}prestashop>_deb10517653c255364175796ace3553f'] = 'Produit'; // Product +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Catégorie'; // Category +$_MODULE['<{creativeelements}prestashop>_e22269bb51f9f2394e148716babbafbb'] = 'Popularité'; // Popularity +$_MODULE['<{creativeelements}prestashop>_f8a385c7fdc1e711a02ad3054f7d6107'] = 'Volume des ventes'; // Sales Volume +$_MODULE['<{creativeelements}prestashop>_885b3c534ec909cf87987897bfba2235'] = 'Arrivée'; // Arrival +$_MODULE['<{creativeelements}prestashop>_78d3b698da1e3dead203cce8f05e98d9'] = 'Direction de commande'; // Order Direction +$_MODULE['<{creativeelements}prestashop>_cf3fb1ff52ea1eed3347ac5401ee7f0c'] = 'Ascendant'; // Ascending +$_MODULE['<{creativeelements}prestashop>_e3cf5ac19407b1a62c6fccaff675a53b'] = 'Descendant'; // Descending +$_MODULE['<{creativeelements}prestashop>_bac39878c1766a7a8552263903b9eeb9'] = 'Randomiser'; // Randomize +$_MODULE['<{creativeelements}prestashop>_5d1dba09dcca2334ab1c3345824e2141'] = 'Limite de produit'; // Product Limit +$_MODULE['<{creativeelements}prestashop>_9e9116fc9c6c97bf62e851175f2be9a1'] = 'Deuxième image'; // Second Image +$_MODULE['<{creativeelements}prestashop>_21c9820a0ca58c27fc6c2da73e1a2641'] = 'Afficher seconde image sur vol stationnaire si elle existe'; // Show second image on hover if exists +$_MODULE['<{creativeelements}prestashop>_8df278efb191bfec176ff8dd42668fa9'] = 'Max. Longueur'; // Max. Length +$_MODULE['<{creativeelements}prestashop>_d090bb34c5334e3f8307d4d14295dbc0'] = 'Prix habituel'; // Regular Price +$_MODULE['<{creativeelements}prestashop>_ff5627f178b47dbd65d0cc229a956c4e'] = 'Badges'; // Badges +$_MODULE['<{creativeelements}prestashop>_f2cd171bd42220283b7a595c3ff2aaaf'] = 'Réduction'; // Sale +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Nouveau'; // New +$_MODULE['<{creativeelements}prestashop>_4492081ca02b059f9e8af4ddaf0f7292'] = 'Pack'; // Pack +$_MODULE['<{creativeelements}prestashop>_2ef464d50f6acd767fb3424910995218'] = 'Rupture de stock'; // Out-of-Stock +$_MODULE['<{creativeelements}prestashop>_7c147cda9e49590f6abe83d118b7353b'] = 'Rupture'; // Out +$_MODULE['<{creativeelements}prestashop>_50155057b32fd0eac6419c9303a484a6'] = 'Écart de rangées'; // Rows Gap +$_MODULE['<{creativeelements}prestashop>_72f2d9457fc51fdf260b4bc7a467d537'] = 'Autoriser multiligne'; // Allow Multiline +$_MODULE['<{creativeelements}prestashop>_fb5befd93e30eba6a71fef4b32a65e9a'] = 'Distance supérieure'; // Top Distance +$_MODULE['<{creativeelements}prestashop>_271e53cc1d1dfb05e14b2dc83b4edb9e'] = 'Distance gauche'; // Left Distance +$_MODULE['<{creativeelements}prestashop>_965cbdf786f774c2d426dcc19a039aa4'] = 'Distance droit'; // Right Distance +$_MODULE['<{creativeelements}prestashop>_3f65d6e17a11466983fd177702cf6a71'] = 'Formulaire de contact'; // Contact Form +$_MODULE['<{creativeelements}prestashop>_3481dc97ec8ba3c605cdc753aff1fcf0'] = 'Champs de formulaire'; // Form Fields +$_MODULE['<{creativeelements}prestashop>_e0626222614bdee31951d84c64e5e9ff'] = 'Sélectionner'; // Select +$_MODULE['<{creativeelements}prestashop>_b021df6aac4654c454f46c77646e745f'] = 'Libellé'; // Label +$_MODULE['<{creativeelements}prestashop>_68753d36ec0c4d7768b20993268d68d1'] = 'Espace réservé'; // Placeholder +$_MODULE['<{creativeelements}prestashop>_530f488f7a9800411efc6926ab189708'] = 'Rangées'; // Rows +$_MODULE['<{creativeelements}prestashop>_902b0d55fddef6f8d651fe1035b7d4bd'] = 'Erreur'; // Error +$_MODULE['<{creativeelements}prestashop>_4f8222964f9a317cef99dddc23a121bd'] = 'Case à cocher'; // Checkbox +$_MODULE['<{creativeelements}prestashop>_b22aeaf14deafb2ea0d4517349e59a8c'] = 'Paramètres du carrousel'; // Carousel Settings +$_MODULE['<{creativeelements}prestashop>_44877c6aa8e93fa5a91c9361211464fb'] = 'Vitesse'; // Speed +$_MODULE['<{creativeelements}prestashop>_70ab55fc8ac90620143b01c453be77a3'] = 'Répéter les images'; // Loop forever +$_MODULE['<{creativeelements}prestashop>_52c697d185b28f19449ff8a4755f7d20'] = 'Liste des diapositives'; // Slides List +$_MODULE['<{creativeelements}prestashop>_ceb94b5ba288f75b442e17df5e2f386e'] = 'Configurer le module'; // Configure Module +$_MODULE['<{creativeelements}prestashop>_fafd952418c73bbc20286f8b0ec5bd6a'] = 'Catégorie racine'; // Category Root +$_MODULE['<{creativeelements}prestashop>_76519eb2c98e529ec632474488e618d0'] = 'Catégorie d’accueil'; // Home Category +$_MODULE['<{creativeelements}prestashop>_7e95adf6587633010eba9b602dc43817'] = 'Catégorie actuelle'; // Current Category +$_MODULE['<{creativeelements}prestashop>_4e98e60e38a29ab7bd94ea815c4f2ef2'] = 'Catégorie parente'; // Parent Category +$_MODULE['<{creativeelements}prestashop>_ff571d9fd8c0039b08b1a6106f650e70'] = 'Profondeur maximum'; // Maximum Depth +$_MODULE['<{creativeelements}prestashop>_6b46ae48421828d9973deec5fa9aa0c3'] = 'Trier'; // Sort +$_MODULE['<{creativeelements}prestashop>_2e958161e121e44beb3cc40325adf32a'] = 'par nom'; // By Name +$_MODULE['<{creativeelements}prestashop>_7d7ab8b7ee9f5fa61c94baca04eab51c'] = 'par position'; // By Position +$_MODULE['<{creativeelements}prestashop>_c20cc8f5bb7d26404f80b1c990c8a7fd'] = 'Sens du tri'; // Sort Order +$_MODULE['<{creativeelements}prestashop>_6404a73edb680a8c8ef91c6604295a9f'] = 'Créer un nouveau slider'; // Create New Slider +$_MODULE['<{creativeelements}prestashop>_50dbffc1e2883d38ccf6841e2bb32041'] = 'Nommez votre nouveau slider'; // Name your new slider +$_MODULE['<{creativeelements}prestashop>_2d9b9a764fb0be4be10e1b2fce63f561'] = 'Slider'; // Slider +$_MODULE['<{creativeelements}prestashop>_3c311933c000b6aab612c1f5944f4388'] = 'Modifier slider'; // Edit Slider +$_MODULE['<{creativeelements}prestashop>_cd4bb13b29348d29bad8b60ca5358726'] = 'Les modifications que vous avez apportées peuvent ne pas être enregistrées, êtes-vous sûr de vouloir fermer?'; // Changes you made may not be saved, are you sure you want to close? +$_MODULE['<{creativeelements}prestashop>_b9b371458ab7c314f88b81c553f6ce51'] = 'Point d’accroche'; // Hook +$_MODULE['<{creativeelements}prestashop>_e6c8da8ca137d6c8c67d2911cb39a7df'] = 'Spécifiez le point d’accroche requis si nécessaire.'; // Specify the required hook if needed. +$_MODULE['<{creativeelements}prestashop>_1bacb9caa60813ee730288d7dd95e7fc'] = 'URL du site'; // Site URL +$_MODULE['<{creativeelements}prestashop>_30fc6bbba82125243ecf4ddb27fee645'] = 'Minimale'; // Minimal +$_MODULE['<{creativeelements}prestashop>_4d5098c1fcd4aad3e501e7d48ba6678a'] = 'Barre du haut'; // Topbar +$_MODULE['<{creativeelements}prestashop>_324118a6721dd6b8a9b9f4e327df2bf5'] = 'Entrée'; // Input +$_MODULE['<{creativeelements}prestashop>_3601146c4e948c32b6424d2c0a7f0118'] = 'Prix'; // Price +$_MODULE['<{creativeelements}prestashop>_a6b9b2b91d590b3b3ee18a918f1e0019'] = 'Liste des résultats'; // Result List +$_MODULE['<{creativeelements}prestashop>_fad52b41b8afc9dd3abfe62ddf2619ad'] = 'Lignes max.'; // Max Lines +$_MODULE['<{creativeelements}prestashop>_0b60a73d19a81f2c1d7317facbb190cb'] = 'Taille de l’icône'; // Icon Size +$_MODULE['<{creativeelements}prestashop>_d865317d1c523409ecfeb7fe4b36b022'] = 'Taille de bordure'; // Border Size +$_MODULE['<{creativeelements}prestashop>_219ff7705d67d0c798779951dcf82e95'] = 'Colonne latérale'; // Sidebar +$_MODULE['<{creativeelements}prestashop>_4eb86eb205d6b3d881389109cf04f5a2'] = 'Message vide'; // Empty Message +$_MODULE['<{creativeelements}prestashop>_47fffe3e93fbb9948af64f5669fa228a'] = 'Aucun produit dans le chariot.'; // No products in the cart. +$_MODULE['<{creativeelements}prestashop>_8fb5243396b45a73c0edda2c7216a520'] = 'Prix d’expédition'; // Shipping Price +$_MODULE['<{creativeelements}prestashop>_6ab3dc1c702beaee933398ab684ed0f5'] = 'Indicateur d’éléments'; // Items Indicator +$_MODULE['<{creativeelements}prestashop>_b6230dfc594205d0ea15d5890ac22d7f'] = 'Bulle'; // Bubble +$_MODULE['<{creativeelements}prestashop>_76d19c2a8909c1336a839cc4aa86fa71'] = 'Masquer les vides'; // Hide Empty +$_MODULE['<{creativeelements}prestashop>_2194aaec8cc7086ab0e93f74547e5f53'] = 'Sous-total'; // Subtotal +$_MODULE['<{creativeelements}prestashop>_4e0604a7752f38f11cc085a88d86560f'] = 'Ajouter au panier action'; // Add To Cart Action +$_MODULE['<{creativeelements}prestashop>_4766ca6cee31e96506d90b68e2dcd095'] = 'Afficher le modal'; // Show Modal +$_MODULE['<{creativeelements}prestashop>_bde17a3981c83c8c5967d989f40a7a27'] = 'Ouvrir le panier'; // Open Shopping Cart +$_MODULE['<{creativeelements}prestashop>_b54ebc45d5968196122274ca0d93d849'] = 'Attributs de produit'; // Product Attributes +$_MODULE['<{creativeelements}prestashop>_488b35d8ad1e08e668ac0f2d3d463f68'] = 'Retirer l’icône de l’élément'; // Remove Item Icon +$_MODULE['<{creativeelements}prestashop>_290612199861c31d1036b185b4e69b75'] = 'Sommaire'; // Summary +$_MODULE['<{creativeelements}prestashop>_5b3ec15499a125805b5bbf8e4afcec8c'] = 'Boutons'; // Buttons +$_MODULE['<{creativeelements}prestashop>_59fc69e031ecb0f82efe467fd6692383'] = 'Voir le panier'; // View Cart +$_MODULE['<{creativeelements}prestashop>_e404dd0bece5f7c53d80edaa70513eec'] = 'Menu principal'; // Main Menu +$_MODULE['<{creativeelements}prestashop>_b5750478c3c490d2c1df5dfdfdd6b7a4'] = 'Liste de liens'; // Link List +$_MODULE['<{creativeelements}prestashop>_3f2a535406fb0b67258851e0b8816caa'] = 'Accédez au module %s pour gérer vos éléments de menu.'; // Go to the %s module to manage your menu items. +$_MODULE['<{creativeelements}prestashop>_7498c445a737312f3678aa1494e01a38'] = 'Liste déroulante'; // Dropdown +$_MODULE['<{creativeelements}prestashop>_61cf8510205077b6f5491d38cd44c0f7'] = 'Pointeur'; // Pointer +$_MODULE['<{creativeelements}prestashop>_852721aa5fc738dfedff2945d71da439'] = 'Souligner'; // Underline +$_MODULE['<{creativeelements}prestashop>_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Surligner'; // Overline +$_MODULE['<{creativeelements}prestashop>_14cc8634a5bfab35b6e853c9198925f7'] = 'Ligne double'; // Double Line +$_MODULE['<{creativeelements}prestashop>_d6b6b668dbca9d4fe774bb654226ebe3'] = 'Animation'; // Animation +$_MODULE['<{creativeelements}prestashop>_bb339e17211e92f514b07c1951d06e72'] = 'Indicateur de sous-menu'; // Submenu Indicator +$_MODULE['<{creativeelements}prestashop>_a1e4659d43cc7eab28edeac2e9f75bc4'] = 'Aligner sous-menu'; // Submenu Align +$_MODULE['<{creativeelements}prestashop>_ead153a06f04c12e720c5aa0cffe0729'] = 'Afficher le sous-menu'; // Show Submenu +$_MODULE['<{creativeelements}prestashop>_9ccbedea8cb99c482cb42bbae12a75ea'] = 'Au survol'; // On Hover +$_MODULE['<{creativeelements}prestashop>_6ddd42699e63792e32b11959de64ff6c'] = 'Au clic'; // On Click +$_MODULE['<{creativeelements}prestashop>_98c9ea2e311ff0ddd10aa4a50c5cc04b'] = 'Menu déroulant mobile'; // Mobile Dropdown +$_MODULE['<{creativeelements}prestashop>_7129472c5eb598faf47e4e877f2618fd'] = 'Seuil'; // Breakpoint +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Pleine largeur'; // Full Width +$_MODULE['<{creativeelements}prestashop>_29e7cdd1ed01040595b903308c492d8b'] = 'Passer le sous menu en pleine largeur.'; // Stretch the dropdown of the menu to full width. +$_MODULE['<{creativeelements}prestashop>_91eb91e653c97c3600e5ee786226e68b'] = 'Bouton de bascule'; // Toggle Button +$_MODULE['<{creativeelements}prestashop>_7aa99f13e44dd25f7de294bc71abe4ff'] = 'Hamburger'; // Hamburger +$_MODULE['<{creativeelements}prestashop>_f15f18ce20de4f5948ecb46b1958e7ea'] = 'Marges internes horizontales'; // Horizontal Padding +$_MODULE['<{creativeelements}prestashop>_55f2842d1d6cd77c91e84ae5e4d1aea2'] = 'Marges internes verticales'; // Vertical Padding +$_MODULE['<{creativeelements}prestashop>_0b1081024cf0544ac21de69d1b6a0f21'] = 'Largeur de pointeur'; // Pointer Width +$_MODULE['<{creativeelements}prestashop>_b1c6469beab5f226ceb51402e429215e'] = 'Couleur du pointeur'; // Pointer Color +$_MODULE['<{creativeelements}prestashop>_d11ed49f634022147a3ab4a0ac7e8f1d'] = 'Sur ordinateur cela affectera le sous menu. Su mobile, cela affectera tout le menu.'; // On desktop, this will affect the submenu. On mobile, this will affect the entire menu. +$_MODULE['<{creativeelements}prestashop>_8a84bf5a983ed52ea6aca9188f21c927'] = 'Signé en'; // Signed in +$_MODULE['<{creativeelements}prestashop>_bc910f8bdf70f29374f496f05be0330c'] = 'Prénom'; // First Name +$_MODULE['<{creativeelements}prestashop>_77587239bf4c54ea493c7033e1dbf636'] = 'Nom'; // Last Name +$_MODULE['<{creativeelements}prestashop>_50346473cb92c34ef84e58f727a6a911'] = 'Menu utilisateur'; // Usermenu +$_MODULE['<{creativeelements}prestashop>_d95cf4ab2cbf1dfb63f066b50558b07d'] = 'Mon compte'; // My account +$_MODULE['<{creativeelements}prestashop>_0fd8dc8abb2404ad11af4182f10643c1'] = 'Identité'; // Personal info +$_MODULE['<{creativeelements}prestashop>_284b47b0bb63ae2df3b29f0e691d6fcf'] = 'Adresses'; // Addresses +$_MODULE['<{creativeelements}prestashop>_df96fcb565aa7ca076514dfb1f7d94a7'] = 'Nouvelle adresse'; // New Address +$_MODULE['<{creativeelements}prestashop>_782c8b38bce4f2f6975ca7f33ac8189b'] = 'Historique de vos commandes'; // Order history +$_MODULE['<{creativeelements}prestashop>_cf3bae95c5f6023d5a10fe415b205a45'] = 'Avoir'; // Credit slip +$_MODULE['<{creativeelements}prestashop>_95d2137c196c7f84df5753ed78f18332'] = 'Remise'; // My vouchers +$_MODULE['<{creativeelements}prestashop>_9b0af1b39d6dff87b095d7041924e7b8'] = 'Drapeau du pays'; // Country Flag +$_MODULE['<{creativeelements}prestashop>_ad68f9bafd9bf2dcf3865dac55662fd5'] = 'Code ISO'; // ISO code +$_MODULE['<{creativeelements}prestashop>_81ca343ca02154e6d9d0b1428a9dd2f6'] = 'Aucune image'; // No Image +$_MODULE['<{creativeelements}prestashop>_e833b5e560bdc737fe850bc50d0c5f0c'] = 'Diaporama'; // Slideshow +$_MODULE['<{creativeelements}prestashop>_a296104f0c61a9cf39f4824d05315e12'] = 'Cube'; // Cube +$_MODULE['<{creativeelements}prestashop>_e8b4b2443c2f0e19957e1e77c3c92c12'] = 'Couverture'; // Coverflow +$_MODULE['<{creativeelements}prestashop>_acc66e14d297c1bfc20986bf593cb054'] = 'Miniatures'; // Thumbnails +$_MODULE['<{creativeelements}prestashop>_f63af7ab801158241f45d82e519df16d'] = 'Zoom au survol'; // Zoom on Hover +$_MODULE['<{creativeelements}prestashop>_882277bdf25efaeb8295e842ebcb3d11'] = 'Alternative'; // Fallback +$_MODULE['<{creativeelements}prestashop>_d2203cb1237cb6460cbad94564e39345'] = 'Habituel'; // Regular +$_MODULE['<{creativeelements}prestashop>_19c562a36aeb455d09534f93b4f5236f'] = 'Unité'; // Unit +$_MODULE['<{creativeelements}prestashop>_58ef6750a23ba432fc1377b7de085d9f'] = 'HT'; // Tax excl. +$_MODULE['<{creativeelements}prestashop>_4b78ac8eb158840e9638a3aeb26c4a9d'] = 'Taxe'; // Tax +$_MODULE['<{creativeelements}prestashop>_104d9898c04874d0fbac36e125fa1369'] = 'Réduction'; // Discount +$_MODULE['<{creativeelements}prestashop>_a586532c728620b9fed5f6baa415ee64'] = 'Note moyenne '; // Average Grade +$_MODULE['<{creativeelements}prestashop>_71d7a3826df386366c89230976b16aca'] = 'Nombre de commentaires'; // Comments Number +$_MODULE['<{creativeelements}prestashop>_9934bb23bbec740cca05409a9cd33d7f'] = 'Poster un commentaire'; // Post Comment +$_MODULE['<{creativeelements}prestashop>_1be6f9eb563f3bf85c78b4219bf09de9'] = 'Marque'; // Brand +$_MODULE['<{creativeelements}prestashop>_91e85212ab7a0d0295d40e7b03ef4f1c'] = 'Fournisseur'; // Supplier +$_MODULE['<{creativeelements}prestashop>_205b01b3197cf06688f6ed574faf5664'] = 'Delai de livraison'; // Delivery Time +$_MODULE['<{creativeelements}prestashop>_241c3f2af65370ced61a874c5725e348'] = 'Date de disponibilité'; // Availability Date +$_MODULE['<{creativeelements}prestashop>_9e2941b3c81256fac10392aaca4ccfde'] = 'État'; // Condition +$_MODULE['<{creativeelements}prestashop>_d95867deadfe690e40f42068d6b59df8'] = 'Références'; // References +$_MODULE['<{creativeelements}prestashop>_6665e3761028c84e1d228de3432229ed'] = 'Référence'; // SKU +$_MODULE['<{creativeelements}prestashop>_3ccf74d463f8895cef06727cb9709d83'] = 'Côlon'; // Colon +$_MODULE['<{creativeelements}prestashop>_0a045d39aea567664edf2daaa25860ff'] = 'Liste déroulante'; // Drop-down List +$_MODULE['<{creativeelements}prestashop>_7041d69f9024a46791714e59812fa68f'] = 'Boutons radio'; // Radio Buttons +$_MODULE['<{creativeelements}prestashop>_eaec849a5ffecf1b13b1ca2490cdb4e1'] = 'Boutons couleur/texture'; // Color/Texture Buttons +$_MODULE['<{creativeelements}prestashop>_c1f52fba179ff982b10e3881670b61ef'] = 'Acheter maintenant'; // Buy Now +$_MODULE['<{creativeelements}prestashop>_515c06a3b32dc640a16385b52ae67c56'] = 'Produit avec déclinaisons'; // Product with Combinations +$_MODULE['<{creativeelements}prestashop>_d248b7896bffb1d7bc56d6378930affb'] = 'Afficher tous les détails'; // View Full Details +$_MODULE['<{creativeelements}prestashop>_9abdae4fa5d93330363a88ed8a5e7946'] = 'Curseur'; // Cursor +$_MODULE['<{creativeelements}prestashop>_37b6bd7fe61d651735cec3d3b0356c66'] = 'Impaire'; // Odd +$_MODULE['<{creativeelements}prestashop>_35537fbc25d87ffe59e4f35fefcd34b7'] = 'Pair'; // Even +$_MODULE['<{creativeelements}prestashop>_689202409e48743b914713f96d93947c'] = 'Valeur'; // Value +$_MODULE['<{creativeelements}prestashop>_eec89088ee408b80387155272b113256'] = 'Réseau'; // Network +$_MODULE['<{creativeelements}prestashop>_e2d9081a3961cdb83db1d1fa7582ad04'] = 'Couverture produit'; // Product Cover +$_MODULE['<{creativeelements}prestashop>_01b9e63c9fbfec3fe4863e79d46956fc'] = 'Personnalisation produit'; // Product Customization +$_MODULE['<{creativeelements}prestashop>_f63e07e0b80ccecfebdc36e6fe11c876'] = 'Pack produit'; // Product Pack +$_MODULE['<{creativeelements}prestashop>_3b67fc912569438cec7b2cc96eb415a9'] = 'Réductions produit'; // Product Discounts +$_MODULE['<{creativeelements}prestashop>_87421dbd18a1eb6349fefd26db3a717d'] = 'Actions produit'; // Product Actions +$_MODULE['<{creativeelements}prestashop>_8bb5496d7ab4e19058067c0fa40d45ef'] = 'Disponibilité produit'; // Product Availability +$_MODULE['<{creativeelements}prestashop>_841368ddc1cc8ee4e5c8d010b62d3dd5'] = 'Quantité minimum'; // Minimum Quantity +$_MODULE['<{creativeelements}prestashop>_e5c548d29f23c379b1452c40a208c445'] = 'Information additionnelle'; // Additional Info +$_MODULE['<{creativeelements}prestashop>_1c2df820420d0376965fb9da04eca4df'] = 'Réassurance'; // Reassurance +$_MODULE['<{creativeelements}prestashop>_75fa820aebc10bf31b310065b38447c7'] = 'Pestañas de productos'; // Product Tabs +$_MODULE['<{creativeelements}prestashop>_b8900d8adf598b6653bb8c071bc49a1d'] = 'Detalles de producto'; // Product Details +$_MODULE['<{creativeelements}prestashop>_623a9a1f669b091dd76bead27c3252ed'] = 'Cantidades'; // Quantities +$_MODULE['<{creativeelements}prestashop>_4594f39c6dac58760daeb19d79389576'] = 'Referencias específicas'; // Specific References +$_MODULE['<{creativeelements}prestashop>_da1b85e60d23d8d59c77d31af402acda'] = 'Accesorios del producto'; // Product Accessories +$_MODULE['<{creativeelements}prestashop>_9787028383eef1dfde2f09093a851373'] = 'Pie de página del producto'; // Product Footer +$_MODULE['<{creativeelements}prestashop>_9909f0bb3eb94634e3f8cd0164dbacac'] = 'Vous êtes dans un contexte multiboutique : toute modification s’appliquera à toutes vos boutiques, ou à chaque boutique du groupe actif.'; // You are in a multistore context: any modification will impact all your shops, or each shop of the active group. diff --git a/modules/creativeelements/translations/index.php b/modules/creativeelements/translations/index.php new file mode 100644 index 00000000..0e32c6a1 --- /dev/null +++ b/modules/creativeelements/translations/index.php @@ -0,0 +1,16 @@ +_71d8a11f3a1853ee785d61e210485c28'] = 'Creative Elements 2.5 introduce modifiche chiave al layout utilizzando CSS Flexbox. Le tue pagine esistenti potrebbero essere state interessate, controlla la tua pagina prima della pubblicazione.'; // Creative Elements 2.5 introduces key changes to the layout using CSS Flexbox. Your existing pages might have been affected, please review your page before publishing. +$_MODULE['<{creativeelements}prestashop>_20fe34eafdf840c5f35e60d4bdfd3876'] = 'Nota: Cambiamenti Flexbox'; // Note: Flexbox Changes +$_MODULE['<{creativeelements}prestashop>_65b3710ad99ada6c018a6d36d23ff656'] = 'Orientamento Verticale'; // Vertical Orientation +$_MODULE['<{creativeelements}prestashop>_dfd0a82c4bf37b1e90b690a22a20692e'] = 'Offset'; // Offset +$_MODULE['<{creativeelements}prestashop>_1b6f6fe2f7bc999abb893e7bea077f4c'] = 'Orientamento Orizzontale'; // Horizontal Orientation +$_MODULE['<{creativeelements}prestashop>_4457d440870ad6d42bab9082d9bf9b61'] = 'Fisso'; // Fixed +$_MODULE['<{creativeelements}prestashop>_b51ca26c6c89cfc9bec338f7a0d3e0c8'] = 'Assoluto'; // Absolute +$_MODULE['<{creativeelements}prestashop>_0ee951833c18c2a27c2967d5490ab899'] = 'Il posizionamento personalizzato non è considerato la best practice per il web design reattivo e non dovrebbe essere usato troppo frequentemente.'; // Custom positioning is not considered best practice for responsive web design and should not be used too frequently. +$_MODULE['<{creativeelements}prestashop>_d95c4d0d7d8f6a51de4c86208c3b35b1'] = 'Si prega di notare!'; // Please note! +$_MODULE['<{creativeelements}prestashop>_56419bfabc4807a765543d23f357d55e'] = 'Larghezza personalizzata'; // Custom Width +$_MODULE['<{creativeelements}prestashop>_506555a17a9375eb4a701c4fa22ab93c'] = 'Berechne'; // Calculate +$_MODULE['<{creativeelements}prestashop>_1dcb5758bddf39c3c93a63bec8d7655a'] = 'Ordine'; // Order +$_MODULE['<{creativeelements}prestashop>_f13af8b45701da62165a903a828eb26a'] = 'Ordine personalizzato'; // Custom Order +$_MODULE['<{creativeelements}prestashop>_7acdf85c69cc3c5305456a293524386e'] = 'Nascosto'; // Hidden +$_MODULE['<{creativeelements}prestashop>_129e8109f319870e328cc7a1d5b5cae3'] = 'Eccedenza'; // Overflow +$_MODULE['<{creativeelements}prestashop>_a7f391c54b912211cd510fd1098e5308'] = 'Effetti di movimento'; // Motion Effects +$_MODULE['<{creativeelements}prestashop>_cdd416d7a24537ed830732917e74410d'] = 'Allineamento orizzontale'; // Horizontal Align +$_MODULE['<{creativeelements}prestashop>_daa3a8e38d3417760fe479ba9a956f21'] = 'Spaziare Uniformemente'; // Space Evenly +$_MODULE['<{creativeelements}prestashop>_48ad0b896ae6d7004eb87bad5a125d71'] = 'Spaziare Intorno'; // Space Around +$_MODULE['<{creativeelements}prestashop>_692af12e687aba7f0845b9a49b515c9d'] = 'Allineamento verticale'; // Vertical Align +$_MODULE['<{creativeelements}prestashop>_d7f3d71483d1424cf1edaed61be43f40'] = 'Nota: Il collegamento ID accetta SOLO questi caratteri: %s'; // Note: The ID link ONLY accepts these chars: %s +$_MODULE['<{creativeelements}prestashop>_e635032a5f71d809146d3872389f5b0c'] = 'Scegli file'; // Choose File +$_MODULE['<{creativeelements}prestashop>_48b6dc1949d063860c1765ebd06bbc95'] = 'URL esterno'; // External URL +$_MODULE['<{creativeelements}prestashop>_801322095c363689f7620e0147e3fd14'] = 'Ordina per'; // Order By +$_MODULE['<{creativeelements}prestashop>_ce5bf551379459c1c61d2a204061c455'] = 'Posizione'; // Location +$_MODULE['<{creativeelements}prestashop>_71bfb711908ea603a75e86c3e5dbb47a'] = 'Continua a leggere %s'; // Continue reading %s +$_MODULE['<{creativeelements}prestashop>_54d0d7ad584d2f68657459fa49b9fa80'] = '(altro…)'; // (more…) +$_MODULE['<{creativeelements}prestashop>template_library_42d00bc24fd43cfe3e2e30d01f39ee95'] = 'Filtra per categoria'; // Filter by category +$_MODULE['<{creativeelements}prestashop>template_library_a6a2a55bea8760389dfca77132905b7c'] = 'Tutte le categorie'; // All Categories +$_MODULE['<{creativeelements}prestashop>template_library_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Categoria'; // Category +$_MODULE['<{creativeelements}prestashop>template_library_af1b98adf7f686b84cd0b443e022b7a0'] = 'Categorie'; // Categories +$_MODULE['<{creativeelements}prestashop>template_library_7df96b18c230f90ada0a9e2307226338'] = 'Template'; // Templates +$_MODULE['<{creativeelements}prestashop>background_control_e7492ba5c0e269d4b32aecd208c0fbff'] = 'Posizione Y'; // Y Position +$_MODULE['<{creativeelements}prestashop>background_control_21e84455e7383dee4e606afc7ae6af83'] = 'Posizione X'; // X Position +$_MODULE['<{creativeelements}prestashop>background_control_90589c47f06eb971d548591f23c285af'] = 'Personalizzato'; // Custom +$_MODULE['<{creativeelements}prestashop>_0d4c14a20b4d98a5de54e1480bf99a25'] = 'Popup'; // Popup +$_MODULE['<{creativeelements}prestashop>_487df467aed02a8dd4a50648141fed82'] = 'Theme Builder'; // Theme Builder +$_MODULE['<{creativeelements}prestashop>_c3320c3457dfdfbada4a611a68854ea6'] = 'Non supportato'; // Not Supported +$_MODULE['<{creativeelements}prestashop>_95fc8385f09a0cb6cae00e2047ce8430'] = 'Qualsiasi video'; // Any Video +$_MODULE['<{creativeelements}prestashop>_ba1f922207e50bf1fa2ee2b917e63a2b'] = 'Canale video corrente'; // Current Video Channel +$_MODULE['<{creativeelements}prestashop>_b46c2db25162b51009aba9c0317c2435'] = 'Colore non marcato'; // Unmarked Color +$_MODULE['<{creativeelements}prestashop>_d37c550d781bfb93b0088a2470598bcf'] = 'Stelle'; // Stars +$_MODULE['<{creativeelements}prestashop>_606b51cc1c9d0b4af394419a22f2ff1f'] = 'Contorno'; // Outline +$_MODULE['<{creativeelements}prestashop>_7cdd5cfacc3e9c4fd0d1458df3d444f6'] = 'Stile non marcato'; // Unmarked Style +$_MODULE['<{creativeelements}prestashop>_a1718ae9e0cbbac49b74f68a8a21cad2'] = 'Scala di valutazione'; // Rating Scale +$_MODULE['<{creativeelements}prestashop>_dda9c06f33071c9b6fc237ee164109d8'] = 'Valutazione'; // Rating +$_MODULE['<{creativeelements}prestashop>_3d9d629289199cf23663a21c7a96190e'] = 'Stelle'; // Star Rating +$_MODULE['<{creativeelements}prestashop>_6a244a63f35840539994ca1b7d224a9c'] = 'Didascalia personalizzata'; // Custom Caption +$_MODULE['<{creativeelements}prestashop>_1c91473a92d118fb1929d3e6975f6a90'] = 'Didascalia allegato'; // Attachment Caption +$_MODULE['<{creativeelements}prestashop>_0d82790b0612935992bd564a17ce37d6'] = 'Smettere'; // Quit +$_MODULE['<{creativeelements}prestashop>_5f405eb9720e7065c9c383de4d40e664'] = 'Tasti rapidi'; // Keyboard Shortcuts +$_MODULE['<{creativeelements}prestashop>_0441244fcc68971ded749fe3c45fab92'] = 'Mostra / nascondi pannello'; // Show / Hide Panel +$_MODULE['<{creativeelements}prestashop>_94764bde0434a9467c2452999bffc499'] = 'Vai a'; // Go To +$_MODULE['<{creativeelements}prestashop>_5afeaba074ef570dc720caaa855d49f6'] = 'Ripeti'; // Redo +$_MODULE['<{creativeelements}prestashop>_1cdc076b28f70afac5fcedadf99fa119'] = 'Annulla'; // Undo +$_MODULE['<{creativeelements}prestashop>_d151508da8d36994e1635f7875594424'] = 'Finder'; // Finder +$_MODULE['<{creativeelements}prestashop>_adff855173c9b92b5478129af7d39e03'] = 'Futuro'; // Future +$_MODULE['<{creativeelements}prestashop>_9157994442d3884a185e82b5df0931bd'] = 'Poster'; // Poster +$_MODULE['<{creativeelements}prestashop>_452a5c072ecdd2a6d27bb1cbb9108f8a'] = 'Lazy Load'; // Lazy Load +$_MODULE['<{creativeelements}prestashop>_be8342af4ac5a74ec8d73f8cacec021d'] = 'Inserisci il tuo URL'; // Enter your URL +$_MODULE['<{creativeelements}prestashop>_12737e0ac21826611dba8b42ce43a4a6'] = 'Sezione Interna'; // Inner Section +$_MODULE['<{creativeelements}prestashop>_0333d78f654f5c73ed8a1ac6866b94ef'] = 'Una volta che hai riempito la tua pagina di contenuti, questa finestra ti mostrerà una panoramica di tutti gli elementi della pagina. In questo modo, puoi spostare facilmente le diverse sezioni, colonne e widget.'; // Once you fill your page with content, this window will give you an overview display of all the page elements. This way, you can easily move around any section, column, or widget. +$_MODULE['<{creativeelements}prestashop>_d3db55a0ce1256f4a2121677fff695fb'] = 'La navigazione semplice è qui!'; // Easy Navigation is Here! +$_MODULE['<{creativeelements}prestashop>_ce2c8aed9c2fa0cfbed56cbda4d8bf07'] = 'Vuoto'; // Empty +$_MODULE['<{creativeelements}prestashop>_7392e5a07cc56647b45a9598ce4d646d'] = 'Navigatore'; // Navigator +$_MODULE['<{creativeelements}prestashop>_72ef2b9b6965d078e3c7f95487a82d1c'] = 'Salta'; // Skip +$_MODULE['<{creativeelements}prestashop>_5c3a475e00e0f928bebed9b03118a7fb'] = 'Incolla l’URL o digita'; // Paste URL or type +$_MODULE['<{creativeelements}prestashop>filter_control_fb5d805f5b3b22e4fd4a1bc66875dbe3'] = 'Colore'; // Hue +$_MODULE['<{creativeelements}prestashop>_4252b72e6ebcd4d4b4c2e46a786f03d2'] = 'Zoom'; // Zoom +$_MODULE['<{creativeelements}prestashop>_66ba162102bbf6ae31b522aec561735e'] = 'Singolo'; // Single +$_MODULE['<{creativeelements}prestashop>_ca0de64bfaed84cff1811c8a557460e8'] = 'Tutto il contenuto'; // All Content +$_MODULE['<{creativeelements}prestashop>_771beb30ea03f1a09209a509ba0a95e7'] = 'Reimposta Stile'; // Style Reset +$_MODULE['<{creativeelements}prestashop>_f373922b0d1d9582e2e01632fa435be2'] = 'Stile incollato'; // Style Pasted +$_MODULE['<{creativeelements}prestashop>_8c2857a9ad1d8f31659e35e904e20fa6'] = 'Logo'; // Logo +$_MODULE['<{creativeelements}prestashop>_bdc558034c3fa1f53c632cb2b4a081eb'] = 'Branding Modesto'; // Modest Branding +$_MODULE['<{creativeelements}prestashop>_28f69ec829f28c18234aeb9b4bf84085'] = 'Info Video'; // Video Info +$_MODULE['<{creativeelements}prestashop>_e6b391a8d2c4d45902a23a8b6585703d'] = 'URL'; // URL +$_MODULE['<{creativeelements}prestashop>_9b5e1c921934d0b8af2f354006adc776'] = 'Auto Ospitato'; // Self Hosted +$_MODULE['<{creativeelements}prestashop>_f31bbdd1b3e85bccd652680e16935819'] = 'Sorgente'; // Source +$_MODULE['<{creativeelements}prestashop>_a102718b3b0839b017af5764e82f6bcd'] = 'Assicurati che l’ID sia univoco e non sia utilizzato altrove in questo modulo. Questo campo consente A-z 0-9 e segni di sottolineatura senza spazi.'; // Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows A-z 0-9 & underscore chars without spaces. +$_MODULE['<{creativeelements}prestashop>_04d536bf597bcb004268f6d8c509dbde'] = 'ID pulsante'; // Button ID +$_MODULE['<{creativeelements}prestashop>_a7d6475ec8993b7224d6facc8cb0ead6'] = 'Sito'; // Site +$_MODULE['<{creativeelements}prestashop>_8d5e7e72f12067991186cdf3cb7d5d9d'] = 'Premium'; // Premium +$_MODULE['<{creativeelements}prestashop>_86176e1d3dd3649de183dc33b7750f62'] = 'Modalità di fusione'; // Blend Mode +$_MODULE['<{creativeelements}prestashop>_74f88681be25e673fa7caacae1b165bc'] = 'Fatto'; // Got It +$_MODULE['<{creativeelements}prestashop>_2cef6b933418f084afe1c5e44bcaa4bc'] = 'Ora puoi accedere a tutte le azioni di modifica usando il tasto destro del mouse.'; // Now you can access all editing actions using right click. +$_MODULE['<{creativeelements}prestashop>_fd27a26bce8b01ecb7f38b4e1d6d2ad5'] = 'Incontra il clic destro'; // Meet Right Click +$_MODULE['<{creativeelements}prestashop>_02b2a8ed2ee59fb6a1ccf3716c988597'] = 'Copia tutto il contenuto'; // Copy All Content +$_MODULE['<{creativeelements}prestashop>_e86a54e13ae40856b7c38b514dc6974b'] = 'Reimposta Stile'; // Reset Style +$_MODULE['<{creativeelements}prestashop>_086efb53f636c4bf4fc83938d9a1d39e'] = 'Copia Stile'; // Copy Style +$_MODULE['<{creativeelements}prestashop>_5fb63579fc981698f97d55bfecb213ea'] = 'Copia'; // Copy +$_MODULE['<{creativeelements}prestashop>_47858182067cd39bac29ead1d6772192'] = 'Anteprima per %s'; // Preview for %s +$_MODULE['<{creativeelements}prestashop>_0f7c6d84b1393efc4b3666e1866a5759'] = 'Trascina il widget qui'; // Drag widget here +$_MODULE['<{creativeelements}prestashop>filter_control_7f491274a53763ba32b7356ade638e19'] = 'Filtri CSS'; // CSS Filters +$_MODULE['<{creativeelements}prestashop>filter_control_2e3307b9b1a2cc64b48f1cd6977a4b29'] = 'Saturazione'; // Saturation +$_MODULE['<{creativeelements}prestashop>filter_control_c63ecd19a0ca74c22dfcf3063c9805d2'] = 'Contrasto'; // Contrast +$_MODULE['<{creativeelements}prestashop>filter_control_b25323f99788ce64617f018b8a9f5f70'] = 'Luminosità'; // Brightness +$_MODULE['<{creativeelements}prestashop>filter_control_8b52de510bc5497ac43abfe566be48ab'] = 'Sfocatura'; // Blur +$_MODULE['<{creativeelements}prestashop>_889deb44ad445ea359c1285d37f4a498'] = 'Specifica un orario di fine (in secondi)'; // Specify an end time (in seconds) +$_MODULE['<{creativeelements}prestashop>_c91a577b72313356fad611c55f43c10f'] = 'Orario di fine'; // End Time +$_MODULE['<{creativeelements}prestashop>_3e06b49da8235ee588abdd3f0b58d040'] = 'Specifica un orario di inizio (in secondi)'; // Specify a start time (in seconds) +$_MODULE['<{creativeelements}prestashop>_2bbc845892f400626baab5af687527c5'] = 'Orario di inizio'; // Start Time +$_MODULE['<{creativeelements}prestashop>page_template_c45746064138c22a117ad58d89d67f4b'] = 'CE Larghezza Intera'; // CE Full Width +$_MODULE['<{creativeelements}prestashop>page_template_80aef4a77adcb8ced5b137d91a103239'] = 'CE Canvas'; // CE Canvas +$_MODULE['<{creativeelements}prestashop>_bad6a5dd8c28e6b14f8e986615e3dc98'] = 'Opacità'; // Opacity +$_MODULE['<{creativeelements}prestashop>_7c7efec2d1dfd66eb653cf98d4cc865c'] = 'Qualcosa è andato storto.'; // Something went wrong. +$_MODULE['<{creativeelements}prestashop>_95e942c63e81ac4845c306bf110290a8'] = 'Larghezza Massima'; // Max Width +$_MODULE['<{creativeelements}prestashop>_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Posizione'; // Position +$_MODULE['<{creativeelements}prestashop>_8b1b1aa6c2a4785ab415c8fbf20e70d9'] = 'Elimina %s'; // Delete %s +$_MODULE['<{creativeelements}prestashop>_95af255a86dc70e932634411b3f91e5f'] = 'Questo template include l’header, il contenuto a larghezza intera ed il footer'; // This template includes the header, full-width content and footer +$_MODULE['<{creativeelements}prestashop>_daaa4b3e4a9000898257ccbe03236593'] = 'Nessun header, nessun footer, solo Creative Elements'; // No header, no footer, just Creative Elements +$_MODULE['<{creativeelements}prestashop>_383478f70ecc7dc313b3653a3724ad5b'] = 'Template di pagina predefinito dal tema'; // Default Page Template from your theme +$_MODULE['<{creativeelements}prestashop>_47b74b5cb415e0a295404acaa62ff67a'] = 'Layout Pagina'; // Page Layout +$_MODULE['<{creativeelements}prestashop>_222a267cc5778206b253be35ee3ddab5'] = 'Attuale'; // Current +$_MODULE['<{creativeelements}prestashop>_b6d34b10f9eae474e5843a027603c4a3'] = 'Play Video'; // Play Video +$_MODULE['<{creativeelements}prestashop>_0125cf5f3ca38b312ca5d3b511c45a13'] = 'In linea'; // Inline +$_MODULE['<{creativeelements}prestashop>_04b2e4188d4ef8051e4699da8af01335'] = 'Separatore'; // Separator +$_MODULE['<{creativeelements}prestashop>_26d59c8605cb411d04f53ba087fbde7b'] = 'Aggiungi template e riutilizzali sul tuo sito web. Esportali e importali facilmente in qualsiasi altro progetto, per un flusso di lavoro ottimizzato.'; // Add templates and reuse them across your website. Easily export and import them to any other project, for an optimized workflow. +$_MODULE['<{creativeelements}prestashop>_70bb931768a57accd63e7496c25dfd18'] = 'Crea il tuo primo %s'; // Create Your First %s +$_MODULE['<{creativeelements}prestashop>_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Tutti'; // All +$_MODULE['<{creativeelements}prestashop>template_library_b9390195ecad3986568746a2a9b56354'] = 'I miei template'; // My Templates +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Categoria'; // Category +$_MODULE['<{creativeelements}prestashop>_284716247b12b363fd6b6a71bff0918e'] = 'Più azioni'; // More actions +$_MODULE['<{creativeelements}prestashop>_10e2fab434f7952f5e61211f6445032a'] = 'Cerca template:'; // Search Templates: +$_MODULE['<{creativeelements}prestashop>_453aceb005ceaf54a47da15fee8b2a26'] = 'Pagine'; // Pages +$_MODULE['<{creativeelements}prestashop>_04c4f9f595c4f21d1de65eb07056c15a'] = 'Blocchi'; // Blocks +$_MODULE['<{creativeelements}prestashop>_971fd8cc345d8bd9f92e9f7d88fdf20c'] = 'Dinamico'; // Dynamic +$_MODULE['<{creativeelements}prestashop>_9421c4ccec3719a5d299f1b02862412f'] = 'URL Contatto'; // Contact URL +$_MODULE['<{creativeelements}prestashop>_9a99c312fda8b07dbdd8ac72dc0773f8'] = 'Data corrente'; // Current Date Time +$_MODULE['<{creativeelements}prestashop>_4001353741fc405c5786493d252a3991'] = 'URL interno'; // Internal URL +$_MODULE['<{creativeelements}prestashop>_e68c1ad1f675e02452d7f79969b9708e'] = 'Titolo Pagina'; // Page Title +$_MODULE['<{creativeelements}prestashop>_ca341887d434838f3252e2d73f787680'] = 'Richiedi il parametro'; // Request Parameter +$_MODULE['<{creativeelements}prestashop>_781ee6c523f73dae7044617f7cac3941'] = 'Contatto del negozio'; // Shop Contact +$_MODULE['<{creativeelements}prestashop>_5a43012799d4303730f0c9c32a41b0fd'] = 'URL del negozio'; // Shop URL +$_MODULE['<{creativeelements}prestashop>_04e0602d4335e2144468e51e5c424590'] = 'Regola carrello'; // Cart Rule +$_MODULE['<{creativeelements}prestashop>_4695483802b27812a65749cccd212b17'] = 'Nome categoria'; // Category Name +$_MODULE['<{creativeelements}prestashop>_9bb87066bdb5b0307d442bd9d1552632'] = 'URL categoria'; // Category URL +$_MODULE['<{creativeelements}prestashop>_4232c2deb6ff317abf49721680bd818a'] = 'Nome marca'; // Brand Name +$_MODULE['<{creativeelements}prestashop>_cad080cee7f847c07d0a0061b2f5f771'] = 'URL del marchio'; // Brand URL +$_MODULE['<{creativeelements}prestashop>_8973510d727af4f8c2ba6c1c84d0b718'] = 'URL del prodotto'; // Product URL +$_MODULE['<{creativeelements}prestashop>_e21f91c630214ac206a785cccd853154'] = 'Regola prezzi catalogo'; // Catalog Price Rule + +$_MODULE['<{creativeelements}prestashop>_b1da34ea28921a8fac7d5f1273327229'] = 'Successivo'; // Next +$_MODULE['<{creativeelements}prestashop>_033658cb7158c3f36bf7cf9c0f44fcde'] = 'Precedente'; // Previous +$_MODULE['<{creativeelements}prestashop>_eab23bbc21bd1fbd1207247a9864592b'] = 'Play'; // Play +$_MODULE['<{creativeelements}prestashop>_74322cb2d5a81d5daa8556673f478d7c'] = 'Pausa'; // Pause +$_MODULE['<{creativeelements}prestashop>_f582dc21d5a9ffb1bbfadf74318bc5a6'] = 'Selettore'; // Selector +$_MODULE['<{creativeelements}prestashop>_2c7d98f10667515c7b00403e2b3ff9a5'] = 'Tel'; // Tel +$_MODULE['<{creativeelements}prestashop>_83dff142c5bc22f9147bc823a52e2b4f'] = 'SMS'; // SMS +$_MODULE['<{creativeelements}prestashop>_56ad595875f55ad4163c2783f11fa964'] = 'Calendario Google'; // Google Calendar +$_MODULE['<{creativeelements}prestashop>_2f4523c3fec77710fbefd831cc1b893b'] = 'Calendario Outlook'; // Outlook Calendar +$_MODULE['<{creativeelements}prestashop>_a63a2923058723e763c1e82c75988f5c'] = 'Calendario Yahoo'; // Yahoo Calendar +$_MODULE['<{creativeelements}prestashop>_251a780878152bc8ea7c44050a46f6a0'] = 'Oggetto'; // Subject +$_MODULE['<{creativeelements}prestashop>_7f86db886a07a996fe3378fcbecc8041'] = 'Messaggio'; // Message +$_MODULE['<{creativeelements}prestashop>_b6bda532a7e8a7ea0a75069f35ae864f'] = 'Nome utente'; // Username +$_MODULE['<{creativeelements}prestashop>_d93abbcc3d3ff28056c410d12757aa0a'] = 'Formato Data'; // Date Format +$_MODULE['<{creativeelements}prestashop>_c0740f55b6724b631052066baddbf7b0'] = 'Formato ora'; // Time Format +$_MODULE['<{creativeelements}prestashop>_1b4a75284a56a339d132e59456d27e3a'] = 'Formato personalizzato'; // Custom Format +$_MODULE['<{creativeelements}prestashop>_169920a350e7960154dcdc875dafc8df'] = 'Documentazione sulla formattazione di data e ora'; // Documentation on date and time formatting +$_MODULE['<{creativeelements}prestashop>_df9a7c88f7bf07e724b934716cc790f4'] = 'Cerca & Seleziona'; // Search & Select +$_MODULE['<{creativeelements}prestashop>_363507878ffebd26d035aa7ba2093f35'] = 'Tipo Nome del prodotto / Rif.'; // Type Product Name / Ref +$_MODULE['<{creativeelements}prestashop>_a9c548584e357eca69a0f96e8295e524'] = 'Nome parametro'; // Parameter Name +$_MODULE['<{creativeelements}prestashop>_6ba425ac509bdf319cbb43aae65ee954'] = 'Campo'; // Field +$_MODULE['<{creativeelements}prestashop>_45e41f822b049adbf2eedb23cb170188'] = 'Azienda'; // Company +$_MODULE['<{creativeelements}prestashop>_4984ae7378622cd416b9aced4cdc7612'] = 'Indirizzo'; // Address +$_MODULE['<{creativeelements}prestashop>_a4c7dc56186aaf14cb52b6ad6e320d91'] = 'ID'; // ID +$_MODULE['<{creativeelements}prestashop>_882136c04720783972d2ba15cabb2533'] = 'Visualizza Nome'; // Display Name +$_MODULE['<{creativeelements}prestashop>_719c34f35eef4e53e7a8060f4ac1f5b0'] = 'Compleanno'; // Birthday +$_MODULE['<{creativeelements}prestashop>_cf8495c5e163a5edd0c194a344fa0458'] = 'Sito Web'; // Website +$_MODULE['<{creativeelements}prestashop>_369ee98b6cc4c2ac77e0c4ed5665a33a'] = 'Da'; // From +$_MODULE['<{creativeelements}prestashop>_a2933e922ff8e0247d44938b93e5bb6a'] = 'A'; // To +$_MODULE['<{creativeelements}prestashop>_ef69cf49bb993edf5f654dd21ff63f2a'] = 'Valuta'; // Currency +$_MODULE['<{creativeelements}prestashop>_0cac3b5a1b412862847fce41fc8978fe'] = 'Importo del prezzo'; // Price Amount +$_MODULE['<{creativeelements}prestashop>_71bd0d3f32c2c668811a52eedc3ee8fc'] = 'Prezzo Intero'; // Price Integer +$_MODULE['<{creativeelements}prestashop>_c504cce3f32c095020e882875cb77d45'] = 'Decimali di prezzo'; // Price Decimals +$_MODULE['<{creativeelements}prestashop>_d456e04d06b851d54f7dd7782cd7f5a2'] = 'Importo regolare'; // Regular Amount +$_MODULE['<{creativeelements}prestashop>_c3091d709b8b46ce1c89b9d2d7f3f3e1'] = 'Prezzo unitario'; // Unit Price + +$_MODULE['<{creativeelements}prestashop>_d9c0bd850f0d755afe4a2f87790926bc'] = 'Questo tag non ha impostazioni.'; // This tag has no settings. +$_MODULE['<{creativeelements}prestashop>border_control_a5d7f2d1b78f9222563004a41a616334'] = 'Scanalatura'; // Groove +$_MODULE['<{creativeelements}prestashop>_db71f6e371eb7124134284e029343fbb'] = '%s Impostazioni'; // %s Settings +$_MODULE['<{creativeelements}prestashop>_c9344eb2ff26e96823cc252a90f77de8'] = 'Immagine in evidenza'; // Featured Image +$_MODULE['<{creativeelements}prestashop>_442444e4a8a066e42bd056d71c649288'] = 'Stile Body'; // Body Style +$_MODULE['<{creativeelements}prestashop>_0945359809dad1fbf3dea1c95a0da951'] = 'Documento'; // Document +$_MODULE['<{creativeelements}prestashop>_a130ecd03d333805829b11f98cc9c0f9'] = 'Azione non trovata.'; // Action not found. +$_MODULE['<{creativeelements}prestashop>_da900198c1a7d78f57e400a23733c8bd'] = 'Articolo non trovato.'; // Post not found. +$_MODULE['<{creativeelements}prestashop>_8a7e7afe17d1c9c4258d5f80e7b7d224'] = 'Token scaduto.'; // Token Expired. +$_MODULE['<{creativeelements}prestashop>_b377dbdf3aeb55f9443947236db71ab3'] = 'Imposta il numero di slide che scorrono allo scorrimento.'; // Set how many slides are scrolled per swipe. +$_MODULE['<{creativeelements}prestashop>_6cd988821d5e8796c47a32e453c95633'] = 'Nota: L’attaccamento fisso lavora solo sui desktop.'; // Note: Attachment Fixed works only on desktop. +$_MODULE['<{creativeelements}prestashop>_b1fce7d76fc2b85bb2203bed78d8514c'] = 'Google Early Access'; // Google Early Access +$_MODULE['<{creativeelements}prestashop>_b3ea5d4962bbcb423b6e3693d7a1ea9f'] = 'Errore sconosciuto'; // Unknown Error +$_MODULE['<{creativeelements}prestashop>_ce71ffa436bfbe5fd6e1f8af2a0671eb'] = 'Il salvataggio è stato disabilitato finché non ti sei riconnesso.'; // Saving has been disabled until you’re reconnected. +$_MODULE['<{creativeelements}prestashop>_dd9742741ad6a068ce129e4fa97aa294'] = 'Errore del server'; // Server Error +$_MODULE['<{creativeelements}prestashop>_89b5fd445acdad16cd2ee39330fd90bd'] = 'Connessione persa'; // Connection Lost +$_MODULE['<{creativeelements}prestashop>_9d38dcdc957310dcaab2eda11f46c1f8'] = 'Esiste un salvataggio automatico di questo post più recente rispetto alla versione di seguito. È possibile ripristinare i dati salvati dal pannello Revisioni'; // There is an autosave of this post that is more recent than the version below. You can restore the saved data fron the Revisions panel +$_MODULE['<{creativeelements}prestashop>_c81c48c260d8fe33746bb88a06a31b40'] = 'Ripristina i dati salvati automaticamente'; // Restore Auto Saved Data +$_MODULE['<{creativeelements}prestashop>_2bd339d85ee3b33e513359ce781b60cc'] = 'Ripristina'; // Restore +$_MODULE['<{creativeelements}prestashop>_5b008951213ac933cab550ae80b43529'] = 'Versione corrente'; // Current Version +$_MODULE['<{creativeelements}prestashop>_95d126b737c78e8f8a4e00c0e0170c3a'] = 'Modifica Pubblicato'; // Edit Published +$_MODULE['<{creativeelements}prestashop>_9b97514a6cb123cccf70b60ae40f9c92'] = 'Modifica Bozza'; // Edit Draft +$_MODULE['<{creativeelements}prestashop>_94c7a492c400660d0ce730ceea7778a9'] = 'Quando attivi la modalità di privacy, YouTube non memorizzerà le informazioni sui visitatori sul tuo sito web a meno che non riproducano il video.'; // When you turn on privacy mode, YouTube won't store information about visitors on your website unless they play the video. +$_MODULE['<{creativeelements}prestashop>_b8a6d142349b07242bf3d2ec60016c41'] = 'Modalità Privacy'; // Privacy Mode +$_MODULE['<{creativeelements}prestashop>_cbdfcfddce72f99e436eca187f00b290'] = 'Inserisci il tuo shortcode'; // Enter your shortcode +$_MODULE['<{creativeelements}prestashop>_b70b756df7f18d4fee17dd1d38bcc135'] = 'Inserisci didascalia dell’immagine'; // Enter your image caption +$_MODULE['<{creativeelements}prestashop>_16f6c60cf0b840982bc1f595ac1641cb'] = 'Inserisci il tuo codice'; // Enter your code +$_MODULE['<{creativeelements}prestashop>_2fcd87fc57c33e7fb8a1df657776f274'] = 'Aggiungi qui il testo dell’intestazione'; // Add Your Heading Text Here +$_MODULE['<{creativeelements}prestashop>_1909e5c12b63e80afbedfe3a4f5c3363'] = 'Rimuovi avviso'; // Dismiss alert +$_MODULE['<{creativeelements}prestashop>_960fa36947fbb569380aba693b494feb'] = 'Inserisci la tua descrizione'; // Enter your description +$_MODULE['<{creativeelements}prestashop>_92fb9e9788b3d8cad885c5fe16343c75'] = 'Questo è un avviso'; // This is an Alert +$_MODULE['<{creativeelements}prestashop>_cdbf49d6ac280f03cc7d24714bc42a4e'] = 'Icona attiva'; // Active Icon +$_MODULE['<{creativeelements}prestashop>_f0a0314cf8e7c3ad6d977d5adacfeb0d'] = 'Ultima modifica su %1$s da %2$s'; // Last edited on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>_4fccea1707d00bf8926ebf0897e4a325'] = 'Bozza salvata su %1$s da %2$s'; // Draft saved on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>revision_date_format_b29ef0e5dad2e3b86cfa343482ce8e9c'] = 'M j, H:i'; // M j, H:i +$_MODULE['<{creativeelements}prestashop>_c8a59e7135a20b362f9c768b09454fdb'] = 'Ignora'; // Dismiss +$_MODULE['<{creativeelements}prestashop>_c829769966db94e5478e39391b995ac5'] = 'Visualizza tutte le revisioni'; // View All Revisions +$_MODULE['<{creativeelements}prestashop>_70d4a329d37dc2df41466a420e983966'] = 'Dare un’occhiata'; // Have a look +$_MODULE['<{creativeelements}prestashop>_2199472d685d3b90df180760ea665a71'] = 'Continua a Modificare'; // Keep Editing +$_MODULE['<{creativeelements}prestashop>_b1b95b84202450b35fd7afb914031d55'] = 'Questa è solo una bozza. Gioca e quando hai finito - fai clic su aggiorna.'; // This is just a draft. Play around and when you're done - click update. +$_MODULE['<{creativeelements}prestashop>_57986647011dee008f9d492989a90fb1'] = 'Evviva! %s è pubblicato.'; // Hurray! Your %s is live. +$_MODULE['<{creativeelements}prestashop>_a4d3b161ce1309df1c4e25df28694b7b'] = 'Invia'; // Submit +$_MODULE['<{creativeelements}prestashop>_06933067aafd48425d67bcb01bba5cb6'] = 'Aggiorna'; // Update +$_MODULE['<{creativeelements}prestashop>_9b9d8a976b42e0bd66381797644943d5'] = 'Pubblicato'; // Published +$_MODULE['<{creativeelements}prestashop>_010f371ad222d36015d7ab70f3256160'] = 'Procedere Comunque'; // Proceed Anyway +$_MODULE['<{creativeelements}prestashop>_1a7acf9e1a4485f55a6d75bcc40655e3'] = 'Il tuo browser non è compatibile con tutte le funzionalità di modifica di CreativeElements. Ti consigliamo di passare a un altro browser come Chrome o Firefox.'; // Your browser isn't compatible with all of Creative Elements' editing features. We recommend you switch to another browser like Chrome or Firefox. +$_MODULE['<{creativeelements}prestashop>_0c6f349a95f4864d65730cad900e3551'] = 'Il tuo browser non è compatibile'; // Your browser isn't compatible +$_MODULE['<{creativeelements}prestashop>_c12f59e844e6d839ba6ee4cd26e8ea27'] = 'Nessun risultato trovato'; // No Results Found +$_MODULE['<{creativeelements}prestashop>_f12a625ade1d1349f8d760c137d2e4b8'] = 'Assicurati che la tua ricerca sia stata digitata correttamente o prova con parole diverse.'; // Please make sure your search is spelled correctly or try a different words. +$_MODULE['<{creativeelements}prestashop>_f44c3ec59688f8173b34c08b1ad961b2'] = 'Nessun template preferito'; // No Favorite Templates +$_MODULE['<{creativeelements}prestashop>_081a48a2a1f0eee4b209bcdaf54803c0'] = 'È possibile contrassegnare qualsiasi modello pre-progettato come preferito.'; // You can mark any pre-designed template as a favorite. +$_MODULE['<{creativeelements}prestashop>_fb4fb9b2615dddca1a6cda5ecdfb47c0'] = 'Importa Impostazioni Documento'; // Import Document Settings +$_MODULE['<{creativeelements}prestashop>_6083cfeb84f702b582e655b5f4168579'] = 'Mostra Pannello'; // Show Panel +$_MODULE['<{creativeelements}prestashop>_b95d3d403307efa40962df363734e941'] = 'Impostazioni del modulo'; // Module Settings +$_MODULE['<{creativeelements}prestashop>_1aa14e9f377b528b5537d70fbd35c6a2'] = 'Seleziona File'; // Select File +$_MODULE['<{creativeelements}prestashop>_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'o'; // or +$_MODULE['<{creativeelements}prestashop>_1a10f6476e54db68548305a69fdcec09'] = 'Trascina e rilascia il file .JSON o .zip'; // Drag & drop your .JSON or .zip template file +$_MODULE['<{creativeelements}prestashop>_4a66d51c9716349085fc7ea77edfe5c5'] = 'Importa il template nella tua libreria'; // Import Template to Your Library +$_MODULE['<{creativeelements}prestashop>_936ccdb97115e9f35a11d35e3d5b5cad'] = 'Fai clic qui'; // Click here +$_MODULE['<{creativeelements}prestashop>_89ba5a0cd9537dd0cd44a3ece29b877a'] = 'Vuoi saperne di più sulla libreria Creative Elements?'; // Want to learn more about the Elementor library? +$_MODULE['<{creativeelements}prestashop>_01165dcf77c191e6c69b31d98b0ec6ff'] = 'Preferito'; // Favorite +$_MODULE['<{creativeelements}prestashop>_52fc7a0ab6328f8aaabb6ef411816b9e'] = 'Data di creazione'; // Creation Date +$_MODULE['<{creativeelements}prestashop>_7b1255f8fdd0cb8751baee55621164e1'] = 'Creato da'; // Created By +$_MODULE['<{creativeelements}prestashop>_13348442cc6a27032d2b4aa28b75a5d3'] = 'Cerca'; // Search +$_MODULE['<{creativeelements}prestashop>_f2c3119ccf960f54688bf6f227390e36'] = 'I miei preferiti'; // My Favorites +$_MODULE['<{creativeelements}prestashop>_2cc1943d4c0b46bfcf503a75c44f988b'] = 'Popolare'; // Popular +$_MODULE['<{creativeelements}prestashop>_349d789f5d11f630c282f547b568d08d'] = 'Tendenza'; // Trend +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Nuovo'; // New +$_MODULE['<{creativeelements}prestashop>_a0415b5ba0373565c33828715bba8c8d'] = 'Importa template'; // Import Template +$_MODULE['<{creativeelements}prestashop>_1063e38cb53d94d386f21227fcd84717'] = 'Rimuovi'; // Remove +$_MODULE['<{creativeelements}prestashop>_ed75712b0eb1913c28a3872731ffd48d'] = 'Duplica'; // Duplicate +$_MODULE['<{creativeelements}prestashop>_9c4d6fcf53fc6c3ad770fed0e57ccc49'] = 'Trascina e Rilascia'; // Drag & Drop +$_MODULE['<{creativeelements}prestashop>_bf16d61e5b485458fa158bfb5584befc'] = 'Nascondi pannello'; // Hide Panel +$_MODULE['<{creativeelements}prestashop>_0bec922eda645e0ac505d942505b9be9'] = 'Salva come template'; // Save as Template +$_MODULE['<{creativeelements}prestashop>_5778e182c50cbba1d86e14690c8aa35c'] = 'Salva bozza'; // Save Draft +$_MODULE['<{creativeelements}prestashop>_23183cd144a4dcc5a599a4b6506f7154'] = 'Salva opzioni'; // Save Options +$_MODULE['<{creativeelements}prestashop>_110a4b01beabd53b661a47d4b44bd7a8'] = 'Pubblica'; // Publish +$_MODULE['<{creativeelements}prestashop>_b2e886db4593c5ddc8e369f34d3744f3'] = 'Anteprima modifiche'; // Preview Changes +$_MODULE['<{creativeelements}prestashop>_82815a6312a1e5a2ffafff6f1734df30'] = 'Torna al Back-office'; // Exit to Back-office +$_MODULE['<{creativeelements}prestashop>_4bda311edbaa9e54025c057c6c102fba'] = 'Cerca widget:'; // Search Widget: +$_MODULE['<{creativeelements}prestashop>_b0d066425fa39974fe45240b33bbfacb'] = 'Torna al predefinito'; // Back to default +$_MODULE['<{creativeelements}prestashop>typography_control_46e52f6310c224aa5846b3a5a5b1c6fe'] = 'Linea in mezzo'; // Line Through +$_MODULE['<{creativeelements}prestashop>typography_control_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Sopralineato'; // Overline +$_MODULE['<{creativeelements}prestashop>typography_control_852721aa5fc738dfedff2945d71da439'] = 'Sottolineatura'; // Underline +$_MODULE['<{creativeelements}prestashop>typography_control_24365794120e03b807acbd05c0a48db9'] = 'Decorazione'; // Decoration +$_MODULE['<{creativeelements}prestashop>_ff0a58d7006cd437862608b39e9cc7fe'] = 'Valori non collegati'; // Unlinked values +$_MODULE['<{creativeelements}prestashop>_6ca8bf4766b9dc7b1ea8b69562faac3f'] = 'Riassunto'; // Excerpt +$_MODULE['<{creativeelements}prestashop>_652122103181aa2752efaecab300edf0'] = 'Accesso negato.'; // Access denied. +$_MODULE['<{creativeelements}prestashop>_87557f11575c0ad78e4e28abedc13b6e'] = 'Fine'; // End +$_MODULE['<{creativeelements}prestashop>_a6122a65eaa676f700ae68d393054a37'] = 'Inizio'; // Start +$_MODULE['<{creativeelements}prestashop>_cf85e0aa6dbff8e1237bc70f6a1da1b2'] = 'Digita qui'; // Type Here +$_MODULE['<{creativeelements}prestashop>_289e1087105787353c5bae37c7982aa8'] = 'Ricarica la pagina'; // Reload Page +$_MODULE['<{creativeelements}prestashop>_f9636eccbb10d99e4aabfefe4ebfe479'] = 'La tua sessione è scaduta. Ricarica la pagina per continuare le modifiche.'; // Your session has expired. Please reload the page to continue editing. +$_MODULE['<{creativeelements}prestashop>_c85a251cc457840f1e032f1b733e9398'] = 'Tempo scaduto'; // Timeout +$_MODULE['<{creativeelements}prestashop>_57b4c0031bc5c78e49d0a7e568115ff1'] = 'Si è verificato qualcosa di sbagliato. Fai clic su "Maggiori dettagli" e segui le indicazioni per risolvere il problema rapidamente.'; // We're sorry, but something went wrong. Click on 'Learn more' and follow each of the steps to quickly solve it. +$_MODULE['<{creativeelements}prestashop>_fab4cde10ae2ec07bdee32a6749a3e7c'] = 'L’anteprima non può essere caricata'; // The preview could not be loaded +$_MODULE['<{creativeelements}prestashop>_26342c8741f7cf60f979e91ad570b291'] = 'Colori predefiniti'; // Default Colors +$_MODULE['<{creativeelements}prestashop>_b2f5eb6ce3e6e97e89ec594c52ba48c1'] = 'Valore sconosciuto'; // Unknown Value +$_MODULE['<{creativeelements}prestashop>_351683969bd504e253fb05ef9b542bc8'] = 'Mentre stai lavorando adesso puoi anche usare le funzioni ripeti / annulla delle azioni che fai nell’editor.'; // Once you start working, you'll be able to redo / undo any action you make in the editor. +$_MODULE['<{creativeelements}prestashop>_abb565ed2df80ae405ca35167910924d'] = 'Cronologia non disponibile'; // No History Yet +$_MODULE['<{creativeelements}prestashop>_8d7eb55a18265b4dc59ea4f896e7c1ed'] = 'Passa alla scheda Revisioni per le versioni precedenti'; // Switch to Revisions tab for older versions +$_MODULE['<{creativeelements}prestashop>_fd88b11cfde6aa5e3c7ff0553b534885'] = 'Revisioni'; // Revisions +$_MODULE['<{creativeelements}prestashop>_06df33001c1d7187fdd81ea1f5b277aa'] = 'Azioni'; // Actions +$_MODULE['<{creativeelements}prestashop>_95bfdefaaf01553cbf21ccd942855c69'] = 'Spostato'; // Moved +$_MODULE['<{creativeelements}prestashop>_f29ddbfb905eb2593fdcdfb243f9af85'] = 'Aggiunto'; // Added +$_MODULE['<{creativeelements}prestashop>_5b6cf869265c13af8566f192b4ab3d2a'] = 'Documentazione'; // Documentation +$_MODULE['<{creativeelements}prestashop>_16d2b386b2034b9488996466aaae0b57'] = 'Cronologia'; // History +$_MODULE['<{creativeelements}prestashop>_bf59b07aded13165bea058e8f636a308'] = 'Colore della UI al passaggio del mouse'; // UI Hover Color +$_MODULE['<{creativeelements}prestashop>_ead9ed73aace2253b77e3455b2105ea3'] = 'Colore UI'; // UI Color +$_MODULE['<{creativeelements}prestashop>_67ed6ddb7d890b23166c1bef771e9451'] = 'Modificato'; // Edited +$_MODULE['<{creativeelements}prestashop>_01a94df3c831063bf2b04d9c09e2b972'] = 'Modifica Iniziata'; // Editing Started +$_MODULE['<{creativeelements}prestashop>text_shadow_control_3f39588bb19e28051d9aedfbb170025c'] = 'Ombra'; // Shadow +$_MODULE['<{creativeelements}prestashop>_00cd7be4cb21c59179316d7844a8cfc4'] = 'Silenzioso'; // Mute +$_MODULE['<{creativeelements}prestashop>_03ea6664bd8bb744fadc253f84bf32d5'] = 'Scegli un file modello JSON o un archivio .zip di modelli e aggiungili alla lista dei template disponibili nella tua libreria.'; // Choose a JSON template file or a .zip archive of templates, and add them to the list of templates available in your library. +$_MODULE['<{creativeelements}prestashop>text_shadow_control_86e470e0e13bcfec3b2e102c167fe223'] = 'Ombra del Testo'; // Text Shadow +$_MODULE['<{creativeelements}prestashop>_a889e4cafb176aebf2d32a9037cbb227'] = 'Abilita nell’Editor'; // Enable In Editor +$_MODULE['<{creativeelements}prestashop>_a97cc615f64c36e0f7cb6ea6e94c948d'] = 'Apri tutti i collegamenti delle immagini in una finestra popup con lightbox. Il lightbox a questo punto si aprirà ogni qualvolta che un collegamento conduce ad una immagine.'; // Open all image links in a lightbox popup window. The lightbox will automatically work on any link that leads to an image file. +$_MODULE['<{creativeelements}prestashop>_060e9cb662a63ad93391971af1ced41e'] = 'Lightbox Immagine'; // Image Lightbox +$_MODULE['<{creativeelements}prestashop>_9a51a007b33a46e553def6423aad8648'] = 'Impostazioni generali'; // Global Settings +$_MODULE['<{creativeelements}prestashop>_d727e004d42165085a9b12a006cf31fc'] = 'Imposta la spaziatura predefinita tra i widget (Predefinito: 20)'; // Sets the default space between widgets (Default: 20) +$_MODULE['<{creativeelements}prestashop>_83473b478b2b3b5ece5200f5f60cb055'] = 'Ritardo Animazione'; // Animation Delay +$_MODULE['<{creativeelements}prestashop>_c626b471f89bc0c52d34a3a3f7df35c5'] = 'Z-Index'; // Z-Index +$_MODULE['<{creativeelements}prestashop>_a585b417342e2b83baa9e0c91631b635'] = 'Durata della transizione'; // Transition Duration +$_MODULE['<{creativeelements}prestashop>_155731c389e7798846fc9daeb3d4872a'] = 'Ritardo della transizione'; // Transition Delay +$_MODULE['<{creativeelements}prestashop>_f5b67dd021f56100a6ea99169a67bf5e'] = 'Spaziatura widget'; // Widgets Space +$_MODULE['<{creativeelements}prestashop>_b95c09fb28e80cc672fd533a62252d70'] = 'Aggiungi %s'; // Add %s +$_MODULE['<{creativeelements}prestashop>_b289b32a5fe99e0c7e9369e56f19700d'] = 'Attenzione: l’importazione potrebbe ignorare le impostazioni precedenti.'; // Attention: Importing may override previous settings. +$_MODULE['<{creativeelements}prestashop>_b3f82cf76f55546dc898d561c847b5d9'] = 'Vuoi anche importare le impostazioni del documento del template?'; // Do you want to also import the document settings of the template? +$_MODULE['<{creativeelements}prestashop>_ebbb5896554d13cc4f2e46a9e44eb51e'] = 'Aggiungi nofollow'; // Add nofollow +$_MODULE['<{creativeelements}prestashop>_2959ce8aed67d6b6e6f5cefd601f1091'] = 'Apri in nuova finestra'; // Open in new window +$_MODULE['<{creativeelements}prestashop>_0fb7010ec16c91ec543a440daab8917b'] = 'Opzioni link'; // Link Options +$_MODULE['<{creativeelements}prestashop>box_shadow_control_606b51cc1c9d0b4af394419a22f2ff1f'] = 'Contorno'; // Outline +$_MODULE['<{creativeelements}prestashop>box_shadow_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Posizione'; // Position +$_MODULE['<{creativeelements}prestashop>_7dfa8bf72c98a7c1927d689cdbc49ce1'] = 'Modifica %s'; // Edit %s +$_MODULE['<{creativeelements}prestashop>_39a33ab3ae10c15b5c60328b23512713'] = 'Rimuovi %s'; // Remove %s +$_MODULE['<{creativeelements}prestashop>_60b3911c3a666b23f2579c62a6416542'] = 'Duplica %s'; // Duplicate %s +$_MODULE['<{creativeelements}prestashop>_6ed562a0d4381eef12d92c87520f3208'] = 'Widget'; // Widget +$_MODULE['<{creativeelements}prestashop>_ec53a8c4f07baed5d8825072c89799be'] = 'Stato'; // Status +$_MODULE['<{creativeelements}prestashop>_d511f8439ecde36647437fbba67a4394'] = 'Spazio'; // Space +$_MODULE['<{creativeelements}prestashop>_cc74161b4d0042cb69688fc031335b36'] = 'Capolettera'; // Drop Cap +$_MODULE['<{creativeelements}prestashop>_91ba387c0204e8d0bdfa4e589f850606'] = 'Selettore del titolo della pagina'; // Page Title Selector +$_MODULE['<{creativeelements}prestashop>_c39aca79ca3cc4558a313f65528a47a7'] = 'Incolla Stile'; // Paste Style +$_MODULE['<{creativeelements}prestashop>_278c491bdd8a53618c149c4ac790da34'] = 'Template'; // Template +$_MODULE['<{creativeelements}prestashop>_4dcd94eeeaad2b446cdea3c97f67c974'] = 'Non funziona? Puoi inserire un selettore differente per il titolo in Impostazioni pagina..'; // Not working? You can set a different selector for the title in the Settings page. +$_MODULE['<{creativeelements}prestashop>_d38fd78cc216991579c255174909bd73'] = 'Nascondi il titolo'; // Hide Title +$_MODULE['<{creativeelements}prestashop>_7e5d6ab43f675667c7109ecd0ea8dabf'] = 'Sposta in avanti'; // Bring to Front +$_MODULE['<{creativeelements}prestashop>_ee08ead15605dc63a2ad3357d04f5838'] = 'Lightbox'; // Lightbox +$_MODULE['<{creativeelements}prestashop>_5a2cafc2b0fdf3e5242d40a878db7129'] = 'Spazio intermedio'; // Space Between +$_MODULE['<{creativeelements}prestashop>_4ee29ca12c7d126654bd0e5275de6135'] = 'Elenco'; // List +$_MODULE['<{creativeelements}prestashop>shapes_2b1f94ef23b79bf90eb891cae1df7a90'] = 'A libro'; // Book +$_MODULE['<{creativeelements}prestashop>shapes_8a9e64d86ed12ad40de129bc7f4683b2'] = 'A metà'; // Split +$_MODULE['<{creativeelements}prestashop>shapes_0f4e1aaabd074689b7d3ead824d1ee8e'] = 'Freccia'; // Arrow +$_MODULE['<{creativeelements}prestashop>shapes_2c7642ce7af68f37ad5f82153ec30f2b'] = 'Onde variabili'; // Waves Pattern +$_MODULE['<{creativeelements}prestashop>shapes_a609a9143e96c90080bddddb3305284f'] = 'Pennellate'; // Waves Brush +$_MODULE['<{creativeelements}prestashop>shapes_a4b44939aabfe8df39b1ecf05fa95c0a'] = 'Onde'; // Waves +$_MODULE['<{creativeelements}prestashop>shapes_62d331ed3fa84befe1b7b3a45fe3c630'] = 'Curva asimmetrica'; // Curve Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_2cb4d4a3f8dacd623fa045a44febd476'] = 'Curva'; // Curve +$_MODULE['<{creativeelements}prestashop>shapes_8af1e1ff4512e7d258e9b8ea8e9b48ef'] = 'Ventaglio sfumato'; // Fan Opacity +$_MODULE['<{creativeelements}prestashop>shapes_253761d8ff1b6655697cb0d9962d2537'] = 'Diagonali sfumate'; // Tilt Opacity +$_MODULE['<{creativeelements}prestashop>shapes_686319a93c35facda5c3da08875fb394'] = 'Diagonale'; // Tilt +$_MODULE['<{creativeelements}prestashop>shapes_bef629014564e9ece50fad279b2ab211'] = 'Triangolo asimmetrico'; // Triangle Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_5e5500cb2b82eb72d550de644bd1b64b'] = 'Triangolo'; // Triangle +$_MODULE['<{creativeelements}prestashop>shapes_ff8e3e7230eb6da5eb9df66861459010'] = 'Piramidi'; // Pyramids +$_MODULE['<{creativeelements}prestashop>shapes_4fae8be981bd327f1302f4b678afe734'] = 'Zigzag'; // Zigzag +$_MODULE['<{creativeelements}prestashop>shapes_4a8f72b777dc9735afaebac72822c77e'] = 'Nuvole'; // Clouds +$_MODULE['<{creativeelements}prestashop>shapes_08fb41620aa4c498a1f2ef09bbc1183c'] = 'Gocce'; // Drops +$_MODULE['<{creativeelements}prestashop>shapes_8e8c2adc91106422362ffd9b8b44e9a2'] = 'Montagne'; // Mountains +$_MODULE['<{creativeelements}prestashop>_9b8958acb7be504bb5f55f17c0eea366'] = 'Inverti'; // Invert +$_MODULE['<{creativeelements}prestashop>_9ffbd422925a6839ee820ddbc59278c5'] = 'Flip'; // Flip +$_MODULE['<{creativeelements}prestashop>_3dd971eb0a2385db4f30e71a456daf8a'] = 'Separatore sagomato'; // Shape Divider +$_MODULE['<{creativeelements}prestashop>_48686859ede3505d93db63bedafb649e'] = 'Nota: I seguenti colori non saranno utilizzabili se l’opzione Colori predefiniti è abilitato.'; // Note: The following colors won't work if Default Colors are enabled. +$_MODULE['<{creativeelements}prestashop>_7d11089c148e5d9b9e686b62454a491e'] = 'Larghezza della barra di navigazione'; // Navigation Width +$_MODULE['<{creativeelements}prestashop>_eee0168be69b854c20621fc6f01cc3fc'] = 'Hover'; // Hover +$_MODULE['<{creativeelements}prestashop>_d55b3ffa9fc8021e934158ca07e2770e'] = 'Aggiungi il tuo id personalizzato senza il simbolo cancelletto. Es.: il-mio-id'; // Add your custom id WITHOUT the Pound key. e.g: my-id +$_MODULE['<{creativeelements}prestashop>_7b366044b5cb5aad6cc2fabb977c8534'] = 'CSS ID'; // CSS ID +$_MODULE['<{creativeelements}prestashop>background_control_45f4ce6c3306644b1efe333f4f8d6929'] = 'Angolo'; // Angle +$_MODULE['<{creativeelements}prestashop>background_control_fdc32a55217f1ca054f1f2b51ef4f6ec'] = 'Radiale'; // Radial +$_MODULE['<{creativeelements}prestashop>background_control_32a843da6ea40ab3b17a3421ccdf671b'] = 'Lineare'; // Linear +$_MODULE['<{creativeelements}prestashop>background_control_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Tipo'; // Type +$_MODULE['<{creativeelements}prestashop>background_control_d9eb9d6792d85c5d2433902a63116ad5'] = 'Colore secondario'; // Second Color +$_MODULE['<{creativeelements}prestashop>background_control_ce5bf551379459c1c61d2a204061c455'] = 'Posizione'; // Location +$_MODULE['<{creativeelements}prestashop>background_control_5e59525cb7d1d1cd93be0b9f36e9d09a'] = 'Gradiente'; // Gradient +$_MODULE['<{creativeelements}prestashop>_512fec27328fb722291cf6ecf36fa913'] = 'Il ’da’ e ’a’ dell’URL devono essere diversi'; // The `from` and `to` URL's must be different +$_MODULE['<{creativeelements}prestashop>_d2b49c98219ccb89d57a87f2a0a4b4c2'] = 'Il ’da’ e ’a’ dell’URL devono essere degli URL validi'; // The `from` and `to` URL's must be valid URL's +$_MODULE['<{creativeelements}prestashop>_2b3a87fb1d58406bd4b58eeb2af2f23c'] = 'Non puoi eliminare questa revisione.'; // Cannot delete this revision. +$_MODULE['<{creativeelements}prestashop>_ee9d01da1e865af1b559fa7c8c047555'] = '%1$s fa (%2$s)'; // %1$s ago (%2$s) +$_MODULE['<{creativeelements}prestashop>revision_date_format_bd8abeec6fc85d0fa0846a78ef6554b8'] = 'M j @ H:i'; // M j @ H:i +$_MODULE['<{creativeelements}prestashop>_0cc5d0ddd0ea34a8490e6e7fdb2cf924'] = 'Salvataggio automatico'; // Autosave +$_MODULE['<{creativeelements}prestashop>_32c676ac5296556c0573a301ef5ab07b'] = 'Revisione'; // Revision +$_MODULE['<{creativeelements}prestashop>_3fb0206d178d45a9b3542587483d4cd2'] = 'Sembra che la funzione revisione del post non sia disponibile sul tuo sito Web.'; // It looks like the post revision feature is unavailable in your website. +$_MODULE['<{creativeelements}prestashop>_3c4f26f0975793eb27edab314f670410'] = 'Inizia a progettare la tua pagina e sarai in grado di vedere la cronologia completa delle tue revisioni qui.'; // Start designing your page and you'll be able to see the entire revision history here. +$_MODULE['<{creativeelements}prestashop>_b8c4a80d0eda1423acdda2bd6680be78'] = 'La cronologia delle revisioni consente di salvare le versioni precedenti del tuo lavoro e ripristinarli in qualsiasi momento.'; // Revision history lets you save your previous versions of your work, and restore them any time. +$_MODULE['<{creativeelements}prestashop>_53e5aa2c97fef1555d2511de8218c544'] = 'Da'; // By +$_MODULE['<{creativeelements}prestashop>_585823316b8534dcef7df30ebeab9951'] = 'Non è stata ancora salvata alcuna revisione'; // No Revisions Saved Yet +$_MODULE['<{creativeelements}prestashop>_cf82b977e27ef9ac33709a3effde83a2'] = 'Separatore di migliaia'; // Thousand Separator +$_MODULE['<{creativeelements}prestashop>background_control_7a1920d61156abc05a60135aefe8bc67'] = 'Predefinito'; // Default +$_MODULE['<{creativeelements}prestashop>_6579fbb112744c89b2c74f479df5f94b'] = 'Il CSS personalizzato ti permette di aggiungere del codice CSS a ciascun widget e vedere le modifiche direttamente nell’editor.'; // Custom CSS lets you add CSS code to any widget, and see it render live right in the editor. +$_MODULE['<{creativeelements}prestashop>_42e6feb7f76e910efcda54034ecc83ce'] = 'CSS personalizzato'; // Custom CSS +$_MODULE['<{creativeelements}prestashop>_525e4cfb0dd9f1b84d6018feff823cfe'] = 'Con questa funzionalità puoi salvare un widget come globale e poi aggiungerlo a molteplici aree. Tutte le aree saranno modificabili da un singolo posto.'; // With this feature, you can save a widget as global, then add it to multiple areas. All areas will be editable from one single place. +$_MODULE['<{creativeelements}prestashop>_d15305d7a4e34e02489c74a5ef542f36'] = 'Off'; // Off +$_MODULE['<{creativeelements}prestashop>_521c36a31c2762741cf0f8890cbe05e3'] = 'On'; // On +$_MODULE['<{creativeelements}prestashop>_5d4d8771b47d6c5166952822e552f082'] = 'Molto Grande'; // Extra Large +$_MODULE['<{creativeelements}prestashop>_581a3d012fd82e4905a9fe0db3b37bfe'] = 'Molto Piccolo'; // Extra Small +$_MODULE['<{creativeelements}prestashop>_52293f13937b8aed21da15967dad191a'] = 'Dati non validi: L’ID del template non può essere uguale al template che stai modificando. Devi sceglierne una diversa.'; // Invalid Data: The Template ID cannot be the same as the currently edited template. Please choose a different one. +$_MODULE['<{creativeelements}prestashop>_9313566fe19aca293daefe4ce37942bf'] = 'Pelle'; // Skin +$_MODULE['<{creativeelements}prestashop>_3c1065e0c6f9907043f41d333a91b80e'] = 'Scegli quali colori devono apparire nell’editor per l’utilizzo con il selettore dei colori. Questo ti consente di accedere più facilmente ai colori che hai scelto di usare nel sito.'; // Choose which colors appear in the editor's color picker. This makes accessing the colors you chose for the site much easier. +$_MODULE['<{creativeelements}prestashop>_280123f6890e1c72895353373d2caf09'] = 'Ordinamento decrescente'; // Descending order +$_MODULE['<{creativeelements}prestashop>_a4f0054ae4e726280b463caec716d1e9'] = 'Ordinamento crescente'; // Ascending order +$_MODULE['<{creativeelements}prestashop>_22f41f72bb164a942b3320ad48914c00'] = 'Attenzione: stiamo per eliminare tutti i contenuti da questa pagina. Sei sicuro di volerlo fare?'; // Attention: We are going to DELETE ALL CONTENT from this page. Are you sure you want to do that? +$_MODULE['<{creativeelements}prestashop>_e0ec11596b5e9fec2ae608c59800cebe'] = 'Elimina tutto il contenuto'; // Delete All Content +$_MODULE['<{creativeelements}prestashop>_7ffb0536a7eb8a1924bc8cddd5ebd992'] = '%s sono disabilitati'; // %s are disabled +$_MODULE['<{creativeelements}prestashop>_c6f6c095c286b1f7a30b3366e22ef17f'] = 'Aggiorna modifiche alla pagina'; // Update changes to page +$_MODULE['<{creativeelements}prestashop>_55fb1b11cc3dbb67782af12731c07206'] = 'Color Picker'; // Color Picker +$_MODULE['<{creativeelements}prestashop>_bad32986401d36fef61ae1ea7d8c6c4b'] = 'Immetti il selettore dell’elemento genitore al quale le sezioni allungate devono adattarsi (es. #primary / .wrapper / main ecc). Lasciare vuoto per adattarsi alla larghezza della pagina.'; // Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width. +$_MODULE['<{creativeelements}prestashop>_b844b7c80a87be2619f6876933b07aea'] = 'Adattare sezione allargata a'; // Stretched Section Fit To +$_MODULE['<{creativeelements}prestashop>_e1e75c2b4e63835910c8aee262af0d02'] = 'Imposta la larghezza predefinita dell’area del contenuto'; // Sets the default width of the content area (Default: 1140) +$_MODULE['<{creativeelements}prestashop>_b7b6baa53f2fedf6c3b60e0327c95a2f'] = 'Sezione a schede'; // Tabbed Section +$_MODULE['<{creativeelements}prestashop>_fbfd467e50aef807cbdabd58a86621d3'] = 'Barra delle schede'; // Tab Bar +$_MODULE['<{creativeelements}prestashop>_8c5751b7fdbcb82b348c2e5ad90b3183'] = 'Scorrimento di overflow'; // Overflow Scrolling +$_MODULE['<{creativeelements}prestashop>_7bafc2154ab2b900bbb572c80ba6c423'] = 'Estendi la sezione all’intera larghezza della pagina attraverso JS.'; // Stretch the section to the full width of the page using JS. +$_MODULE['<{creativeelements}prestashop>_442a913f95b8efa0a564f8acd5953752'] = 'Estendi la sezione'; // Stretch Section +$_MODULE['<{creativeelements}prestashop>_d87d1f34e54b9466c18bca47e34b0c37'] = 'Questa immagine di copertina sostituirà il video di sfondo su dispositivi mobile e tablet.'; // This cover image will replace the background video on mobile and tablet devices. +$_MODULE['<{creativeelements}prestashop>_7a007d6bcd82bb60a6d3e4d45dc61eb4'] = 'Inverti colonne'; // Reverse Columns +$_MODULE['<{creativeelements}prestashop>_87d17f4624a514e81dc7c8e016a7405c'] = 'Mobile'; // Mobile +$_MODULE['<{creativeelements}prestashop>_aba47e8f90c4d9395507038e9215582f'] = 'Anteprima predefinita'; // Default Preview +$_MODULE['<{creativeelements}prestashop>_bc30b765dbe7cfa8d8cfa4184af2c620'] = 'Collega insieme i valori'; // Link values together +$_MODULE['<{creativeelements}prestashop>_6feadb455c64759731e453380c52fbd9'] = 'Shortcode'; // Shortcode +$_MODULE['<{creativeelements}prestashop>_f8508f576cd3f742dfc268258dcdf0dd'] = 'Remoto'; // Remote +$_MODULE['<{creativeelements}prestashop>_b9709e1b50c06ed39df03fa0b90d40ab'] = 'Importa adesso'; // Import Now +$_MODULE['<{creativeelements}prestashop>_fcbad5f8e00955d4129fe79370802ff1'] = 'Importa template'; // Import Templates +$_MODULE['<{creativeelements}prestashop>_e153ba109d2d09abb855127d99ed6f25'] = 'Esporta template'; // Export Template +$_MODULE['<{creativeelements}prestashop>_2e46eab92bf73b409799a8baaa13f8f2'] = '(senza titolo)'; // (no title) +$_MODULE['<{creativeelements}prestashop>template_library_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Tipi'; // Type +$_MODULE['<{creativeelements}prestashop>template_library_c7ae4d8246472b41edae4e734cc323aa'] = 'Nessun template trovato nel cestino'; // No Templates found in Trash +$_MODULE['<{creativeelements}prestashop>template_library_6d9743b85d09a6bc07b10c70ef974687'] = 'Nessun template trovato'; // No Templates found +$_MODULE['<{creativeelements}prestashop>template_library_0e74beca97e711d51cf7a12165d583b7'] = 'Cerca template'; // Search Template +$_MODULE['<{creativeelements}prestashop>template_library_842adbd6cb91017b2ff5a1d89bd7c54f'] = 'Visualizza template'; // View Template +$_MODULE['<{creativeelements}prestashop>template_library_b9e1606876afab10e75fb80740c860a0'] = 'Tutti i template'; // All Templates +$_MODULE['<{creativeelements}prestashop>template_library_01c91564910069ffcc8f67ecb2180d38'] = 'Nuovo template'; // New Template +$_MODULE['<{creativeelements}prestashop>template_library_e838b63505c498050eccbcd6090a8262'] = 'Modifica template'; // Edit Template +$_MODULE['<{creativeelements}prestashop>template_library_5a6eb418df400f68052e7725cdc1170a'] = 'Nuovo template'; // Add New Template +$_MODULE['<{creativeelements}prestashop>template_library_de9ced9bf5e9829de4a93ad8c9d7a170'] = 'Nuovo'; // Add New +$_MODULE['<{creativeelements}prestashop>template_library_278c491bdd8a53618c149c4ac790da34'] = 'Template'; // Template +$_MODULE['<{creativeelements}prestashop>_509820290d57f333403f490dde7316f4'] = 'Locale'; // Local +$_MODULE['<{creativeelements}prestashop>_917d94376951e7a0fd3d30a655a12f2e'] = 'Sincronizza Libreria'; // Sync Library +$_MODULE['<{creativeelements}prestashop>_3da44b906269817f50ef58ea29f5f38d'] = 'Desideri eliminare questo template?'; // Are you sure you want to delete this template? +$_MODULE['<{creativeelements}prestashop>_12113ea41be8a8ac8ed3301094d4c007'] = 'Elimina template'; // Delete Template +$_MODULE['<{creativeelements}prestashop>_193cfc9be3b995831c6af2fea6650e60'] = 'Pagina'; // Page +$_MODULE['<{creativeelements}prestashop>_64c2250bbf2bc80767d781cd19bb82af'] = 'Salva %s nella Libreria'; // Save Your %s to Library +$_MODULE['<{creativeelements}prestashop>_db10a1ce6ae80065018ce639ce2b8989'] = 'Si è verificato il seguente errore durante il processo della richiesta:'; // The following error(s) occurred while processing the request: +$_MODULE['<{creativeelements}prestashop>_a25c753ee3e4be15ec0daa5a40deb7b8'] = 'Si è verificato un errore'; // An error occurred +$_MODULE['<{creativeelements}prestashop>_b10355bde8ffa109adfb72095166e87d'] = 'Qua troverai i tuoi template. Disegnali. Salvali. Riusali.'; // This is where your templates should be. Design it. Save it. Reuse it. +$_MODULE['<{creativeelements}prestashop>_9593b20ca67ef909af17be47183d93d2'] = 'Non hai ancora salvato il tuo template?'; // Haven’t Saved Templates Yet? +$_MODULE['<{creativeelements}prestashop>_ad07bae09061eb7eadc703f182e8c889'] = 'Immetti il nome del template'; // Enter Template Name +$_MODULE['<{creativeelements}prestashop>_d51fd6071c560eaade2f7f5b326bb472'] = 'I tuoi template saranno disponibili per l’esportazione e riutilizzabili in qualsiasi pagina o anche in altri siti web'; // Your designs will be available for export and reuse on any page or website +$_MODULE['<{creativeelements}prestashop>_0095a9fa74d1713e43e370a7d7846224'] = 'Esporta'; // Export +$_MODULE['<{creativeelements}prestashop>_3e30a35f9c0c80e76e91b32e7a59a41c'] = 'Resta in contatto! Molti altri splendidi template sono in arrivo prestissimo.'; // Stay tuned! More awesome templates coming real soon. +$_MODULE['<{creativeelements}prestashop>_b8b8e9f67faf0bb214c1686c52166ec4'] = 'Torna alla libreria'; // Back to Library +$_MODULE['<{creativeelements}prestashop>_a458be0f08b7e4ff3c0f633c100176c0'] = 'Inserisci'; // Insert +$_MODULE['<{creativeelements}prestashop>_b9390195ecad3986568746a2a9b56354'] = 'Template personalizzati'; // My Templates +$_MODULE['<{creativeelements}prestashop>_4d70254b3a8e2bc38b6147fa6ee813be'] = 'Libreria'; // Library +$_MODULE['<{creativeelements}prestashop>_d3d2e617335f08df83599665eef8a418'] = 'Chiudi'; // Close +$_MODULE['<{creativeelements}prestashop>_31a9301fb39db9e093b3894b9eb582d1'] = 'Template salvati'; // Saved Templates +$_MODULE['<{creativeelements}prestashop>_45f474dd60a551d4bb0d346df55d1cc4'] = 'Libreria Template'; // Template Library +$_MODULE['<{creativeelements}prestashop>_ec8c82009f9de01c14037e4b85106701'] = 'Scegli la tua struttura'; // Select your Structure +$_MODULE['<{creativeelements}prestashop>_e37f4fc0441c524ee5a89453f12178c8'] = 'Aggiungi template'; // Add Template +$_MODULE['<{creativeelements}prestashop>_f5395c9793af8a11b406ca7c1ac70da9'] = 'Approfondisci'; // Learn More +$_MODULE['<{creativeelements}prestashop>_9de70901d3562acdbec7f907c2ca62e7'] = 'Animazione al passaggio del mouse'; // Hover Animation +$_MODULE['<{creativeelements}prestashop>_d0799ce2e6e121f7d748fe60ca5ee142'] = 'Adatta oggetto'; // Object Fit +$_MODULE['<{creativeelements}prestashop>_dc448aa55848e923ec2cc916305b6d2b'] = 'Blocca scorrimento'; // Prevent Scroll +$_MODULE['<{creativeelements}prestashop>_e16b5b7f26f54214445cbe38d72c2828'] = 'Veloce'; // Fast +$_MODULE['<{creativeelements}prestashop>_efa5397985b8609a5dbeb430a4bcadd3'] = 'Lento'; // Slow +$_MODULE['<{creativeelements}prestashop>_c78a3584ba81e0cd0ba8c29487e85d10'] = 'Caratteri predefiniti'; // Default Fonts +$_MODULE['<{creativeelements}prestashop>_b201b2e7e7a20df48b625f20c2f0933e'] = 'Tavolozze dei colori'; // Color Palettes +$_MODULE['<{creativeelements}prestashop>_373492f01889c61ff7d8bb91cf43d1bd'] = 'Ingresso animazione'; // Entrance Animation +$_MODULE['<{creativeelements}prestashop>_f0153907b3a8a6ab6d24ebda1e079951'] = 'Puoi abilitarlo dalla Pagina Impostazioni Modulo.'; // You can enable it from the module settings page. +$_MODULE['<{creativeelements}prestashop>box_shadow_control_b56d315e49178ba86341ff3b4e337c6b'] = 'Inset'; // Inset +$_MODULE['<{creativeelements}prestashop>box_shadow_control_838389e9675a112e8187aa34a4f61709'] = 'Ombra riquadro'; // Box Shadow +$_MODULE['<{creativeelements}prestashop>_06ce2a25e5d12c166a36f654dbea6012'] = 'Verticale'; // Vertical +$_MODULE['<{creativeelements}prestashop>_c1b5fa03ecdb95d4a45dd1c40b02527f'] = 'Orizzontale'; // Horizontal +$_MODULE['<{creativeelements}prestashop>_180bc3b1c5619aaef40e803f49921012'] = 'Diffondi'; // Spread +$_MODULE['<{creativeelements}prestashop>_8b52de510bc5497ac43abfe566be48ab'] = 'Sfoca'; // Blur +$_MODULE['<{creativeelements}prestashop>_a3d68d897c2e60e93783fe59e4da7ebf'] = 'A lato'; // Aside +$_MODULE['<{creativeelements}prestashop>_5289f1a930358cba4623a7234db5c71e'] = 'Testimonianza'; // Testimonial +$_MODULE['<{creativeelements}prestashop>_30e624fbe7c9345f3cdb243bc2eeacfd'] = 'Colori ufficiali'; // Official Color +$_MODULE['<{creativeelements}prestashop>_bef2481eda40bd121482f1814d72314f'] = 'Arrotondato'; // Rounded +$_MODULE['<{creativeelements}prestashop>_786c4bcb88b15bd37b70d4b9d62ba324'] = 'Icone social'; // Social Icons +$_MODULE['<{creativeelements}prestashop>_9769396cc39a68db5cb5ff02896596ea'] = 'Le mie abilità'; // My Skill +$_MODULE['<{creativeelements}prestashop>_3f761a65a378ebfdfc28741392606662'] = 'Pulsante Scarica'; // Download Button +$_MODULE['<{creativeelements}prestashop>_b682e97ce55b3fbc9cc299c667cea845'] = 'Sfondo overlay'; // Background Overlay +$_MODULE['<{creativeelements}prestashop>_f23578fcd2a868168854ab714e7de537'] = 'Esteso'; // Extended +$_MODULE['<{creativeelements}prestashop>_812a48ba719daeda82e4da8e812d426c'] = 'URL personalizzato'; // Custom URL +$_MODULE['<{creativeelements}prestashop>_36bb6559696dc9124986ae120515984f'] = 'Incolla'; // Paste +$_MODULE['<{creativeelements}prestashop>_a9ded1e5ce5d75814730bb4caaf49419'] = 'Sfondo'; // Background +$_MODULE['<{creativeelements}prestashop>_ec114b1e189d6c3044e5706e93682fa8'] = 'Più largo'; // Wider +$_MODULE['<{creativeelements}prestashop>_0db377921f4ce762c62526131097968f'] = 'Generale'; // General +$_MODULE['<{creativeelements}prestashop>_737e6c4a46563dd9da1557b304178be1'] = 'Firma dell’introduzione'; // Intro Byline +$_MODULE['<{creativeelements}prestashop>_627b24abf27e2d03d38537f84e81cb2e'] = 'Spaziatura'; // Spacing +$_MODULE['<{creativeelements}prestashop>_76fbf0ccd7fcd64879c2ff2119dc15a4'] = 'Esterno'; // Outside +$_MODULE['<{creativeelements}prestashop>_9b6d3000134648fc9f1e71094ae0847d'] = 'Interno'; // Inside +$_MODULE['<{creativeelements}prestashop>_02674a4ef33e11c879283629996c8ff8'] = 'Direzione'; // Direction +$_MODULE['<{creativeelements}prestashop>_a301fb6c9931e5b86a9b36a31b9c9e6d'] = 'Opzioni aggiuntive'; // Additional Options +$_MODULE['<{creativeelements}prestashop>_6649c4b2e13734c911fbd45e025d9431'] = 'Frecce e Punti'; // Arrows and Dots +$_MODULE['<{creativeelements}prestashop>_b26ff651c2d7385db87fa44737402935'] = 'Spessore bordo sinistro'; // Left Border Width +$_MODULE['<{creativeelements}prestashop>_c7f201c52862951afad2ae9802595286'] = 'Durata dell’animazione'; // Animation Duration +$_MODULE['<{creativeelements}prestashop>_17b04c58b2a994e2a115530681ca25e3'] = 'Estendi l’Immagine'; // Image Stretch +$_MODULE['<{creativeelements}prestashop>_35773b27596fe91a749ddbf3e1257966'] = 'Carosello d’immagini'; // Image Carousel +$_MODULE['<{creativeelements}prestashop>_0dc52fcd265149dd09a6d1f5b0e5a3b5'] = 'Velocità dell’animazione'; // Animation Speed +$_MODULE['<{creativeelements}prestashop>_7b49a3eb804d134cdce5579121787fc3'] = 'Puoi ritagliare l’immagine originale in qualsiasi misura personalizzata. Puoi anche indicare solo un valore per l’altezza o la larghezza così da mantenere le proporzioni originali.'; // You can crop the original image size to any custom size. You can also set a single value for height or width in order to keep the original size ratio. +$_MODULE['<{creativeelements}prestashop>_f9641a2d9ee9b7d52b4c15b7745c5ad6'] = 'È necessario inserire la posizione (ancoraggio) selezionata nel modello corrente, affinché CreativeElements funzioni su questa pagina.'; // You must insert the selected module position (hook) in the current template, in order for CreativeElements to work on this page. +$_MODULE['<{creativeelements}prestashop>_9e24be381f41ce80bb67674e03f7b83a'] = 'Il contenuto di quest’area non è stato trovato nella tua pagina.'; // Sorry, the content area was not found in your page. +$_MODULE['<{creativeelements}prestashop>_8250b33e7828c54440743f11d36c2204'] = 'Colori dei controlli'; // Controls Color +$_MODULE['<{creativeelements}prestashop>_87cd4e8df281e8565913cb1dee924173'] = 'Introduzione portrait'; // Intro Portrait +$_MODULE['<{creativeelements}prestashop>_54f70e7001bba1a2f8b2c7394b7fbc65'] = 'Titolo introduzione'; // Intro Title +$_MODULE['<{creativeelements}prestashop>_89d7b10cb4238977d2b523dfd9ea7745'] = 'Ciclico'; // Loop +$_MODULE['<{creativeelements}prestashop>_4182f4b55a58f5a6a3e3ee9fdb9b6b88'] = 'Opzioni video'; // Video Options +$_MODULE['<{creativeelements}prestashop>_34e2d1989a1dbf75cd631596133ee5ee'] = 'Video'; // Video +$_MODULE['<{creativeelements}prestashop>_b9987a246a537f4fe86f1f2e3d10dbdb'] = 'Visualizzazione'; // Display +$_MODULE['<{creativeelements}prestashop>_1779d23035f16bb6f8a0f548f1eaa6b9'] = 'Inserisci media'; // Insert Media +$_MODULE['<{creativeelements}prestashop>_849a0c92b921bb7fd3c9f4f6d197f89c'] = '%s immagini selezionate'; // %s Images Selected +$_MODULE['<{creativeelements}prestashop>image_size_control_0e0613e1f93d33fba15773ba3ff6f56a'] = 'Dimensioni dell’immagine'; // Image Dimension +$_MODULE['<{creativeelements}prestashop>image_size_control_90589c47f06eb971d548591f23c285af'] = 'Personalizzato'; // Custom +$_MODULE['<{creativeelements}prestashop>border_control_eb656e41b6da91494775ecf47a51da91'] = 'Tratteggiato'; // Dashed +$_MODULE['<{creativeelements}prestashop>border_control_90c09393a4c0970bc9a6703ad527781c'] = 'Puntinato'; // Dotted +$_MODULE['<{creativeelements}prestashop>border_control_d909d38d705ce75386dd86e611a82f5b'] = 'Doppio'; // Double +$_MODULE['<{creativeelements}prestashop>border_control_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Solido'; // Solid +$_MODULE['<{creativeelements}prestashop>_04e0385c10aefee8e4681617d2f3ef40'] = 'Sfuma'; // Fade +$_MODULE['<{creativeelements}prestashop>_a62d22910732d5343689f5117999abfa'] = 'Effetto'; // Effect +$_MODULE['<{creativeelements}prestashop>image_size_control_bbd47109890259c0127154db1af26c75'] = 'Pieno'; // Full +$_MODULE['<{creativeelements}prestashop>_d3eea2f5aca8f6254f0938b5e8a33506'] = 'Allineamento verticale'; // Vertical Alignment +$_MODULE['<{creativeelements}prestashop>_431c060088b62effa79dd9c710d20b00'] = 'Ciclo infinito'; // Infinite Loop +$_MODULE['<{creativeelements}prestashop>_4c72d232d1a1406e6c26251bbf6c3b25'] = 'Punti'; // Dots +$_MODULE['<{creativeelements}prestashop>_8c38c6601843e340c9e290746e5f92cc'] = 'Reimposta la struttura'; // Reset Structure +$_MODULE['<{creativeelements}prestashop>image_size_control_7d25feb59b8a44341084a00840d860d1'] = 'Dimensioni dell’immagine'; // Image Size +$_MODULE['<{creativeelements}prestashop>typography_control_6adf97f83acf6453d4a6a4b1070f3754'] = 'Nessuno'; // None +$_MODULE['<{creativeelements}prestashop>_59a1c1ca0188302c39e06c1ceaf9b4d5'] = 'Tag HTML Titolo'; // Title HTML Tag +$_MODULE['<{creativeelements}prestashop>_33f5f59c40d41e206fd9af76ba81f8a2'] = 'Fai clic sul pulsante modifica per cambiare questo testo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'; // Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo. +$_MODULE['<{creativeelements}prestashop>_b4dbdac374f627ca60f562d1dd368e97'] = 'Questa è l’intestazione'; // This is the heading +$_MODULE['<{creativeelements}prestashop>_ddedab99da4615aa6cb108466ba35bf1'] = 'Aggiungi la tua classe personalizzata SENZA il punto es. my-class'; // Add your custom class WITHOUT the dot. e.g: my-class +$_MODULE['<{creativeelements}prestashop>_46c613087b2b4545ce4ef4ca82dc579c'] = 'Attenzione: le impostazioni di visualizzazione (mostra/nascondi per mobile, tablet o desktop) avranno effetto solo se sei nell’anteprima o nella pagina live, e non nella modalità modifica in Creative Elements.'; // Attention: The display settings (show/hide for mobile, tablet or desktop) will only take effect once you are on the preview or live page, and not while you're in editing mode in Elementor. +$_MODULE['<{creativeelements}prestashop>_5e8fe619138eb3ea59cbc11b4e977a3c'] = 'La lista dei font usati se il font scelto non è disponibile.'; // The list of fonts used if the chosen font is not available. +$_MODULE['<{creativeelements}prestashop>_527173285a0e8a11e07da121e3dc9493'] = 'Font generici predefiniti'; // Default Generic Fonts +$_MODULE['<{creativeelements}prestashop>_a1a1577b9a9dddef5aa6644847575ef0'] = 'Link di YouTube o file video (consigliato mp4).'; // YouTube link or video file (mp4 is recommended). +$_MODULE['<{creativeelements}prestashop>_aa56a2e65d8106aef3c61e4f6bf94fdb'] = 'Elementi'; // Elements +$_MODULE['<{creativeelements}prestashop>_7070a8e837fa8d255ec7aff468edb08d'] = 'Il più avanzato costruttore di pagine di frontend drag & drop. Crea siti web di alto livello e perfetti al pixel a velocità record. Per ogni tema, ogni pagina, ogni design.'; // The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design. +$_MODULE['<{creativeelements}prestashop>_f4f70727dc34561dfde1a3c529b6205c'] = 'Impostazioni'; // Settings +$_MODULE['<{creativeelements}prestashop>typography_control_12a8e47062ed3272e04dc0b991e38466'] = 'Obliquo'; // Oblique +$_MODULE['<{creativeelements}prestashop>typography_control_1d874710ccdcd46b95397049d2e7500c'] = 'Corsivo'; // Italic +$_MODULE['<{creativeelements}prestashop>typography_control_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normale'; // Normal +$_MODULE['<{creativeelements}prestashop>typography_control_97a62b5e6d3cae255036b6bc37b87b44'] = 'Iniziali maiuscole'; // Capitalize +$_MODULE['<{creativeelements}prestashop>typography_control_dc1ff975a46c75335d6d640abdc0c3a6'] = 'Minuscolo'; // Lowercase +$_MODULE['<{creativeelements}prestashop>typography_control_621e7b8ece62fecc55e883252ff2fbe7'] = 'Maiuscolo'; // Uppercase +$_MODULE['<{creativeelements}prestashop>_512e805300422d5e8a86031b665ef28c'] = 'Icona Play'; // Play Icon +$_MODULE['<{creativeelements}prestashop>_9bcffa546758e012c3379c285a9e95c4'] = 'Immagine sovrapposta'; // Image Overlay +$_MODULE['<{creativeelements}prestashop>_3248e7a58c1ea530e42933f72bb676e6'] = 'Controlli lettore'; // Player Controls +$_MODULE['<{creativeelements}prestashop>_ee17cbac55d446219173726589867db9'] = 'Video consigliati'; // Suggested Videos +$_MODULE['<{creativeelements}prestashop>_ac97682c8f12cd9e67d121e87da0338d'] = 'Proporzioni'; // Aspect Ratio +$_MODULE['<{creativeelements}prestashop>_9690ccd809b1cbdb861d0bad3c0802c9'] = 'Contenuto commutatore'; // Toggle Content +$_MODULE['<{creativeelements}prestashop>_ccf67c36b837af38fd05d41dec1b47ec'] = 'Titolo commutatore'; // Toggle Title +$_MODULE['<{creativeelements}prestashop>_a1be4433701f8936cdf49569eb44e3ab'] = 'Commutatore #2'; // Toggle #2 +$_MODULE['<{creativeelements}prestashop>_0eb925daf423fe1169c3f6720e3c74c0'] = 'Commutatore #1'; // Toggle #1 +$_MODULE['<{creativeelements}prestashop>_f2a9f78110ca6de657f70b3ee9cd5320'] = 'Elementi del commutatore'; // Toggle Items +$_MODULE['<{creativeelements}prestashop>_a8875bbe4272c0bdd786cfaaedf77921'] = 'Commutatore'; // Toggle +$_MODULE['<{creativeelements}prestashop>_e0f1691bdb67d9859e5a6a8d7c26e6a1'] = 'Editor di testo'; // Text Editor +$_MODULE['<{creativeelements}prestashop>_5a9bf0bc2b910b5e03c3f85d363838e7'] = 'Contenuto della scheda'; // Tab Content +$_MODULE['<{creativeelements}prestashop>_3acb228e77768f2611ae59e04595a90d'] = 'Titolo della scheda'; // Tab Title +$_MODULE['<{creativeelements}prestashop>_ef6bec3512b7dee69f91f853f5fe7292'] = 'Scheda #2'; // Tab #2 +$_MODULE['<{creativeelements}prestashop>_d9acb2b50c1ced5fe56790e1518532b2'] = 'Scheda #1'; // Tab #1 +$_MODULE['<{creativeelements}prestashop>_30eb111c6722ac96a4239a87dddfe5ae'] = 'Elementi delle schede'; // Tabs Items +$_MODULE['<{creativeelements}prestashop>_7015777bcc86cd0c5e4819310d62b040'] = 'Schede'; // Tabs +$_MODULE['<{creativeelements}prestashop>_6533b60847609ca99607d99753b6ea9b'] = 'Pausa al passaggio del mouse'; // Pause on Hover +$_MODULE['<{creativeelements}prestashop>_7396285ad8822a609e7d737cc82f6076'] = 'Velocità autoplay'; // Autoplay Speed +$_MODULE['<{creativeelements}prestashop>_4e05974b02cc4aa95db4d85baef6b6b4'] = 'Frecce'; // Arrows +$_MODULE['<{creativeelements}prestashop>_6160a53ece50ce6d4f5ef4452549835e'] = 'Slide'; // Slide +$_MODULE['<{creativeelements}prestashop>_3cc101db14264780bd1e84bc80d588f1'] = 'Stile titolo'; // Title Style +$_MODULE['<{creativeelements}prestashop>_2bf376babbb3b4d6d1158aabc5b49109'] = 'Colore interno del testo'; // Inner Text Color +$_MODULE['<{creativeelements}prestashop>_90d254b1e4a44ef82a0eff5ce2dd30bf'] = 'Disegnatore web'; // Web Designer +$_MODULE['<{creativeelements}prestashop>_8eb7d29b13b3a8389bef4c465053f63f'] = 'es. Disegnatore web'; // e.g. Web Designer +$_MODULE['<{creativeelements}prestashop>_2ffe8a03531a12477e27a146bc15a3ba'] = 'Testo interno'; // Inner Text +$_MODULE['<{creativeelements}prestashop>_e7832ab13448cc6894f4262dc1e05d0d'] = 'Visualizza percentuale'; // Display Percentage +$_MODULE['<{creativeelements}prestashop>_37be07209f53a5d636d5c904ca9ae64c'] = 'Percentuale'; // Percentage +$_MODULE['<{creativeelements}prestashop>_8e4a53e769f15496d5c8f4fe9d0729df'] = 'Barra di progressione'; // Progress Bar +$_MODULE['<{creativeelements}prestashop>_1fec9f77e87864f1bc863596105c295d'] = 'Per esempio: About'; // For Example: About +$_MODULE['<{creativeelements}prestashop>_697b67a9f0a74057bdbb8743bbb3c46e'] = 'L’ID dell’ancoraggio menu.'; // The ID of Menu Anchor. +$_MODULE['<{creativeelements}prestashop>_704fe059b7613cbd3353262998cdf836'] = 'Questo ID sarà il CSS ID da utilizzare nella tua pagina senza #.'; // This ID will be the CSS ID you will have to use in your own page, Without #. +$_MODULE['<{creativeelements}prestashop>_a34285645af2703a9501db6fc881e5df'] = 'Ancora'; // Anchor +$_MODULE['<{creativeelements}prestashop>_7551d2d59d73e7d2650f7e2b9959efbf'] = 'Ancoraggio del menu'; // Menu Anchor +$_MODULE['<{creativeelements}prestashop>_13c31590d98cc452fc3794eaf0811e4d'] = 'Posizione immagine'; // Image Position +$_MODULE['<{creativeelements}prestashop>_ac2c0f8fbfcea1d561d0dbbfafc1747d'] = 'Spaziatura immagine'; // Image Spacing +$_MODULE['<{creativeelements}prestashop>_7d25feb59b8a44341084a00840d860d1'] = 'Dimensione immagine'; // Image Size +$_MODULE['<{creativeelements}prestashop>_fb07b027d8d8c04f512f1a6a0f7bc365'] = 'Riquadro immagine'; // Image Box +$_MODULE['<{creativeelements}prestashop>_37e929a6d14b3e6eeb834900e8216c6e'] = 'Icona al passaggio del mouse'; // Icon Hover +$_MODULE['<{creativeelements}prestashop>_757e8d7a69c388d1b39efa9bd3d54d4d'] = 'Spessore bordi'; // Border Width +$_MODULE['<{creativeelements}prestashop>_8d2de5368588552fbae54044ac5c7b3d'] = 'Ruota'; // Rotate +$_MODULE['<{creativeelements}prestashop>_020a9f6a979825fc9349eccc66bef6db'] = 'Colore secondario'; // Secondary Color +$_MODULE['<{creativeelements}prestashop>_f951a1e1ff1ed0d24a2758b6441a3431'] = 'Colore principale'; // Primary Color +$_MODULE['<{creativeelements}prestashop>_ceb46ca115d05c51aa5a16a8867c3304'] = 'Quadrato'; // Square +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Cerchio'; // Circle +$_MODULE['<{creativeelements}prestashop>_880c1273b27d27cfc82004c3a4b205c9'] = 'Forma'; // Shape +$_MODULE['<{creativeelements}prestashop>_6b73ad372508225645eb96a2e505a602'] = 'Incorniciato'; // Framed +$_MODULE['<{creativeelements}prestashop>_29b733fdb4bddeda910b3b4a659c2fef'] = 'Impilato'; // Stacked +$_MODULE['<{creativeelements}prestashop>_0c03306ef001b4e3d7f76ee2faad389e'] = 'Indentazione del testo'; // Text Indent +$_MODULE['<{creativeelements}prestashop>_3f7b121ec5cc19cf6676a28656e0d5b8'] = 'Lista Elementi'; // List Item +$_MODULE['<{creativeelements}prestashop>_8d35756b5a8f878d9d20f3ba0851786d'] = 'Lista Elementi #3'; // List Item #3 +$_MODULE['<{creativeelements}prestashop>_043fd607b45939749a567bcb850978bc'] = 'Lista Elementi #2'; // List Item #2 +$_MODULE['<{creativeelements}prestashop>_88e38f5c21b56f5f87896476088a1783'] = 'Lista Elementi #1'; // List Item #1 +$_MODULE['<{creativeelements}prestashop>_591180770b39c5f069a1b2f9e643952c'] = 'Lista Icone'; // Icon List +$_MODULE['<{creativeelements}prestashop>_0c02adc8335c386e48c48be7304d6f9e'] = 'https://your-link.com'; // https://your-link.com +$_MODULE['<{creativeelements}prestashop>_917aedb05020a5ad03b91720c66d1900'] = 'Spaziatura dell’icona'; // Icon Spacing +$_MODULE['<{creativeelements}prestashop>_3902b5474a18ab7e9f8ce952a8f8123f'] = 'Riquadro icona'; // Icon Box +$_MODULE['<{creativeelements}prestashop>_e0ec89dede7dfb470b66327694fcd96c'] = 'Codice HTML'; // HTML Code +$_MODULE['<{creativeelements}prestashop>_4c4ad5fca2e7a3f74dbb1ced00381aa4'] = 'HTML'; // HTML +$_MODULE['<{creativeelements}prestashop>_022586563e1d7808a2dcc1adf7d31cdd'] = 'Tag HTML'; // HTML Tag +$_MODULE['<{creativeelements}prestashop>_d8e4922dd15f21a02528d54926dcceac'] = 'Immetti il titolo'; // Enter your title +$_MODULE['<{creativeelements}prestashop>_0101316665d4f82adaa26d86fbbb2d6e'] = 'Intestazione'; // Heading +$_MODULE['<{creativeelements}prestashop>_ec6d39989d44bfedcd0ddaa3651fa194'] = 'London Eye, London, United Kingdom'; // London Eye, London, United Kingdom +$_MODULE['<{creativeelements}prestashop>_46f3ea056caa3126b91f3f70beea068c'] = 'Mappa'; // Map +$_MODULE['<{creativeelements}prestashop>_272ba7d164aa836995be6319a698be84'] = 'Didascalia'; // Caption +$_MODULE['<{creativeelements}prestashop>_fff0d600f8a0b5e19e88bfb821dd1157'] = 'Immagini'; // Images +$_MODULE['<{creativeelements}prestashop>_64663f4646781c9c0110838b905daa23'] = 'Casuale'; // Random +$_MODULE['<{creativeelements}prestashop>_6e475c4e40cb8bdfd54c18345937bc9a'] = 'File media'; // Media File +$_MODULE['<{creativeelements}prestashop>_6861444ec5168a915bf147d856ecb91b'] = 'Allegato pagina'; // Attachment Page +$_MODULE['<{creativeelements}prestashop>_d33c208fe1458eff399189b5b0515025'] = 'Aggiungi immagini'; // Add Images +$_MODULE['<{creativeelements}prestashop>_9cc51a9ca0ed0404f8b9125ad563ade9'] = 'Galleria d’immagini'; // Image Gallery +$_MODULE['<{creativeelements}prestashop>_466b98ca0f38bd8bf2260246c91f6882'] = 'Spaziatura'; // Gap +$_MODULE['<{creativeelements}prestashop>_cb5feb1b7314637725a2e73bdc9f7295'] = 'Colore'; // Color +$_MODULE['<{creativeelements}prestashop>_8c489d0946f66d17d73f26366a4bf620'] = 'Spessore'; // Weight +$_MODULE['<{creativeelements}prestashop>_6ab9a295c00f945cf4881fd7667a0334'] = 'Distanziatore'; // Spacer +$_MODULE['<{creativeelements}prestashop>_2908050e771fb91a3afbb7809972e90c'] = 'Divisore'; // Divider +$_MODULE['<{creativeelements}prestashop>_b2ee912b91d69b435159c7c3f6df7f5f'] = 'Numero'; // Number +$_MODULE['<{creativeelements}prestashop>_7776af0e9a7220bb12e18bbb20d49314'] = 'Numero fantastico'; // Cool Number +$_MODULE['<{creativeelements}prestashop>_32ba78fe43257d3e7f88e3935a8ea0d4'] = 'Più'; // Plus +$_MODULE['<{creativeelements}prestashop>_5b122ce454e4b9f39a663d8d8ed6e85c'] = 'Suffisso numero'; // Number Suffix +$_MODULE['<{creativeelements}prestashop>_83294d77029945fdb8dc4a5388829d27'] = 'Prefisso numero'; // Number Prefix +$_MODULE['<{creativeelements}prestashop>_0cb5ed4f4d6f3d8b739d1f10fec8d36d'] = 'Numero finale'; // Ending Number +$_MODULE['<{creativeelements}prestashop>_ededf9a7b5f65a321a5f20ebf58e9517'] = 'Numero iniziale'; // Starting Number +$_MODULE['<{creativeelements}prestashop>_64d129224a5377b63e9727479ec987d9'] = 'Contatore'; // Counter +$_MODULE['<{creativeelements}prestashop>_05b1dc77590105a18fc4c02526fe0c7a'] = 'Autoplay'; // Autoplay +$_MODULE['<{creativeelements}prestashop>_059910d00f03f1aad921ecef33b1deb7'] = 'Slide da scorrere'; // Slides to Scroll +$_MODULE['<{creativeelements}prestashop>_d7b5e50ef2050d92c3972793da595f49'] = 'Slide da visualizzare'; // Slides to Show +$_MODULE['<{creativeelements}prestashop>_10bf609ae34aa1c82f39f0e90cf6ffaf'] = 'Scegli l’immagine'; // Choose Image +$_MODULE['<{creativeelements}prestashop>_be53a0541a6d36f6ecb879fa2c584b08'] = 'Immagine'; // Image +$_MODULE['<{creativeelements}prestashop>_070554647306343cbea29ebfdd278ba8'] = 'Bordo'; // Border +$_MODULE['<{creativeelements}prestashop>_7bfcadb5535fe8aad5032762b7bfe159'] = 'Dopo'; // After +$_MODULE['<{creativeelements}prestashop>_9060587edeb01a63e3d3edc959678d1e'] = 'Prima'; // Before +$_MODULE['<{creativeelements}prestashop>_f26664db07487754bb4b21355caad9ca'] = 'Posizione dell’icona'; // Icon Position +$_MODULE['<{creativeelements}prestashop>_817434295a673aed431435658b65d9a7'] = 'Icona'; // Icon +$_MODULE['<{creativeelements}prestashop>_6f6cb72d544962fa333e2e34ce64f719'] = 'Dimensione'; // Size +$_MODULE['<{creativeelements}prestashop>_058cc077563d4b47b43ae642a6478159'] = 'Giustificato'; // Justified +$_MODULE['<{creativeelements}prestashop>_a63706eecfa33f67b315f978392ad7ae'] = 'Allineamento'; // Alignment +$_MODULE['<{creativeelements}prestashop>_e737584ec6ea30637b1e2b1dde624fbe'] = 'XXL'; // XXL +$_MODULE['<{creativeelements}prestashop>_a7a4ccc5e1a068d87f4965e014329201'] = 'XL'; // XL +$_MODULE['<{creativeelements}prestashop>_3a69b34ce86dacb205936a8094f6c743'] = 'Grande'; // Large +$_MODULE['<{creativeelements}prestashop>_87f8a6ab85c9ced3702b4ea641ad4bb5'] = 'Medio'; // Medium +$_MODULE['<{creativeelements}prestashop>_2660064e68655415da2628c2ae2f7592'] = 'Piccolo'; // Small +$_MODULE['<{creativeelements}prestashop>_87b7760f14fbff78d8819291f36ab9a0'] = 'Pulsante'; // Button +$_MODULE['<{creativeelements}prestashop>_7dce122004969d56ae2e0245cb754d35'] = 'Modifica'; // Edit +$_MODULE['<{creativeelements}prestashop>_8c51f4baf5c75864896a9984fdd085ed'] = 'Nascondi su Mobile'; // Hide On Mobile +$_MODULE['<{creativeelements}prestashop>_4365dd761ee313b7154369721242ca54'] = 'Nascondi su Tablet'; // Hide On Tablet +$_MODULE['<{creativeelements}prestashop>_c936f9927e7b00ada48d5b571b74ff7d'] = 'Nascondi su Desktop'; // Hide On Desktop +$_MODULE['<{creativeelements}prestashop>_b80517a37221cf35ccdfb5dfe99e57df'] = 'Raggio del bordo'; // Border Radius +$_MODULE['<{creativeelements}prestashop>_b5a7adde1af5c87d7fd797b6245c2a39'] = 'Descrizione'; // Description +$_MODULE['<{creativeelements}prestashop>_b78a3223503896721cca1303f776159b'] = 'Titolo'; // Title +$_MODULE['<{creativeelements}prestashop>_75e7422f2fe253fc69d3f6c148d197ee'] = 'Colore di sfondo'; // Background Color +$_MODULE['<{creativeelements}prestashop>_62a5e490880a92eef74f167d9dc6dca0'] = 'Nascondi'; // Hide +$_MODULE['<{creativeelements}prestashop>_498f79c4c5bbde77f1bceb6c86fd0f6d'] = 'Mostra'; // Show +$_MODULE['<{creativeelements}prestashop>_5c6dc399ce706d7c8114864dfe2e85cd'] = 'Pulsante Ignora'; // Dismiss Button +$_MODULE['<{creativeelements}prestashop>_53d7e9d912b9a2e0eb070e2f6ac8185b'] = 'Sono una descrizione. Fai clic sul pulsante modifica per modificare questo testo.'; // I am a description. Click the edit button to change this text. +$_MODULE['<{creativeelements}prestashop>_70124948c153a25f90f234807d432051'] = 'Titolo e Descrizione'; // Title & Description +$_MODULE['<{creativeelements}prestashop>_990816b607ebf99b1415760965e4d564'] = 'Pericolo'; // Danger +$_MODULE['<{creativeelements}prestashop>_0eaadb4fcb48a0a0ed7bc9868be9fbaa'] = 'Avvertimento'; // Warning +$_MODULE['<{creativeelements}prestashop>_505a83f220c02df2f85c3810cd9ceb38'] = 'Successo'; // Success +$_MODULE['<{creativeelements}prestashop>_4059b0251f66a18cb56f544728796875'] = 'Info'; // Info +$_MODULE['<{creativeelements}prestashop>_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Tipo'; // Type +$_MODULE['<{creativeelements}prestashop>_b92071d61c88498171928745ca53078b'] = 'Avviso'; // Alert +$_MODULE['<{creativeelements}prestashop>_779a68e20d5ee1a07b0968deda651684'] = 'Colore attivo'; // Active Color +$_MODULE['<{creativeelements}prestashop>_475c80ecff56299d3527cf51af68e48c'] = 'Colore del bordo'; // Border Color +$_MODULE['<{creativeelements}prestashop>_4351cfebe4b61d8aa5efa1d020710005'] = 'Visualizza'; // View +$_MODULE['<{creativeelements}prestashop>_01fa2fa7f98169b137677336c3f670f0'] = 'Contenuto della fisarmonica'; // Accordion Content +$_MODULE['<{creativeelements}prestashop>_708714aa8d5537518f5a8a8439012354'] = 'Titolo della fisarmonica'; // Accordion Title +$_MODULE['<{creativeelements}prestashop>_7ad033dd18a58e91f283103cdcd98d24'] = 'Fisarmonica #2'; // Accordion #2 +$_MODULE['<{creativeelements}prestashop>_228e7e4cc19e59ae320bd052cd12aeb3'] = 'Fisarmonica #1'; // Accordion #1 +$_MODULE['<{creativeelements}prestashop>_ff3defaa406e66b49d1fd11ecebe07aa'] = 'Elementi della fisarmonica'; // Accordion Items +$_MODULE['<{creativeelements}prestashop>_4d5aae0b218a0bb62ff4513b66fc34d0'] = 'Fisarmonica'; // Accordion +$_MODULE['<{creativeelements}prestashop>_49ee3087348e8d44e1feda1917443987'] = 'Nome'; // Name +$_MODULE['<{creativeelements}prestashop>_bafd7322c6e97d25b6299b5d6fe8920b'] = 'No'; // No +$_MODULE['<{creativeelements}prestashop>_93cba07454f06a4a960172bbd6e2a435'] = 'Sì'; // Yes +$_MODULE['<{creativeelements}prestashop>_52f4393e1b52ba63e27310ca92ba098c'] = 'Impostazioni Generali'; // General Settings +$_MODULE['<{creativeelements}prestashop>_5096bb1a69971401c543c0fd182777e9'] = 'Testo in Risalto'; // Accent Text +$_MODULE['<{creativeelements}prestashop>_c1800412bc0184dd8339a641907b549f'] = 'Testo del Contenuto'; // Body Text +$_MODULE['<{creativeelements}prestashop>_c3cc351e0f5298324ba1af3535b17e97'] = 'Intestazione Secondaria'; // Secondary Headline +$_MODULE['<{creativeelements}prestashop>_ecb45ba774122b23aa38ed2072872c19'] = 'Intestazione Principale'; // Primary Headline +$_MODULE['<{creativeelements}prestashop>_c900e1bd8e22771d610bd2a5861b544f'] = 'In risalto'; // Accent +$_MODULE['<{creativeelements}prestashop>_9dffbf69ffba8bc38bc4e01abf4b1675'] = 'Testo'; // Text +$_MODULE['<{creativeelements}prestashop>_0c7d6cf19426e01dcfa32434828ed266'] = 'Secondario'; // Secondary +$_MODULE['<{creativeelements}prestashop>_074de7e7c226d5c60f8af14c20725352'] = 'Principale'; // Primary +$_MODULE['<{creativeelements}prestashop>_846495f9ceed11accf8879f555936a7d'] = 'Navigazione'; // Navigation +$_MODULE['<{creativeelements}prestashop>_972e73b7a882d0802a4e3a16946a2f94'] = 'Base'; // Basic +$_MODULE['<{creativeelements}prestashop>_205a36f1b372fa213113504073738be0'] = 'Posizione Contenuto'; // Content Position +$_MODULE['<{creativeelements}prestashop>_b1ca34f82e83c52b010f86955f264e05'] = 'Centrale'; // Middle +$_MODULE['<{creativeelements}prestashop>_fbb09a82eafab60150d0996e8fe46560'] = 'Estendi'; // Stretch +$_MODULE['<{creativeelements}prestashop>_a36618027461bc0fd7bb6868929ffaec'] = 'Posizione colonna'; // Column Position +$_MODULE['<{creativeelements}prestashop>_4565b790baf0d98c20e624636451a43f'] = 'Altezza minima'; // Minimum Height +$_MODULE['<{creativeelements}prestashop>_c7a7e65064fdd9a2e9aa712fa88e9878'] = 'Altezza min'; // Min Height +$_MODULE['<{creativeelements}prestashop>_3232bb2700bece80661b7b9f834be06d'] = 'Pieno schermo'; // Fit To Screen +$_MODULE['<{creativeelements}prestashop>_eec6c4bdbd339edf8cbea68becb85244'] = 'Altezza'; // Height +$_MODULE['<{creativeelements}prestashop>_e7c770a61dbdf81ca922ae0260e327c1'] = 'Largo'; // Wide +$_MODULE['<{creativeelements}prestashop>_4a7ab319be06025840ef3389301424b9'] = 'Stretto'; // Narrow +$_MODULE['<{creativeelements}prestashop>_845366c74d6395b273fa175bc2e057c3'] = 'Nessuna spaziatura'; // No Gap +$_MODULE['<{creativeelements}prestashop>_58b95bbe80c80c7dc3f16d8db0c506e8'] = 'Spaziatura colonne'; // Columns Gap +$_MODULE['<{creativeelements}prestashop>_399df326b0ba3630641583807b229bfe'] = 'Larghezza contenuto'; // Content Width +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Larghezza piena'; // Full Width +$_MODULE['<{creativeelements}prestashop>_6d1ca8184c6a1f11ecccfa17f8f9048a'] = 'Boxed'; // Boxed +$_MODULE['<{creativeelements}prestashop>_32954654ac8fe66a1d09be19001de2d4'] = 'Larghezza'; // Width +$_MODULE['<{creativeelements}prestashop>_ebd9bec4d70abc789d439c1f136b0538'] = 'Layout'; // Layout +$_MODULE['<{creativeelements}prestashop>_02fbde656ea799c09d5d647dc0f5960a'] = 'Aggiungi nuova colonna'; // Add New Column +$_MODULE['<{creativeelements}prestashop>_4f5f086e367315e5f52722c8c8e9b3e3'] = 'Larghezza colonna'; // Column Width +$_MODULE['<{creativeelements}prestashop>_9a64f91eb059eb9a1ecf038d3467e09f'] = 'Classi CSS'; // CSS Classes +$_MODULE['<{creativeelements}prestashop>_a10443964156b9e87c95e74c8f9baf15'] = 'Rientro'; // Padding +$_MODULE['<{creativeelements}prestashop>_98369609669478919c74c916440e9978'] = 'Margine'; // Margin +$_MODULE['<{creativeelements}prestashop>_4f1f6016fc9f3f2353c0cc7c67b292bd'] = 'Centra'; // Center +$_MODULE['<{creativeelements}prestashop>_b14a348d14021b3f79da6be488d63253'] = 'Allineamento testo'; // Text Align +$_MODULE['<{creativeelements}prestashop>_8435207e2ede48cf57a3a26e10a9e7a3'] = 'Colore del link al passaggio del mouse'; // Link Hover Color +$_MODULE['<{creativeelements}prestashop>_59ece6dc07b89f5c61320dd130579a7f'] = 'Colore del link'; // Link Color +$_MODULE['<{creativeelements}prestashop>_0a06bdec3ccc4e4b6f6401881cf922f6'] = 'Colore intestazione'; // Heading Color +$_MODULE['<{creativeelements}prestashop>_8903861290617267b361478ab7f16f31'] = 'Colore del testo'; // Text Color +$_MODULE['<{creativeelements}prestashop>_603850e072131401265c4fc01027db93'] = 'Tipografia'; // Typography +$_MODULE['<{creativeelements}prestashop>_93f07b720ebf7d1246512569761a5804'] = 'Rimosso'; // Removed +$_MODULE['<{creativeelements}prestashop>_1976d7f704de389d9fe064e08ea35b2d'] = 'Colonna'; // Column +$_MODULE['<{creativeelements}prestashop>_d2c24d59e0baff4d0155fbdf62590867'] = 'Sezione'; // Section +$_MODULE['<{creativeelements}prestashop>_dc4c71563b9bc39a65be853457e6b7b6'] = 'Struttura'; // Structure +$_MODULE['<{creativeelements}prestashop>_b2b2df378a7c7ade199bbaf944cb3f35'] = 'Responsive'; // Responsive +$_MODULE['<{creativeelements}prestashop>_9b6545e4cea9b4ad4979d41bb9170e2b'] = 'Avanzato'; // Advanced +$_MODULE['<{creativeelements}prestashop>_ae284f900f9d6e21ba69144cfc91e41b'] = 'Stile'; // Style +$_MODULE['<{creativeelements}prestashop>_f15c1cae7882448b3fb0404682e17e61'] = 'Contenuto'; // Content +$_MODULE['<{creativeelements}prestashop>_168b82d33f8073018c50a4f658a02559'] = 'Colonne'; // Columns +$_MODULE['<{creativeelements}prestashop>_6ed482754b5780176fd1ba9dd789dea3'] = 'Info su Creative Elements'; // About Creative Elements +$_MODULE['<{creativeelements}prestashop>_e0583393371074d791e836b0087dcbae'] = 'Cronologia revisioni'; // Revision History +$_MODULE['<{creativeelements}prestashop>_b5ccb7d52b4f221253779a94cd40e902'] = 'Presto'; // Soon +$_MODULE['<{creativeelements}prestashop>_5d50889672f6f860d14f502de3de1957'] = 'Colori'; // Colors +$_MODULE['<{creativeelements}prestashop>_d3b67861c9d313014761beb38d771889'] = 'Attenzione: Tutti i cambiamenti non salvati verranno persi.'; // Please note: All unsaved changes will be lost. +$_MODULE['<{creativeelements}prestashop>_248336101b461380a4b2391a7625493d'] = 'Salvato'; // Saved +$_MODULE['<{creativeelements}prestashop>_4f2f5e1d6e2a13469ad431474a68ab82'] = 'Indietro'; // Go Back +$_MODULE['<{creativeelements}prestashop>_2e83ec658a7776a62a320cdee2690826'] = 'Subentra'; // Take Over +$_MODULE['<{creativeelements}prestashop>_ea4788705e6873b424c65e91c2846b19'] = 'Annulla'; // Cancel +$_MODULE['<{creativeelements}prestashop>_47748fe5d78900c50f5bfe078cd3d44d'] = '%s è subentrato e sta effettuando delle modifiche. Vuoi subentrare nella modifica di questa pagina?'; // %s has taken over and is currently editing. Do you want to take over this page editing? +$_MODULE['<{creativeelements}prestashop>_a5dd7c693ee0caedf9aa691116106572'] = 'Sei sicuro di voler rimuovere questo %s?'; // Are you sure you want to remove this %s? +$_MODULE['<{creativeelements}prestashop>_040814c79beb48a59a293776e292ccb9'] = 'Altre Tavolozze'; // More Palettes +$_MODULE['<{creativeelements}prestashop>_5463fe6752b217567e3f1ab1921dd3cc'] = 'Tavolozza Colori'; // Color Palette +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Applica'; // Apply +$_MODULE['<{creativeelements}prestashop>_d94b42030b9785fd754d5c1754961269'] = 'Abbandona'; // Discard +$_MODULE['<{creativeelements}prestashop>_526d688f37a86d3c3f27d0c5016eb71d'] = 'Reimposta'; // Reset +$_MODULE['<{creativeelements}prestashop>_31fde7b05ac8952dacf4af8a704074ec'] = 'Anteprima'; // Preview +$_MODULE['<{creativeelements}prestashop>_c9cc8cce247e49bae79f15173ce97354'] = 'Salva'; // Save +$_MODULE['<{creativeelements}prestashop>_36384a9ea3ec791e6bd4ab6b36f2ff2a'] = 'Tablet'; // Tablet +$_MODULE['<{creativeelements}prestashop>_2310408a63388fe57e3a4177168a8798'] = 'Desktop'; // Desktop +$_MODULE['<{creativeelements}prestashop>_628cef8c7f89a898c3c70b431700841b'] = 'Modalità Responsive'; // Responsive Mode +$_MODULE['<{creativeelements}prestashop>_e4b846392f10f46b032cf155c39a0eaf'] = 'Visualizza pagina'; // View Page +$_MODULE['<{creativeelements}prestashop>_dd1a7e71effdaeffedeebbd060621250'] = 'Pannello dei widget'; // Widgets Panel +$_MODULE['<{creativeelements}prestashop>_b61541208db7fa7dba42c85224405911'] = 'Menu'; // Menu +$_MODULE['<{creativeelements}prestashop>_9804fe0d898c7de798c4e175f59f6672'] = 'Cerca widget…'; // Search Widget... +$_MODULE['<{creativeelements}prestashop>_1907bd03c6adcacb7ad68404b14ca18b'] = 'Aggiungi una nuova sezione'; // Add New Section +$_MODULE['<{creativeelements}prestashop>_16bfbf9c462762cf1cba4134ec53c504'] = 'Caricamento'; // Loading +$_MODULE['<{creativeelements}prestashop>_5230001af73bfa7b6518d06ce7328efa'] = 'Più strutture'; // More Structures +$_MODULE['<{creativeelements}prestashop>_138103c4e1d9c846d0afd000e5b928c8'] = 'Aggiungi elemento'; // Add Item +$_MODULE['<{creativeelements}prestashop>_f2a6c498fb90ee345d997f888fce3b18'] = 'Elimina'; // Delete +$_MODULE['<{creativeelements}prestashop>_fe146ea3246d82386939d718b5869c88'] = 'Selezione icona'; // Select Icon +$_MODULE['<{creativeelements}prestashop>_90589c47f06eb971d548591f23c285af'] = 'Personalizzato'; // Custom +$_MODULE['<{creativeelements}prestashop>typography_control_81cb1a74d81616f475b029b26a548cc9'] = 'Spaziatura carattere'; // Letter Spacing +$_MODULE['<{creativeelements}prestashop>typography_control_2ea0cce3b1e76eb9a13c814937e7d295'] = 'Altezza riga'; // Line-Height +$_MODULE['<{creativeelements}prestashop>_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normale'; // Normal +$_MODULE['<{creativeelements}prestashop>typography_control_ae284f900f9d6e21ba69144cfc91e41b'] = 'Stile'; // Style +$_MODULE['<{creativeelements}prestashop>typography_control_2ff4148554480a37f85efd299df04850'] = 'Trasformazione'; // Transform +$_MODULE['<{creativeelements}prestashop>typography_control_8c489d0946f66d17d73f26366a4bf620'] = 'Peso'; // Weight +$_MODULE['<{creativeelements}prestashop>typography_control_cefc4f7cbc8c34762e0f76703e7e174e'] = 'Famiglia'; // Family +$_MODULE['<{creativeelements}prestashop>typography_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Dimensione'; // Size +$_MODULE['<{creativeelements}prestashop>border_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Colore'; // Color +$_MODULE['<{creativeelements}prestashop>border_control_32954654ac8fe66a1d09be19001de2d4'] = 'Larghezza'; // Width +$_MODULE['<{creativeelements}prestashop>_eb656e41b6da91494775ecf47a51da91'] = 'Tratteggiato'; // Dashed +$_MODULE['<{creativeelements}prestashop>_90c09393a4c0970bc9a6703ad527781c'] = 'Punteggiato'; // Dotted +$_MODULE['<{creativeelements}prestashop>_d909d38d705ce75386dd86e611a82f5b'] = 'Doppio'; // Double +$_MODULE['<{creativeelements}prestashop>_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Solido'; // Solid +$_MODULE['<{creativeelements}prestashop>_6adf97f83acf6453d4a6a4b1070f3754'] = 'Nessuno'; // None +$_MODULE['<{creativeelements}prestashop>border_control_f142def200da13d2a17cd85d74258d54'] = 'Tipo di bordo'; // Border Type +$_MODULE['<{creativeelements}prestashop>background_control_16619cb16904fc183583f843307c4645'] = 'Sfondo di ripiego'; // Background Fallback +$_MODULE['<{creativeelements}prestashop>background_control_69620f6919f430e72c0f67207535605b'] = 'Link video'; // Video Link +$_MODULE['<{creativeelements}prestashop>background_control_db3e3f51c9107e26c9bccf9a188ce2ed'] = 'Riempi'; // Fill +$_MODULE['<{creativeelements}prestashop>background_control_c795dfff10a7c952f4c5438951e9ece9'] = 'Copertina'; // Cover +$_MODULE['<{creativeelements}prestashop>background_control_0e75eff17752bae4ab31af7ad9b45484'] = 'Contenitore'; // Contain +$_MODULE['<{creativeelements}prestashop>background_control_06b9281e396db002010bde1de57262eb'] = 'Automatico'; // Auto +$_MODULE['<{creativeelements}prestashop>background_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Dimensione'; // Size +$_MODULE['<{creativeelements}prestashop>background_control_cfb23be94c536c4a0bc7e9a1e9b902fb'] = 'Ripeti verticalmente'; // Repeat-y +$_MODULE['<{creativeelements}prestashop>background_control_f57da73b22e4c4b324499f5a19c8b782'] = 'Ripeti orizzontalmente'; // Repeat-x +$_MODULE['<{creativeelements}prestashop>background_control_08b9e4f31c7aa3c1cfc97736ed8e6f81'] = 'Non ripetere'; // No-repeat +$_MODULE['<{creativeelements}prestashop>background_control_7020426cfb0a204051be4b3053d2acc8'] = 'Ripetizione'; // Repeat +$_MODULE['<{creativeelements}prestashop>background_control_4457d440870ad6d42bab9082d9bf9b61'] = 'Fisso'; // Fixed +$_MODULE['<{creativeelements}prestashop>background_control_105078d294d30c978ca2badf7f376934'] = 'Scorrevole'; // Scroll +$_MODULE['<{creativeelements}prestashop>background_control_e9cb217697088a98b1937d111d936281'] = 'Allegato'; // Attachment +$_MODULE['<{creativeelements}prestashop>background_control_4d297f5df921dca388a17e3336cad50f'] = 'Sotto a Destra'; // Bottom Right +$_MODULE['<{creativeelements}prestashop>background_control_a088c172f6a893ef408116488ef672cd'] = 'Centrato Sotto'; // Bottom Center +$_MODULE['<{creativeelements}prestashop>background_control_7eb5542553fa5e5db4656e1c16f1316d'] = 'Sotto a Sinistra'; // Bottom Left +$_MODULE['<{creativeelements}prestashop>background_control_d7afdc5ae6dccbb16e24d9cac4067b41'] = 'Centrato a Destra'; // Center Right +$_MODULE['<{creativeelements}prestashop>background_control_cac17249ab9a6f510f995b5005dc94a2'] = 'Centrato'; // Center Center +$_MODULE['<{creativeelements}prestashop>background_control_617e1d17c0297a4b2c409f397618737e'] = 'Centrato a Sinistra'; // Center Left +$_MODULE['<{creativeelements}prestashop>background_control_5f9f678446e1abe7e062b056e755e059'] = 'Sopra a Destra'; // Top Right +$_MODULE['<{creativeelements}prestashop>background_control_a20c9be95933e1fcf306b4b62d3792ea'] = 'Sopra al Centro'; // Top Center +$_MODULE['<{creativeelements}prestashop>background_control_ac71274aea488e58bea2a8c716fc578f'] = 'Sopra a Sinistra'; // Top Left +$_MODULE['<{creativeelements}prestashop>background_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Posizione'; // Position +$_MODULE['<{creativeelements}prestashop>background_control_abd809c9e3c1c08e97740f86b8ceabfb'] = 'Immagine di sfondo'; // Background Image +$_MODULE['<{creativeelements}prestashop>background_control_be53a0541a6d36f6ecb879fa2c584b08'] = 'Immagine'; // Image +$_MODULE['<{creativeelements}prestashop>background_control_75e7422f2fe253fc69d3f6c148d197ee'] = 'Colore di sfondo'; // Background Color +$_MODULE['<{creativeelements}prestashop>background_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Colore'; // Color +$_MODULE['<{creativeelements}prestashop>background_control_8278a49e7da177e78b606cd1fae2f08f'] = 'Tipo di sfondo'; // Background Type +$_MODULE['<{creativeelements}prestashop>background_control_32954654ac8fe66a1d09be19001de2d4'] = 'Larghezza'; // Width +$_MODULE['<{creativeelements}prestashop>background_control_06504aee6c05f084754e10986c07d51e'] = 'Video di sfondo'; // Background Video +$_MODULE['<{creativeelements}prestashop>background_control_d35b51b639528d580362ca7042de6a0e'] = 'Classico'; // Classic +$_MODULE['<{creativeelements}prestashop>_a45da96d0bf6575970f2d27af22be28a'] = 'Sistema'; // System +$_MODULE['<{creativeelements}prestashop>_97e7c9a7d06eac006a28bf05467fcc8b'] = 'Link'; // Link +$_MODULE['<{creativeelements}prestashop>_945d5e233cf7d6240f6b783b36a374ff'] = 'Sinistra'; // Left +$_MODULE['<{creativeelements}prestashop>_2ad9d63b69c4a10a5cc9cad923133bc4'] = 'Sotto'; // Bottom +$_MODULE['<{creativeelements}prestashop>_92b09c7c48c520c3c55e497875da437c'] = 'Destra'; // Right +$_MODULE['<{creativeelements}prestashop>_a4ffdcf0dc1f31b9acaf295d75b51d00'] = 'Sopra'; // Top +$_MODULE['<{creativeelements}prestashop>_7a1920d61156abc05a60135aefe8bc67'] = 'Predefinito'; // Default + +$_MODULE['<{creativeelements}prestashop>backoffice_header_36f76decda17622c3cca1592a5a5bbb5'] = 'Modifica con Creative Elements'; // Edit with Creative Elements +$_MODULE['<{creativeelements}prestashop>backoffice_header_fbf27983c033a1a3a9567cb19b10df48'] = 'Torna all’Editor di PrestaShop'; // Back to PrestaShop Editor +$_MODULE['<{creativeelements}prestashop>creativeelements_1352b53a1f0602c4682ed452b411bac1'] = 'Salva il modulo prima di modificarlo con Creative Elements'; // Please save the form before editing with Creative Elements +$_MODULE['<{creativeelements}prestashop>creativeelements_58e1cede60a89e8489918834221dfe2e'] = 'Il negozio è in modalità manutenzione, per favore autorizza il tuo IP'; // The shop is in maintenance mode, please whitelist your IP +$_MODULE['<{creativeelements}prestashop>creativeelements_5972f8e1a9936ed85e8ad83b600bcc35'] = 'Non è possibile modificare elementi che non vengono visualizzati perché manca un file di sostituzione. Vi preghiamo di contattarci su https://addons.prestashop.com'; // You can not edit items which are not displayed, because an override file is missing. Please contact us on https://addons.prestashop.com +$_MODULE['<{creativeelements}prestashop>_9988f25f46a8a5fbf780ea53f748841e'] = 'Posizione indefinita!'; // Undefined Position! +$_MODULE['<{creativeelements}prestashop>_ad8e46819e3ac7ff26d3db6a887164e6'] = 'Posiziona il contenuto ovunque'; // Place Content Anywhere +$_MODULE['<{creativeelements}prestashop>_f7f19392da30e81c3abf433ce7b8ca38'] = 'Creato il'; // Created on +$_MODULE['<{creativeelements}prestashop>_155d14c40d6267b444be21ad136c5f60'] = 'Modificato il'; // Modified on +$_MODULE['<{creativeelements}prestashop>_49ed4f70af1d8e7ba23a097c3daa9b6b'] = 'Elenco dei modelli'; // Templates List +$_MODULE['<{creativeelements}prestashop>_5a6eb418df400f68052e7725cdc1170a'] = 'Nuovo template'; // Add New Template +$_MODULE['<{creativeelements}prestashop>_e838b63505c498050eccbcd6090a8262'] = 'Modifica template'; // Edit Template +$_MODULE['<{creativeelements}prestashop>_a14e0a7ee36fa87535472a963ba30bea'] = 'File modello'; // Template file +$_MODULE['<{creativeelements}prestashop>_bf50d5e661106d0abe925af3c2e6f7e7'] = 'Testata'; // Header +$_MODULE['<{creativeelements}prestashop>_ded40f2a77c30efc6062db0cbd857746'] = 'Piè di pagina'; // Footer +$_MODULE['<{creativeelements}prestashop>_cfe6e34a4c7f24aad32aa4299562f5b1'] = 'Home'; // Home Page +$_MODULE['<{creativeelements}prestashop>_b60d1950a4271a0e4dd4f647d479dfa4'] = 'Contattaci'; // Contact Page +$_MODULE['<{creativeelements}prestashop>_6a015ba06ba180aa8a893610dbf1061a'] = 'Errore 404'; // 404 Page +$_MODULE['<{creativeelements}prestashop>_235e8d1a54ecddcf1d3ff533331ed416'] = 'Pagina prodotto'; // Product Page +$_MODULE['<{creativeelements}prestashop>_70f23ff594252e51839210b6cc9641fc'] = 'Anteprima'; // Quick View +$_MODULE['<{creativeelements}prestashop>_15cff73eea419d7365dc3b88e95e7367'] = 'Miniatura del prodotto'; // Product Miniature +$_MODULE['<{creativeelements}prestashop>_7bf70debc40b3303954a6c18ae1aea62'] = 'Miniatura'; // Miniature +$_MODULE['<{creativeelements}prestashop>_88331ec25a3ecf67656071351edacce5'] = 'Anteprima impostazioni'; // Preview Settings +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Applica e Anteprima'; // Apply & Preview +$_MODULE['<{creativeelements}prestashop>_20928185e5bc74a3b872efdb77a2d806'] = 'Adatta al contenuto'; // Fit To Content +$_MODULE['<{creativeelements}prestashop>_6b551379c3c0b59326abdaf3b4395bd3'] = 'Sovrapposizione'; // Overlay +$_MODULE['<{creativeelements}prestashop>_31e0a3a16f717e60e27cb65195dcb128'] = 'Pulsante Chiudi'; // Close Button +$_MODULE['<{creativeelements}prestashop>_e873d89b2c012e5f3d22f8540180bd0e'] = 'Impostazioni tema'; // Theme Settings +$_MODULE['<{creativeelements}prestashop>_c14300d0aebc9cf1a8da9f6bd83e700c'] = 'Elenco Font'; // Fonts List +$_MODULE['<{creativeelements}prestashop>_630bd947659ab07c114e5ccef701a7af'] = 'Aggiungi nuovo Font'; // Add New Font +$_MODULE['<{creativeelements}prestashop>_486841ebd4c0bc17e6fc279da5268645'] = 'Modifica Font'; // Edit Font +$_MODULE['<{creativeelements}prestashop>_8ab72d49e1108ccb328f74491ea49c03'] = 'Nome Font'; // Font Name +$_MODULE['<{creativeelements}prestashop>_729d37b0c80d21143c60b3a877b88f43'] = 'Inserisci la famiglia del Font'; // Enter Font Family +$_MODULE['<{creativeelements}prestashop>_e52ada68529abb857b61e9f2cf3ea369'] = 'File dei Font'; // Font Files +$_MODULE['<{creativeelements}prestashop>_2eb11617fc1cce6c73173d413f9c271c'] = 'Aggiungi variazione Font'; // Add Font Variation +$_MODULE['<{creativeelements}prestashop>_729a51874fe901b092899e9e8b31c97a'] = 'Sicuro?'; // Are you sure? +$_MODULE['<{creativeelements}prestashop>_0d9c8dfe174c5be68d35a4055031de0d'] = 'File %s'; // %s File +$_MODULE['<{creativeelements}prestashop>_d68a6107129a6d62c76f49d59ffe9800'] = 'Il formato Web Open Font, utilizzato dai browser moderni'; // The Web Open Font Format, Used by Modern Browsers +$_MODULE['<{creativeelements}prestashop>_73e633e5de0477512fcb1b06f8a6ab89'] = 'Il Web Open Font Format 2, utilizzato dai browser super moderni'; // The Web Open Font Format 2, Used by Super Modern Browsers +$_MODULE['<{creativeelements}prestashop>_fc4106231d0296304e3cafd5d7296d12'] = 'Font TrueType, utilizzati per supportare meglio Safari, Android, iOS'; // TrueType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_d6abbfda58c20a18061c96fda4408779'] = 'Font OpenType, utilizzati per supportare meglio Safari, Android, iOS'; // OpenType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_794df3791a8c800841516007427a2aa3'] = 'Licenza'; // License +$_MODULE['<{creativeelements}prestashop>_c5985660600c4825c7a02653cdd26fe1'] = 'Attiva Licenza'; // Activate License +$_MODULE['<{creativeelements}prestashop>_684b15c2f38b9147cc86e0af9d62ed53'] = 'Si prega di attivare la licenza per ottenere l’accesso illimitato alla libreria di modelli.'; // Please activate your license to get unlimited access to the template library. +$_MODULE['<{creativeelements}prestashop>_4a4fdd49ee2bc115b68859296441fe43'] = 'Stato della licenza:'; // License Status: +$_MODULE['<{creativeelements}prestashop>_924272e395a0e2d3acf641224d5c67d8'] = 'Il tuo sito web è attivato. Vuoi attivare questo sito web con una licenza diversa?'; // Your website is activated. Want to activate this website by a different license? +$_MODULE['<{creativeelements}prestashop>_63cfad19115e3d7777f7767827160582'] = 'Rigenera il CSS'; // Regenerate CSS +$_MODULE['<{creativeelements}prestashop>_be99e107a4ef9dfbfa2f80d5d1ea1ab7'] = 'Gli stili impostati in Creative Elements vengono salvati in file CSS nella cartella Uploads. Ricrea quei file, in base alle impostazioni più recenti.'; // Styles set in Creative Elements are saved in CSS files. Recreate those files, according to the most recent settings. +$_MODULE['<{creativeelements}prestashop>_2846a86c26360bf5060ad147ae5e5757'] = 'Sostituzione dell’URL'; // Replace URL +$_MODULE['<{creativeelements}prestashop>_727ce4730bb0818c4b26f8fffc8f68d9'] = 'Aggiorna l’indirizzo del sito (URL)'; // Update Site Address (URL) +$_MODULE['<{creativeelements}prestashop>_15fa88522f8cb6d0c1fc3a9ac8010731'] = 'È consigliabile fare un backup del database prima di utilizzare l’opzione Sostituzione dell’URL.'; // It is strongly recommended that you backup your database before using Replace URL. +$_MODULE['<{creativeelements}prestashop>_fea9d3952e7afb5f07cee1d876907752'] = 'Inserisci il vecchio e il nuovo URL della tua installazione di PrestaShop, per aggiornare tutti i dati di Creative Elements (importate per i trasferimenti di dominio o per spostarlo su ’HTTPS’).'; // Enter your old and new URLs for your PrestaShop installation, to update all Creative Elements data (Relevant for domain transfers or move to 'HTTPS'). +$_MODULE['<{creativeelements}prestashop>_e60cf455794a35c95ea8d1fef0472731'] = 'Mostra icona di modifica sul frontend'; // Show Edit Icon on Frontend +$_MODULE['<{creativeelements}prestashop>_604354d5a72ee39a59fea613aef87e41'] = 'Visualizza un’icona di modifica sul frontend mentre il dipendente ha una sessione attiva. Cliccando su questa icona si aprirà l’editor live.'; // Displays an edit icon on frontend while employee has active session. By clicking on this icon the live editor will open. +$_MODULE['<{creativeelements}prestashop>_f02c1c38095f6c8954522d0ce7a22695'] = 'Limitare le revisioni'; // Limit Revisions +$_MODULE['<{creativeelements}prestashop>_f1a68d0a9ec7321ff122615cda20e15c'] = 'Imposta il numero massimo di revisioni per contenuto.'; // Sets the maximum number of revisions per content. +$_MODULE['<{creativeelements}prestashop>_ee75e395394c62827452484b6762a3c3'] = 'Disabilita cronologia revisioni'; // Disable Revision History +$_MODULE['<{creativeelements}prestashop>_4606c5e64748843a35978c392679fded'] = 'Disattiva i colori predefiniti'; // Disable Default Colors +$_MODULE['<{creativeelements}prestashop>_d43bf721ede9d072d2301ca64c8625d8'] = 'Se preferisci utilizzare i colori del tuo tema puoi disabilitare questa funzione.'; // If you prefer to inherit the colors from your theme, you can disable this feature. +$_MODULE['<{creativeelements}prestashop>_e04e5c4768c5991e460a58f2cabdc6d3'] = 'Disabilita font predefiniti'; // Disable Default Fonts +$_MODULE['<{creativeelements}prestashop>_c9915f4e48ec2247d30af2034ec81f24'] = 'Se preferisci invece utilizzare i caratteri usati dal tema, puoi disabilitare questa opzione.'; // If you prefer to inherit the fonts from your theme, you can disable this feature here. +$_MODULE['<{creativeelements}prestashop>_aace7931afa15411153641f4fb5dd0fa'] = 'Impostazioni di stile'; // Style Settings +$_MODULE['<{creativeelements}prestashop>_c6083c97affb33b00b4236fc08125b4e'] = 'Puoi nascondere il titolo nelle impostazioni del documento. Funziona con i temi che hanno il selettore ”%s”. Se il selettore del tuo tema è diverso, inseriscilo qui sopra.'; // You can hide the title at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_8a756d3484d64b800c304144d79ff78e'] = 'Selettore dell’involucro del contenuto'; // Content Wrapper Selector +$_MODULE['<{creativeelements}prestashop>_4550c700c57cabfc47b677f26d598c14'] = 'È possibile cancellare margine, padding e max-width dal content wrapper nelle impostazioni del documento. Funziona con i temi che hanno il selettore "%s". Se il selettore del tuo tema è diverso, inseriscilo qui sopra.'; // You can clear margin, padding, max-width from content wrapper at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_4038e06d3f1c2ed9a8b8ba1418842203'] = 'Punto di Interruzione tablet'; // Tablet Breakpoint +$_MODULE['<{creativeelements}prestashop>_df1a7f57a6d0fa52039a36b1ee55851c'] = 'Imposta il punto di interruzione tra i dispositivi desktop e tablet. Sotto questo punto di interruzione apparirà il layout del tablet (Predefinito: %dpx).'; // Sets the breakpoint between desktop and tablet devices. Below this breakpoint tablet layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_5b23136cd3711bdae57560b72e66e923'] = 'Punto di Interruzione mobile'; // Mobile Breakpoint +$_MODULE['<{creativeelements}prestashop>_4f663f113b83a55f1218b5403739d9e0'] = 'Imposta il punto di interruzione tra tablet e dispositivi mobili. Sotto questo punto di interruzione apparirà il layout mobile (Predefinito: %dpx).'; // Sets the breakpoint between tablet and mobile devices. Below this breakpoint mobile layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_9ffc3ccc968a96d902af963c6d7b4e97'] = 'Impostazioni avanzate'; // Advanced Settings +$_MODULE['<{creativeelements}prestashop>_d626d902c43ae80039304aaabb577ebe'] = 'Non modificare queste opzioni senza esperienza, impostazioni errate potrebbero rompere il vostro sito.'; // Do not change these options without experience, incorrect settings might break your site. +$_MODULE['<{creativeelements}prestashop>_8b682d779569cdb4f8eac8f8113882b6'] = 'Metodo di stampa CSS'; // CSS Print Method +$_MODULE['<{creativeelements}prestashop>_86921a38b6b13f5bac7815b64261bfc3'] = 'Uilizza i file di CSS esterni per tutti i fogli di stile generati. Seleziona quest’impostazione per una migliore prestazione (consigliato).'; // Use external CSS files for all generated stylesheets. Choose this setting for better performance (recommended). +$_MODULE['<{creativeelements}prestashop>_df46e4e4a37b992335889fe0bcc9fbc2'] = 'File esterno'; // External File +$_MODULE['<{creativeelements}prestashop>_8654f2b13455edc295f7ce17c14c9887'] = 'Incorporato internamente'; // Internal Embedding +$_MODULE['<{creativeelements}prestashop>_b49eb11b7c3a0762a6df47f7424c4d99'] = 'Maniglie di Modifica'; // Editing Handles +$_MODULE['<{creativeelements}prestashop>_8fabaa06bc2da9ec5a25a0b9ee554e99'] = 'Mostra maniglie di modifica quando si passa il mouse sopra il pulsante di modifica dell’elemento'; // Show editing handles when hovering over the element edit button +$_MODULE['<{creativeelements}prestashop>_7e6a43ce8ac6c832c95ecedb00a6064e'] = 'Escludere le categorie dal widget Modulo'; // Exclude Categories from Module widget +$_MODULE['<{creativeelements}prestashop>_723d690837af8a91be989751fadab183'] = 'Carica la libreria FontAwesome'; // Load FontAwesome Library +$_MODULE['<{creativeelements}prestashop>_c1a1c7d11028c7a1436198ca59331944'] = 'FontAwesome ti dà icone vettoriali scalabili che possono immediatamente essere personalizzati - dimensione, colore, ombra, e tutto ciò che può essere fatto con la potenza di CSS.'; // FontAwesome gives you scalable vector icons that can instantly be customized - size, color, drop shadow, and anything that can be done with the power of CSS. +$_MODULE['<{creativeelements}prestashop>_0016eea9e78adc9ba06072ac9b6a1b75'] = 'Carica la libreria Waypoints'; // Load Waypoints Library +$_MODULE['<{creativeelements}prestashop>_498b278c8d4479bdedb1bb77be02b4f2'] = 'Libreria waypoint è il modo più semplice per attivare una funzione quando si scorre a un elemento.'; // Waypoints library is the easiest way to trigger a function when you scroll to an element. +$_MODULE['<{creativeelements}prestashop>_03ee559731e9434a9740773f516a38df'] = 'Carica la libreria Slick'; // Load Slick Library +$_MODULE['<{creativeelements}prestashop>_050ddbb779fbf2dc5b64861639b5eb41'] = 'Slick è un plugin jQuery per la creazione di caroselli / cursori completamente personalizzabili, reattivi e ottimizzati per i dispositivi mobili che funzionano con qualsiasi elemento HTML.'; // Slick is a jQuery plugin for creating fully customizable, responsive and mobile friendly carousels/sliders that work with any HTML elements. +$_MODULE['<{creativeelements}prestashop>_4829262cecb9828817b33e0f9c907f91'] = 'Esperimenti'; // Experiments +$_MODULE['<{creativeelements}prestashop>_84f8df76775e37ae5a4a2b857220f90b'] = 'Accedi a funzionalità nuove e sperimentali da Creative Elements prima che vengano rilasciate ufficialmente. Poiché queste funzionalità sono ancora in fase di sviluppo, è probabile che cambino, si evolvano o addirittura vengano rimosse del tutto.'; // Access new and experimental features from Creative Elements before they're officially released. As these features are still in development, they are likely to change, evolve or even be removed altogether. +$_MODULE['<{creativeelements}prestashop>_f1dbba0d570fb6cc1b5dcf7c2f7cb374'] = 'Rimuovi gli elementi nascosti'; // Remove Hidden Elements +$_MODULE['<{creativeelements}prestashop>_cafe73a877fb194de8fe2fb509502f61'] = 'Quando nascondi gli elementi in "scheda Avanzate/sezione Responzive", il loro markup verrà rimosso dal DOM.'; // When you hide elements on "Advanced tab / Responsive section" their markup will be removed from DOM. +$_MODULE['<{creativeelements}prestashop>_0000495ba408d49c02c05686a067646c'] = 'Sezione visibilità'; // Visibility Section +$_MODULE['<{creativeelements}prestashop>_d2d862f4b4341afe63f8164ca80f0373'] = 'Se desideri programmare elementi o filtrarli in base a gruppi di clienti selezionati, questa funzione sarà utile. Apparirà nella scheda Avanzate.'; // If you would like to schedule elements or filter them by selected customer groups, then this feature will be handy. It will appear under Advanced tab. +$_MODULE['<{creativeelements}prestashop>_1729a56cfc89021478498fe0c89a843a'] = 'Visibilità'; // Visibility +$_MODULE['<{creativeelements}prestashop>_25f7347236b51a5eae4ba01a7862cb55'] = 'Programma'; // Schedule +$_MODULE['<{creativeelements}prestashop>_08b02383dce834815c99539f02f0fd89'] = 'Gruppo di clienti'; // Customer Group +$_MODULE['<{creativeelements}prestashop>_1c0d77992f834a9640d9e094e7a73fb9'] = 'Mostra per'; // Show for +$_MODULE['<{creativeelements}prestashop>_449ca279e02730b90da2695e4261c154'] = 'Nascondi per'; // Hide for +$_MODULE['<{creativeelements}prestashop>_777475dcd2749b94375fe07762d9d76f'] = 'Seleziona...'; // Select... +$_MODULE['<{creativeelements}prestashop>_e18056ef5b17ae8dda5f90f67c9e8533'] = '%s anno'; // %s year +$_MODULE['<{creativeelements}prestashop>_2fa7fca44cb89fd199a257dc02b3b1e5'] = '%s anni'; // %s years +$_MODULE['<{creativeelements}prestashop>_f44e927446959585ff1c59871ec2d5a3'] = '%s mese'; // %s month +$_MODULE['<{creativeelements}prestashop>_7a9362f7b668d13007042dfeb04377f0'] = '%s mesi'; // %s months +$_MODULE['<{creativeelements}prestashop>_059fb9aa56ea0f60a309243c0f1b7584'] = '%s settimana'; // %s week +$_MODULE['<{creativeelements}prestashop>_a6a22726bcd37b84a44dcb29adcd9028'] = '%s settimane'; // %s weeks +$_MODULE['<{creativeelements}prestashop>_cc0c6aa19f38a763c6138695ea957edc'] = '%s giorno'; // %s day +$_MODULE['<{creativeelements}prestashop>_b95227314c538383cf221dae2172b047'] = '%s giorni'; // %s days +$_MODULE['<{creativeelements}prestashop>_0aaff30699e63ba9bf8133d98b1d6832'] = '%s ora'; // %s hour +$_MODULE['<{creativeelements}prestashop>_99e8d9aecac65d9833e10a2d3bbee4f7'] = '%s ore'; // %s hours +$_MODULE['<{creativeelements}prestashop>_b3f066d7b12126d9a43fc20a691994bb'] = '%s minuto'; // %s min +$_MODULE['<{creativeelements}prestashop>_9bd57b1597a0cd2a2d7e9a10ea01b41d'] = '%s minuti'; // %s mins +$_MODULE['<{creativeelements}prestashop>_6c5505b168fe8a3f3acc9ab255fc8f29'] = '%s secondo'; // %s sec +$_MODULE['<{creativeelements}prestashop>_0174b36c22db64939888c723079becd9'] = '%s secondi'; // %s secs +$_MODULE['<{creativeelements}prestashop>_88183b946cc5f0e8c96b2e66e1c74a7e'] = 'Sconosciuto'; // Unknown +$_MODULE['<{creativeelements}prestashop>_89ee97029bec768357951c7583ff541e'] = 'Non funziona? È possibile impostare un selettore diverso per il wrapper del contenuto in Impostazioni sito.'; // Not working? You can set a different selector for the content wrapper in the Settings page. +$_MODULE['<{creativeelements}prestashop>_00d23a76e43b46dae9ec7aa9dcbebb32'] = 'Abilitato'; // Enabled +$_MODULE['<{creativeelements}prestashop>_b9f5c797ebbf55adccdd8539a65a0241'] = 'Disabilitato'; // Disabled +$_MODULE['<{creativeelements}prestashop>_303efff2ee73c68202a22c21e900df83'] = 'http://docs.webshopworks.com/creative-elements?gt=it'; +$_MODULE['<{creativeelements}prestashop>_4994a8ffeba4ac3140beb89e8d41f174'] = 'Lingua'; // Language +$_MODULE['<{creativeelements}prestashop>_c10ffb2e13c40ebe8294e296b7d499b2'] = 'Effetto di scorrimento'; // Scrolling Effects +$_MODULE['<{creativeelements}prestashop>_1e7581a778b92c0a0090b551a1a8d068'] = 'Scorrimento verticale'; // Vertical Scroll +$_MODULE['<{creativeelements}prestashop>_4467c46a4d7150d5fb2079bd0fde510c'] = 'Scorrimento orizzontale'; // Horizontal Scroll +$_MODULE['<{creativeelements}prestashop>_6f7956741d5d673ff0c8eacc8d8c961c'] = 'Trasparenza'; // Transparency +$_MODULE['<{creativeelements}prestashop>_85a7cd587d6142dbfc1a4de05af7b75d'] = 'Scalatura'; // Scale +$_MODULE['<{creativeelements}prestashop>_a0db49ba470c1c9ae2128c3470339153'] = 'Livello'; // Level +$_MODULE['<{creativeelements}prestashop>_f3b666f2a16c1deb05bd6aa7eacfeb92'] = 'X Punto di ancoraggio'; // X Anchor Point +$_MODULE['<{creativeelements}prestashop>_b41864fcc199583ca5c19b10e0afc25a'] = 'X Punto di ancoraggio'; // Y Anchor Point +$_MODULE['<{creativeelements}prestashop>_85cfe2037fb50aaf0632e12e655ce3db'] = 'Applica effetti su'; // Apply Effects On +$_MODULE['<{creativeelements}prestashop>_31978abc991a7e1367f73b112e817c7d'] = 'Effetti relativi a'; // Effects Relative To +$_MODULE['<{creativeelements}prestashop>_8d6f3510a5cca2c1281c9c6afe7e0da2'] = 'Viewport'; // Viewport +$_MODULE['<{creativeelements}prestashop>_b670b69ddb8e225df6bb7ad005d3c33e'] = 'Toda la página'; // Pagina intera +$_MODULE['<{creativeelements}prestashop>_c26f05fe62ad1f8fc2a83eddd105285b'] = 'Effetti Mouse'; // Mouse Effects +$_MODULE['<{creativeelements}prestashop>_96c30ab1599bf72dca1549df71fe32af'] = 'Traccia del mouse'; // Mouse Track +$_MODULE['<{creativeelements}prestashop>_8ac8e312b9397d6c7a2c5b1b63967803'] = 'Inclinazione 3D'; // 3D Tilt +$_MODULE['<{creativeelements}prestashop>_fd1dd0c603be8170f9eae0be9f2f6afb'] = 'Direzione'; // Direct +$_MODULE['<{creativeelements}prestashop>_d8d76e03141ed1cf0d5704df71efbfef'] = 'Opposto'; // Opposite +$_MODULE['<{creativeelements}prestashop>_d8f6d391ba573fe747a3360afb99904d'] = 'Fisso'; // Sticky +$_MODULE['<{creativeelements}prestashop>_79441290f51f6ddfd0bd605d31b5d913'] = 'Fisso su'; // Sticky On +$_MODULE['<{creativeelements}prestashop>_6db6ce4ce0746f333c58972e1e3682bf'] = 'Effetti Offset'; // Effects Offset +$_MODULE['<{creativeelements}prestashop>_9218088d5225c7174f7299cb339ebce9'] = 'Rimani in colonna'; // Stay In Column +$_MODULE['<{creativeelements}prestashop>_f2f52cbf3a183f750f261f615e25d622'] = 'Nascondi su scroll'; // Hide on Scroll +$_MODULE['<{creativeelements}prestashop>_c1171931c7b83ccac8c962e368963010'] = 'Fisso'; // Sticked +$_MODULE['<{creativeelements}prestashop>_2ff4148554480a37f85efd299df04850'] = 'Transform'; // Transform +$_MODULE['<{creativeelements}prestashop>_33a9fad969f69834a37b94c729d98b2a'] = 'Ruota 3D'; // 3D Rotate +$_MODULE['<{creativeelements}prestashop>_b78a58fa389c15e3e9676406754bb1df'] = 'Ruota X'; // Rotate X +$_MODULE['<{creativeelements}prestashop>_0d10ed97cb17c5220132a845f6a78d0a'] = 'Ruota Y'; // Rotate Y +$_MODULE['<{creativeelements}prestashop>_a80420eef88d11f77532f1b9cb467fa3'] = 'Prospettiva'; // Perspective +$_MODULE['<{creativeelements}prestashop>_85702e5968e1616bd5c577cf306b9806'] = 'Offset X'; // Offset X +$_MODULE['<{creativeelements}prestashop>_73411f5996beaef37222d8cac0b89b71'] = 'Offset Y'; // Offset Y +$_MODULE['<{creativeelements}prestashop>_2d69a9a5782855ac84602cc45863f342'] = 'Mantenere le proporzioni'; // Keep Proportions +$_MODULE['<{creativeelements}prestashop>_df1195616b85f74c8828e20c5781cdd7'] = 'Scalatura X'; // Scale X +$_MODULE['<{creativeelements}prestashop>_979de706f6ea1f9eb5fba71c83a56c99'] = 'Scalatura Y'; // Scale Y +$_MODULE['<{creativeelements}prestashop>_2f2227d480b0c69364d7fddfecb82bd0'] = 'Skew'; // Skew +$_MODULE['<{creativeelements}prestashop>_8bf35b556bf5a142730e8a8ed3d8137a'] = 'Skew X'; // Skew X +$_MODULE['<{creativeelements}prestashop>_15c7890285219037e6f29c0814063128'] = 'Skew Y'; // Skew Y +$_MODULE['<{creativeelements}prestashop>_fb7d5e3a3f491ac9d3b6711daa32cd00'] = 'Flip orizzontale'; // Flip Horizontal +$_MODULE['<{creativeelements}prestashop>_5b83f92ddc4d4ff9e3a211c23268665d'] = 'Flip verticale'; // Flip Vertical +$_MODULE['<{creativeelements}prestashop>_29d94dad2c561873cffebf8d5ee4ba0c'] = 'Innesco da'; // Trigger By +$_MODULE['<{creativeelements}prestashop>_42e6feb7f76e910efcda54034ecc83ce'] = 'CSS personalizzato'; // Custom CSS +$_MODULE['<{creativeelements}prestashop>_c5c6bcf867da29493e4bb1bd4b6b0a78'] = 'Utilizza "selector" per scegliere come target l’elemento wrapper. Esempi:'; // Use "selector" to target wrapper element. Examples: +$_MODULE['<{creativeelements}prestashop>_756bcf5c0d47a6c968964d25f0eeaf57'] = "/* Per elemento principale */\nselector { color: red; }\n/* Per elemento figlio */\nselector .child-element { margin: 10px; }\n/* Per selettore personalizzato */\n.my-class { text-align: center; }"; +$_MODULE['<{creativeelements}prestashop>_80460385b65514494dcbb9fe041905d1'] = 'Fai clic sul pulsante modifica per cambiare questo testo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; +$_MODULE['<{creativeelements}prestashop>_756b97abbc9f4c13c541b1adf847eaf0'] = 'Pagina Facebook'; // Facebook Page +$_MODULE['<{creativeelements}prestashop>_d8a2783eec9416dc80f620f6dfba578c'] = 'Pulsante Facebook'; // Facebook Button +$_MODULE['<{creativeelements}prestashop>_c859113fb39b64631ca542ac10b0a7d5'] = 'Flip Box'; // Flip Box +$_MODULE['<{creativeelements}prestashop>_a601e28fb6c693bef281e5e63179674d'] = 'Call to Action'; // Call to Action +$_MODULE['<{creativeelements}prestashop>_e64465da4a42d65847b321045b155602'] = 'Conto alla rovescia'; // Countdown +$_MODULE['<{creativeelements}prestashop>_c4d22d7c40de128eb983fcf5f2ae2674'] = 'Carosello Testimonianze'; // Testimonial Carousel +$_MODULE['<{creativeelements}prestashop>_dbade2f6a2f7257aa7377edb1c2f1c4a'] = 'Hotspot immagine'; // Image Hotspot +$_MODULE['<{creativeelements}prestashop>_0016012d63bde0bbb9a8c4e7e5ba113f'] = 'Ricerca AJAX'; // AJAX Search +$_MODULE['<{creativeelements}prestashop>_b0c309bbd6756d4e0d4dbb491dee248a'] = 'TrustedShops recensioni'; // TrustedShops Reviews +$_MODULE['<{creativeelements}prestashop>_5d2d75cb0a2913351601b255eaa17bb6'] = 'Griglia prodotto'; // Product Grid +$_MODULE['<{creativeelements}prestashop>_aeb0c8a362126a14711eb2441769f851'] = 'Carosello prodotto'; // Product Carousel +$_MODULE['<{creativeelements}prestashop>_2e9436e79e59f39483f89ddeb4c9fac6'] = 'Scatola prodotto'; // Product Box +$_MODULE['<{creativeelements}prestashop>_396cfc95445a375fa678d71c6657fd21'] = 'Slider immagini'; // Image Slider +$_MODULE['<{creativeelements}prestashop>_1e56256dd5d600c0f0bf54ca1259139d'] = 'Iscrizione Newsletter'; // Email Subscription +$_MODULE['<{creativeelements}prestashop>_2750dfebe7e01be17a0aaadf6b5effcc'] = 'Albero delle categorie'; // Category Tree +$_MODULE['<{creativeelements}prestashop>_e55f75a29310d7b60f7ac1d390c8ae42'] = 'Modulo'; // Module +$_MODULE['<{creativeelements}prestashop>_a7c83a652241f74e9e8c13d4a8e77327'] = 'Logo del negozio'; // Shop Logo +$_MODULE['<{creativeelements}prestashop>_c62ada394e70783b9d5c00bc249af5a6'] = 'Titolo del negozio'; // Shop Title +$_MODULE['<{creativeelements}prestashop>_b75443a19207ed3a3552edda86536857'] = 'Carrello'; // Shopping Cart +$_MODULE['<{creativeelements}prestashop>_ca9085e1c300127e6d45bb7cc9a00a1c'] = 'Menu Navigazione'; // Nav Menu +$_MODULE['<{creativeelements}prestashop>_6e9accb242f0c478ccd34428e96c782b'] = 'Selettore della lingua'; // Language Selector +$_MODULE['<{creativeelements}prestashop>_162a8c580f44c2fe1357f6aab84ef88a'] = 'Selettore di valuta'; // Currency Selector +$_MODULE['<{creativeelements}prestashop>_b9aefa40a54680bb258f9f9569290fae'] = 'Nome prodotto'; // Product Name +$_MODULE['<{creativeelements}prestashop>_646911b123e94f0fb11d711926dd2c4b'] = 'Badges prodotto'; // Product Badges +$_MODULE['<{creativeelements}prestashop>_76dd13f20840d624f3da3784f9d72c92'] = 'Immagine prodotto'; // Product Images +$_MODULE['<{creativeelements}prestashop>_3c38027cd61ce6345509574bc269f54c'] = 'Imagen producto'; // Product Image +$_MODULE['<{creativeelements}prestashop>_e4cc585947db6303293acd6e50e23abd'] = 'Prezzo prodotto'; // Product Price +$_MODULE['<{creativeelements}prestashop>_a3598f51ebb4d31d7e7811fc0fbd358f'] = 'Valutazione prodotto'; // Product Rating +$_MODULE['<{creativeelements}prestashop>_4cc55681d14e73c3febdf5dd0566315c'] = 'Conto alla rovescia di sconto'; // Sale Countdown Sconto +$_MODULE['<{creativeelements}prestashop>_2eb2d7fb081e1ae3127a46c53f10119e'] = 'Immagine di marca'; // Brand Image +$_MODULE['<{creativeelements}prestashop>_d20724dd5e4e41245018a3626478e81e'] = 'Meta prodotto'; // Product Meta +$_MODULE['<{creativeelements}prestashop>_36e3402e4ddef43e92b99aef016c057e'] = 'Breve descrizione'; // Short Description +$_MODULE['<{creativeelements}prestashop>_c12b4ee170ad3dbeda03b91102c76da2'] = 'Variazioni prodotto'; // Product Variations +$_MODULE['<{creativeelements}prestashop>_d0629ccdf9ac5d63566c3f46f375b4a8'] = 'Stock di prodotti'; // Product Stock +$_MODULE['<{creativeelements}prestashop>_608315af4932b03356df72ac18092446'] = 'Quantità prodotto'; // Product Quantity +$_MODULE['<{creativeelements}prestashop>_638f592f71fc3fac3351534e69f9d29f'] = 'Aggiungi al carrello'; // Add to Cart +$_MODULE['<{creativeelements}prestashop>_87f3cd376f8aa27326148860be759c19'] = 'caratteristiche prodotto'; // Product Features +$_MODULE['<{creativeelements}prestashop>_6a5373df703ab2827a4ba7facdfcf779'] = 'Aggiungi alla lista dei desideri'; // Add to Wishlist +$_MODULE['<{creativeelements}prestashop>_854ee576475a63775d79cbfd6e4b13b6'] = 'Descrizione prodotto'; // Product Description +$_MODULE['<{creativeelements}prestashop>_a1e3a46a20f81b1e21b30156a2370812'] = 'Allegati prodotto'; // Product Attachments +$_MODULE['<{creativeelements}prestashop>_167881850315c4df68e31d56fd9dd5d9'] = 'Condivisione prodotto'; // Product Share +$_MODULE['<{creativeelements}prestashop>_1d845dde77864747f09c10275b281f1a'] = 'Blocco prodotto'; // Product Block +$_MODULE['<{creativeelements}prestashop>_01f00f96696da28ccd6583f819385e71'] = 'Percorso testo'; // Text Path +$_MODULE['<{creativeelements}prestashop>_03ac26b00f3492797a3c8d54f0337c9b'] = 'Aggiungi il tuo testo curvo qui'; // Add Your Curvy Text Here +$_MODULE['<{creativeelements}prestashop>_233017ea023bfe5ee5cebc8a7970f06c'] = 'Tipo di percorso'; // Path Type +$_MODULE['<{creativeelements}prestashop>_d911b34823c7674c292556dc56148c27'] = 'Onda'; // Wave +$_MODULE['<{creativeelements}prestashop>_2b73f91683611c489560a1d163e37902'] = 'Arco'; // Arc +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Cerchio'; // Circle +$_MODULE['<{creativeelements}prestashop>_4803e6b9e63dabf04de980788d6a13c4'] = 'Linea'; // Line +$_MODULE['<{creativeelements}prestashop>_01733ae48f19ae284165e55dd2934b61'] = 'Ovale'; // Oval +$_MODULE['<{creativeelements}prestashop>_c978545ade9f5ce21bfa0353c04feda9'] = 'Spirale'; // Spiral +$_MODULE['<{creativeelements}prestashop>_22c6682f4ddd4efe02aafd67ba1896e6'] = 'Vuoi creare percorsi di testo personalizzati?'; // Want to create custom text paths? +$_MODULE['<{creativeelements}prestashop>_e96dee4d699a25d7033bbd706a416ee9'] = 'Direzione testo'; // Text Direction +$_MODULE['<{creativeelements}prestashop>_ae2023195822977b20f4557cb2c231e5'] = 'Mostra percorso'; // Show Path +$_MODULE['<{creativeelements}prestashop>_a11b6ae4ff43bc27097fa1899010cd4a'] = 'Spaziatura parole'; // Word Spacing +$_MODULE['<{creativeelements}prestashop>_c9fc5918d5031ae2a84dc85c1392d236'] = 'Punto di partenza'; // Starting Point +$_MODULE['<{creativeelements}prestashop>_ac70412e939d72a9234cdebb1af5867b'] = 'Percorso'; // Path +$_MODULE['<{creativeelements}prestashop>_8e763d9065582268c9ffa345a3f81f5f'] = 'Tratto'; // Stroke +$_MODULE['<{creativeelements}prestashop>_e72cd05de3b0f5e87e01f1043d250226'] = 'Tratto di testo'; // Text Stroke +$_MODULE['<{creativeelements}prestashop>_fb4e932947262c76d46e7671a667eb03'] = 'Colore del tratto'; // Stroke Color +$_MODULE['<{creativeelements}prestashop>_1ec22a9ec8fc7840e53abdf9f2761db4'] = 'Incollare l’URL della pagina Facebook.'; // Paste the URL of the Facebook page. +$_MODULE['<{creativeelements}prestashop>_3d1f92a565d3b1a61880236e33c49bf3'] = 'Timeline'; // Timeline +$_MODULE['<{creativeelements}prestashop>_87f9f735a1d36793ceaecd4e47124b63'] = 'Eventi'; // Events +$_MODULE['<{creativeelements}prestashop>_41de6d6cfb8953c021bbe4ba0701c8a1'] = 'Messaggi'; // Messages +$_MODULE['<{creativeelements}prestashop>_f4629a6a3f69f39737e590fe9072a20f'] = 'Intestazione Piccola'; // Small Header +$_MODULE['<{creativeelements}prestashop>_7e109af3848e4849f6230a1a04d45859'] = 'Foto profilo'; // Profile Photos +$_MODULE['<{creativeelements}prestashop>_cd7c1196d2d970d5cfb3f84af649a5ee'] = 'Pulsante personalizzato CTA'; // Custom CTA Button +$_MODULE['<{creativeelements}prestashop>_98b82c200a2e309b24cb481970f3fcc4'] = 'Like'; // Like +$_MODULE['<{creativeelements}prestashop>_cab1fe09bb50a19ae3975657afeec8f4'] = 'Raccomandare'; // Recommend +$_MODULE['<{creativeelements}prestashop>_eb6d8ae6f20283755b339c0dc273988b'] = 'Standard'; // Standard +$_MODULE['<{creativeelements}prestashop>_85967e33b3ebf9c859f2b50ef9bf151d'] = 'Bottone conteggio'; // Button Count +$_MODULE['<{creativeelements}prestashop>_f2f81540eb0898cdbbbbeae97e17c3e0'] = 'Box conteggio'; // Box Count +$_MODULE['<{creativeelements}prestashop>_f4a216cd03ef98f742fa9dffedc6f1f9'] = 'Pulsante Condividi'; // Share Button +$_MODULE['<{creativeelements}prestashop>_e64df1d7c22b9638f084ce8a4aff3ff3'] = 'URL di destinazione'; // Target URL +$_MODULE['<{creativeelements}prestashop>_f88589c3e803217e3f6fe9d8e740e6e8'] = 'Pagina corrente'; // Current Page +$_MODULE['<{creativeelements}prestashop>_5835bab1ade0060909e31a06af2e2cde'] = 'Davanti'; // Front +$_MODULE['<{creativeelements}prestashop>_0557fa923dcee4d0f86b1409f5c2167f'] = 'Dietro'; // Back +$_MODULE['<{creativeelements}prestashop>_2a458f5ab135bec8376047e4fd5bec7b'] = 'Elemento grafico'; // Graphic Element +$_MODULE['<{creativeelements}prestashop>_714341d9339756588d1dc724991c2b9a'] = 'Clicca qui'; // Click Here +$_MODULE['<{creativeelements}prestashop>_63295c99f929bee9eed51f39328abd5e'] = 'Applicare al Link'; // Apply Link on +$_MODULE['<{creativeelements}prestashop>_eceba382c8d2965c9969f3c50e38fd1d'] = 'Solo Bottone'; // Button Only +$_MODULE['<{creativeelements}prestashop>_3974ce153db569952e044cdfdfbc83cd'] = 'Interamente'; // Whole Box +$_MODULE['<{creativeelements}prestashop>_0f714135a0bce5c010291b55524b0f2e'] = 'Effetto Flip'; // Flip Effect +$_MODULE['<{creativeelements}prestashop>_67727c06d3264f409d0e11009b322911'] = 'Direzione Flip'; // Flip Direction +$_MODULE['<{creativeelements}prestashop>_258f49887ef8d14ac268c92b02503aaa'] = 'Su'; // Up +$_MODULE['<{creativeelements}prestashop>_08a38277b0309070706f6652eeae9a53'] = 'Giù'; // Down +$_MODULE['<{creativeelements}prestashop>_a0157ad2638ad23725b7ab940ea92500'] = 'Profondità 3D'; // 3D Depth +$_MODULE['<{creativeelements}prestashop>_3cfce651e667ab85486dd42a8185f98a'] = 'Box'; // Box +$_MODULE['<{creativeelements}prestashop>_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normale'; // Normal +$_MODULE['<{creativeelements}prestashop>_eee0168be69b854c20621fc6f01cc3fc'] = 'Hover'; // Hover +$_MODULE['<{creativeelements}prestashop>_e24ee2487879116dcab772c0ac4fe341'] = 'Focus'; // Focus +$_MODULE['<{creativeelements}prestashop>_f309bf4bccf801eb2fe4541107671578'] = 'Nastro'; // Ribbon +$_MODULE['<{creativeelements}prestashop>_5b469fd01889ec12f1e84c6e66829fc1'] = 'Sopra'; // Above +$_MODULE['<{creativeelements}prestashop>_45b5de8fb2930cf2cc1dc2c6d20bd72a'] = 'Testo Pulsante'; // Button Text +$_MODULE['<{creativeelements}prestashop>_de6e9435dd82a9bf0416380e2b093166'] = 'Icona Pulsante'; // Button Icon +$_MODULE['<{creativeelements}prestashop>_d6fec62129acbb27535963e1bab40acc'] = 'Larghezza minima'; // Min. Width +$_MODULE['<{creativeelements}prestashop>_a282e4564a52e78b82e904ffb22ec983'] = 'Altezza minima'; // Min. Height +$_MODULE['<{creativeelements}prestashop>_d35b51b639528d580362ca7042de6a0e'] = 'Classico'; // Classic +$_MODULE['<{creativeelements}prestashop>_c795dfff10a7c952f4c5438951e9ece9'] = 'Cover'; // Cover +$_MODULE['<{creativeelements}prestashop>_021cee4b91f9ef9dccdbc396c88fbc96'] = 'Posizione Verticale'; // Vertical Position +$_MODULE['<{creativeelements}prestashop>_3338cc479e22ce066463f8a571039a1b'] = 'Effetti Hover'; // Hover Effects +$_MODULE['<{creativeelements}prestashop>_d7f3c1bb6150f237c08a4ab1e69c5ba9'] = 'Animazione sequenziata'; // Sequenced Animation +$_MODULE['<{creativeelements}prestashop>_3711e805016ec3364cac6040610418ae'] = 'Colore di Sovrapposizione'; // Overlay Color +$_MODULE['<{creativeelements}prestashop>_86176e1d3dd3649de183dc33b7750f62'] = 'Modalità di fusione'; // Blend Mode +$_MODULE['<{creativeelements}prestashop>_a585b417342e2b83baa9e0c91631b635'] = 'Durata transizione'; // Transition Duration +$_MODULE['<{creativeelements}prestashop>_14c841eea7774b78caf79c58989f9625'] = 'Scadenza'; // Due Date +$_MODULE['<{creativeelements}prestashop>_5e27ff9d1365046388c9422316d0aecb'] = 'Data impostata in base al fuso orario: %s.'; // Date set according to your timezone: %s. +$_MODULE['<{creativeelements}prestashop>_e807d3ccf8d24c8c1a3d86db5da78da8'] = 'Giorni'; // Days +$_MODULE['<{creativeelements}prestashop>_6a7e73161603d87b26a8eac49dab0a9c'] = 'Ore'; // Hours +$_MODULE['<{creativeelements}prestashop>_f670ea66cfb0e90bd6090472ad692694'] = 'Minuti'; // Minutes +$_MODULE['<{creativeelements}prestashop>_8f19a8c7566af54ea8981029730e5465'] = 'Secondi'; // Seconds +$_MODULE['<{creativeelements}prestashop>_91e23f92acf00ad0c0a49d05a0412473'] = 'Etichetta personalizzata'; // Custom Label +$_MODULE['<{creativeelements}prestashop>_3c1bb91f28c38aed22a0b45bc185efda'] = 'Azioni dopo la scadenza'; // Actions After Expire +$_MODULE['<{creativeelements}prestashop>_4202ef115ebede37eb22297113f5fb32'] = 'Reindirizzare'; // Redirect +$_MODULE['<{creativeelements}prestashop>_dea4346d3e834aa308004b9d9a3bddd0'] = 'Mostra messaggio'; // Show Message +$_MODULE['<{creativeelements}prestashop>_13ea583f6474cdce6c0c9b289b652ffe'] = 'Testimonianze'; // Testimonials +$_MODULE['<{creativeelements}prestashop>_9a56fece0f74241ee0ad926dae7142af'] = 'Immagine in linea'; // Image Inline +$_MODULE['<{creativeelements}prestashop>_6d8a959b6100d1127c23225c11fa883b'] = 'Immagine impilata'; // Image Stacked +$_MODULE['<{creativeelements}prestashop>_0feb1fedcd7c19a716f395aaaee18724'] = 'Immagine sopra'; // Image Above +$_MODULE['<{creativeelements}prestashop>_225bf3d9290b5f536b2e442259e78652'] = 'Carosello'; // Carousel +$_MODULE['<{creativeelements}prestashop>_11b2f0f6f0bc356b0016cef1f65d43f7'] = 'Elementi hotspot'; // Hotspots +$_MODULE['<{creativeelements}prestashop>_1ba9660cdf805a4d401168d890e267f0'] = 'ID TrustedShops'; // TrustedShops Id +$_MODULE['<{creativeelements}prestashop>_96a3a918504b7fc5557a988a909b8731'] = 'Hai ricevuto il tuo TS ID personale quando ti sei registrato con Trusted Shops.'; // You received your personal TS ID when you registered with Trusted Shops. +$_MODULE['<{creativeelements}prestashop>_19c1a6a025c55f0f62ace3d44736df57'] = 'Filtro recensioni'; // Filter Reviews +$_MODULE['<{creativeelements}prestashop>_eb92025cb8c66f1850c13a9b602a1856'] = 'Mostra tutto'; // Show all +$_MODULE['<{creativeelements}prestashop>_7ed67a77aee0decb9cad36d739c734ad'] = 'Mostra da %d Stelle'; // Show from %d Stars +$_MODULE['<{creativeelements}prestashop>_34e80a799d144cfe4af46815e103f017'] = 'Recensioni'; // Reviews +$_MODULE['<{creativeelements}prestashop>_44749712dbec183e983dcd78a7736c41'] = 'Data'; // Date +$_MODULE['<{creativeelements}prestashop>_0be8406951cdfda82f00f79328cf4efc'] = 'Commento'; // Comment +$_MODULE['<{creativeelements}prestashop>_56ee3495a32081ccb6d2376eab391bfa'] = 'Listato'; // Listing +$_MODULE['<{creativeelements}prestashop>_cf8156f1f57a8603cd6b3a28c9c2c61b'] = 'Prodotti sponsorizzati'; // Featured Products +$_MODULE['<{creativeelements}prestashop>_7f82cf6868d89ca72d670092caedfb86'] = 'Offerte'; // Prices Drop +$_MODULE['<{creativeelements}prestashop>_1529636c2dd134b028a08f7b131115b5'] = 'Nuovi prodotti'; // New Products +$_MODULE['<{creativeelements}prestashop>_e4e3e01496bc4f69bb08fc7da19f6d45'] = 'Più venduti'; // Best Sales +$_MODULE['<{creativeelements}prestashop>_534ed3f39af7a636f6cf7a59f74fe824'] = 'Visti di recente'; // Recently Viewed +$_MODULE['<{creativeelements}prestashop>_347da0da598694c57fff1cbaa197d615'] = 'Prodotti correlati'; // Related Products +$_MODULE['<{creativeelements}prestashop>_640925b217801653719fa252c768f21e'] = 'Prodotti per marca'; // Products by Brand +$_MODULE['<{creativeelements}prestashop>_a086d764f6d125919a1f1ae36610be98'] = 'Prodotti per fornitore'; // Products by Supplier +$_MODULE['<{creativeelements}prestashop>_3543501e965f5cae13f8257f51c96bf7'] = 'Specifica i prodotti'; // Custom Products +$_MODULE['<{creativeelements}prestashop>_8a4f5a66d0fcc9d13614516db6e3d47a'] = 'Prodotti della stessa categoria'; // Products in the same category +$_MODULE['<{creativeelements}prestashop>_704d59dbf9c0f798de6d48d9514f8c93'] = 'Prodotti con la stessa marca'; // Products with the same brand +$_MODULE['<{creativeelements}prestashop>_39a3224a7760b9e3963f1d91b2a1679c'] = 'Prodotti con lo stesso fornitore'; // Products with the same supplier +$_MODULE['<{creativeelements}prestashop>_64b7a126e62d47bb341dff4b51ef8ee4'] = 'Prodotto attuale'; // Current Product +$_MODULE['<{creativeelements}prestashop>_068f80c7519d0528fb08e82137a72131'] = 'Prodotti'; // Products +$_MODULE['<{creativeelements}prestashop>_068f80c7519d0528fb08e82137a72131'] = 'Prodotto'; // Product +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Categoria'; // Category +$_MODULE['<{creativeelements}prestashop>_e22269bb51f9f2394e148716babbafbb'] = 'Popolarità'; // Popularity +$_MODULE['<{creativeelements}prestashop>_f8a385c7fdc1e711a02ad3054f7d6107'] = 'Volume delle vendite'; // Sales Volume +$_MODULE['<{creativeelements}prestashop>_885b3c534ec909cf87987897bfba2235'] = 'Arrivo'; // Arrival +$_MODULE['<{creativeelements}prestashop>_78d3b698da1e3dead203cce8f05e98d9'] = 'Direzione ordine'; // Order Direction +$_MODULE['<{creativeelements}prestashop>_cf3fb1ff52ea1eed3347ac5401ee7f0c'] = 'Ascendente'; // Ascending +$_MODULE['<{creativeelements}prestashop>_e3cf5ac19407b1a62c6fccaff675a53b'] = 'Discendente'; // Descending +$_MODULE['<{creativeelements}prestashop>_bac39878c1766a7a8552263903b9eeb9'] = 'Randomizza'; // Randomize +$_MODULE['<{creativeelements}prestashop>_5d1dba09dcca2334ab1c3345824e2141'] = 'Limite del prodotto'; // Product Limit +$_MODULE['<{creativeelements}prestashop>_9e9116fc9c6c97bf62e851175f2be9a1'] = 'Seconda immagine'; // Second Image +$_MODULE['<{creativeelements}prestashop>_21c9820a0ca58c27fc6c2da73e1a2641'] = 'Mostra seconda immagine al passaggio del mouse, se esiste'; // Show second image on hover if exists +$_MODULE['<{creativeelements}prestashop>_8df278efb191bfec176ff8dd42668fa9'] = 'Max. lunghezza'; // Max. Length +$_MODULE['<{creativeelements}prestashop>_d090bb34c5334e3f8307d4d14295dbc0'] = 'Prezzo regolare'; // Regular Price +$_MODULE['<{creativeelements}prestashop>_ff5627f178b47dbd65d0cc229a956c4e'] = 'Badges'; // Badges +$_MODULE['<{creativeelements}prestashop>_f2cd171bd42220283b7a595c3ff2aaaf'] = 'Sconto'; // Sale +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Nuovo'; // New +$_MODULE['<{creativeelements}prestashop>_4492081ca02b059f9e8af4ddaf0f7292'] = 'Pacco'; // Pack +$_MODULE['<{creativeelements}prestashop>_2ef464d50f6acd767fb3424910995218'] = 'Out-of-Stock'; // Out-of-Stock +$_MODULE['<{creativeelements}prestashop>_50155057b32fd0eac6419c9303a484a6'] = 'Spaziatura righe'; // Row Gap +$_MODULE['<{creativeelements}prestashop>_72f2d9457fc51fdf260b4bc7a467d537'] = 'Consenti multilinea'; // Allow Multiline +$_MODULE['<{creativeelements}prestashop>_fb5befd93e30eba6a71fef4b32a65e9a'] = 'Distanza massima'; // Top Distance +$_MODULE['<{creativeelements}prestashop>_271e53cc1d1dfb05e14b2dc83b4edb9e'] = 'Distanza sinistra'; // Left Distance +$_MODULE['<{creativeelements}prestashop>_965cbdf786f774c2d426dcc19a039aa4'] = 'Distanza giusta'; // Right Distance +$_MODULE['<{creativeelements}prestashop>_3f65d6e17a11466983fd177702cf6a71'] = 'Modulo di Contatto'; // Contact Form +$_MODULE['<{creativeelements}prestashop>_3481dc97ec8ba3c605cdc753aff1fcf0'] = 'Campi modulo'; // Form Fields +$_MODULE['<{creativeelements}prestashop>_e0626222614bdee31951d84c64e5e9ff'] = 'Seleziona'; // Select +$_MODULE['<{creativeelements}prestashop>_b021df6aac4654c454f46c77646e745f'] = 'Etichetta'; // Label +$_MODULE['<{creativeelements}prestashop>_68753d36ec0c4d7768b20993268d68d1'] = 'Segnaposto'; // Placeholder +$_MODULE['<{creativeelements}prestashop>_530f488f7a9800411efc6926ab189708'] = 'Righe'; // Rows +$_MODULE['<{creativeelements}prestashop>_902b0d55fddef6f8d651fe1035b7d4bd'] = 'Errore'; // Error +$_MODULE['<{creativeelements}prestashop>_4f8222964f9a317cef99dddc23a121bd'] = 'Casella di controllo'; // Checkbox +$_MODULE['<{creativeelements}prestashop>_b22aeaf14deafb2ea0d4517349e59a8c'] = 'Impostazioni del Carosello'; // Carousel Settings +$_MODULE['<{creativeelements}prestashop>_44877c6aa8e93fa5a91c9361211464fb'] = 'Velocità'; // Speed +$_MODULE['<{creativeelements}prestashop>_70ab55fc8ac90620143b01c453be77a3'] = 'Ciclo continuo'; // Loop forever +$_MODULE['<{creativeelements}prestashop>_52c697d185b28f19449ff8a4755f7d20'] = 'Lista de Diapositivas'; // Lista Diapositive +$_MODULE['<{creativeelements}prestashop>_ceb94b5ba288f75b442e17df5e2f386e'] = 'Configura Modulo'; // Configure Module +$_MODULE['<{creativeelements}prestashop>_fafd952418c73bbc20286f8b0ec5bd6a'] = 'Albero categoria'; // Category Root +$_MODULE['<{creativeelements}prestashop>_76519eb2c98e529ec632474488e618d0'] = 'Categoria Principale'; // Home Category +$_MODULE['<{creativeelements}prestashop>_7e95adf6587633010eba9b602dc43817'] = 'Categoria Attuale'; // Current Category +$_MODULE['<{creativeelements}prestashop>_4e98e60e38a29ab7bd94ea815c4f2ef2'] = 'Categoria Collegata'; // Parent Category +$_MODULE['<{creativeelements}prestashop>_ff571d9fd8c0039b08b1a6106f650e70'] = 'Profondità massima'; // Maximum Depth +$_MODULE['<{creativeelements}prestashop>_6b46ae48421828d9973deec5fa9aa0c3'] = 'Ordina'; // Sort +$_MODULE['<{creativeelements}prestashop>_2e958161e121e44beb3cc40325adf32a'] = 'Per Nome'; // By Name +$_MODULE['<{creativeelements}prestashop>_7d7ab8b7ee9f5fa61c94baca04eab51c'] = 'Per Posizione'; // By Position +$_MODULE['<{creativeelements}prestashop>_c20cc8f5bb7d26404f80b1c990c8a7fd'] = 'Ordine di selezione'; // Sort Order +$_MODULE['<{creativeelements}prestashop>_6404a73edb680a8c8ef91c6604295a9f'] = 'Crea nuovo Slider'; // Create New Slider +$_MODULE['<{creativeelements}prestashop>_50dbffc1e2883d38ccf6841e2bb32041'] = 'Un nome al nuovo slider'; // Name your new slider +$_MODULE['<{creativeelements}prestashop>_2d9b9a764fb0be4be10e1b2fce63f561'] = 'Slider'; // Slider +$_MODULE['<{creativeelements}prestashop>_3c311933c000b6aab612c1f5944f4388'] = 'Modifica Slider'; // Edit Slider +$_MODULE['<{creativeelements}prestashop>_cd4bb13b29348d29bad8b60ca5358726'] = 'Le modifiche apportate potrebbero non essere salvate, sei sicuro di voler chiudere?'; // Changes you made may not be saved, are you sure you want to close? +$_MODULE['<{creativeelements}prestashop>_b9b371458ab7c314f88b81c553f6ce51'] = 'Punto di collegamento'; // Hook +$_MODULE['<{creativeelements}prestashop>_e6c8da8ca137d6c8c67d2911cb39a7df'] = 'Specificare l’hook richiesto se necessario.'; // Specify the required hook if needed. +$_MODULE['<{creativeelements}prestashop>_1bacb9caa60813ee730288d7dd95e7fc'] = 'URL sito'; // Site URL +$_MODULE['<{creativeelements}prestashop>_30fc6bbba82125243ecf4ddb27fee645'] = 'Minimale'; // Minimal +$_MODULE['<{creativeelements}prestashop>_4d5098c1fcd4aad3e501e7d48ba6678a'] = 'Topbar'; // Topbar +$_MODULE['<{creativeelements}prestashop>_324118a6721dd6b8a9b9f4e327df2bf5'] = 'Input'; // Input +$_MODULE['<{creativeelements}prestashop>_3601146c4e948c32b6424d2c0a7f0118'] = 'Prezzo'; // Price +$_MODULE['<{creativeelements}prestashop>_a6b9b2b91d590b3b3ee18a918f1e0019'] = 'Elenco dei risultati'; // Result List +$_MODULE['<{creativeelements}prestashop>_fad52b41b8afc9dd3abfe62ddf2619ad'] = 'Linee max'; // Max Lines +$_MODULE['<{creativeelements}prestashop>_0b60a73d19a81f2c1d7317facbb190cb'] = 'Dimensione icona'; // Icon Size +$_MODULE['<{creativeelements}prestashop>_d865317d1c523409ecfeb7fe4b36b022'] = 'Dimensione bordo'; // Border Size +$_MODULE['<{creativeelements}prestashop>_219ff7705d67d0c798779951dcf82e95'] = 'Barra laterale'; // Sidebar +$_MODULE['<{creativeelements}prestashop>_4eb86eb205d6b3d881389109cf04f5a2'] = 'Messaggio vuoto'; // Empty Message +$_MODULE['<{creativeelements}prestashop>_47fffe3e93fbb9948af64f5669fa228a'] = 'Nessun prodotto nel carrello.'; // No products in the cart. +$_MODULE['<{creativeelements}prestashop>_8fb5243396b45a73c0edda2c7216a520'] = 'Prezzo di spedizione'; // Shipping Price +$_MODULE['<{creativeelements}prestashop>_6ab3dc1c702beaee933398ab684ed0f5'] = 'Indicatore Elementi'; // Items Indicator +$_MODULE['<{creativeelements}prestashop>_b6230dfc594205d0ea15d5890ac22d7f'] = 'Nuvola'; // Bubble +$_MODULE['<{creativeelements}prestashop>_76d19c2a8909c1336a839cc4aa86fa71'] = 'Nascondi vuoti'; // Hide Empty +$_MODULE['<{creativeelements}prestashop>_2194aaec8cc7086ab0e93f74547e5f53'] = 'Subtotale'; // Subtotal +$_MODULE['<{creativeelements}prestashop>_4e0604a7752f38f11cc085a88d86560f'] = 'Aggiungi al carrello azione'; // Add To Cart Action +$_MODULE['<{creativeelements}prestashop>_4766ca6cee31e96506d90b68e2dcd095'] = 'Mostra modale'; // Show Modal +$_MODULE['<{creativeelements}prestashop>_bde17a3981c83c8c5967d989f40a7a27'] = 'Apri il carrello'; // Open Shopping Cart +$_MODULE['<{creativeelements}prestashop>_b54ebc45d5968196122274ca0d93d849'] = 'Attributi del prodotto'; // Product Attributes +$_MODULE['<{creativeelements}prestashop>_488b35d8ad1e08e668ac0f2d3d463f68'] = 'Rimuovi Icona elemento'; // Remove Item Icon +$_MODULE['<{creativeelements}prestashop>_290612199861c31d1036b185b4e69b75'] = 'Sommario'; // Summary +$_MODULE['<{creativeelements}prestashop>_5b3ec15499a125805b5bbf8e4afcec8c'] = 'Pulsanti'; // Buttons +$_MODULE['<{creativeelements}prestashop>_59fc69e031ecb0f82efe467fd6692383'] = 'Vedi il carrello'; // View Cart +$_MODULE['<{creativeelements}prestashop>_e404dd0bece5f7c53d80edaa70513eec'] = 'Menu principale'; // Main Menu +$_MODULE['<{creativeelements}prestashop>_b5750478c3c490d2c1df5dfdfdd6b7a4'] = 'Elenco di link'; // Link List +$_MODULE['<{creativeelements}prestashop>_3f2a535406fb0b67258851e0b8816caa'] = 'Vai al modulo %s per gestire le tue voci di menu.'; // Go to the %s module to manage your menu items. +$_MODULE['<{creativeelements}prestashop>_7498c445a737312f3678aa1494e01a38'] = 'Menu a discesa'; // Dropdown +$_MODULE['<{creativeelements}prestashop>_61cf8510205077b6f5491d38cd44c0f7'] = 'Indicatore'; // Pointer +$_MODULE['<{creativeelements}prestashop>_852721aa5fc738dfedff2945d71da439'] = 'Linea sotto'; // Underline +$_MODULE['<{creativeelements}prestashop>_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Linea sopra'; // Overline +$_MODULE['<{creativeelements}prestashop>_14cc8634a5bfab35b6e853c9198925f7'] = 'Doppia linea'; // Double Line +$_MODULE['<{creativeelements}prestashop>_d6b6b668dbca9d4fe774bb654226ebe3'] = 'Animazione'; // Animation +$_MODULE['<{creativeelements}prestashop>_bb339e17211e92f514b07c1951d06e72'] = 'Indicatore sottomenu'; // Submenu Indicator +$_MODULE['<{creativeelements}prestashop>_a1e4659d43cc7eab28edeac2e9f75bc4'] = 'Sottomenu allinea'; // Submenu Align +$_MODULE['<{creativeelements}prestashop>_ead153a06f04c12e720c5aa0cffe0729'] = 'Mostra sottomenu'; // Show Submenu +$_MODULE['<{creativeelements}prestashop>_9ccbedea8cb99c482cb42bbae12a75ea'] = 'Al passaggio del mouse'; // On Hover +$_MODULE['<{creativeelements}prestashop>_6ddd42699e63792e32b11959de64ff6c'] = 'Al clic'; // On Click +$_MODULE['<{creativeelements}prestashop>_98c9ea2e311ff0ddd10aa4a50c5cc04b'] = 'Menu a discesa'; // Mobile Dropdown +$_MODULE['<{creativeelements}prestashop>_7129472c5eb598faf47e4e877f2618fd'] = 'Punto di Interruzione'; // Breakpoint +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Larghezza piena'; // Full Width +$_MODULE['<{creativeelements}prestashop>_29e7cdd1ed01040595b903308c492d8b'] = 'Estendi il menu a tendina per l’intera larghezza.'; // Stretch the dropdown of the menu to full width. +$_MODULE['<{creativeelements}prestashop>_91eb91e653c97c3600e5ee786226e68b'] = 'Pulsante a due stati'; // Toggle Button +$_MODULE['<{creativeelements}prestashop>_7aa99f13e44dd25f7de294bc71abe4ff'] = 'Hamburger'; // Hamburger +$_MODULE['<{creativeelements}prestashop>_f15f18ce20de4f5948ecb46b1958e7ea'] = 'Spaziatura orizzontale'; // Horizontal Padding +$_MODULE['<{creativeelements}prestashop>_55f2842d1d6cd77c91e84ae5e4d1aea2'] = 'Spaziatura verticale'; // Vertical Padding +$_MODULE['<{creativeelements}prestashop>_0b1081024cf0544ac21de69d1b6a0f21'] = 'Larghezza indicatore'; // Pointer Width +$_MODULE['<{creativeelements}prestashop>_b1c6469beab5f226ceb51402e429215e'] = 'Colore indicatore'; // Pointer Color +$_MODULE['<{creativeelements}prestashop>_d11ed49f634022147a3ab4a0ac7e8f1d'] = 'Sul desktop, questo influenzerà il sottomenu. Sul cellulare, questo influenzerà l’intero menu.'; // On desktop, this will affect the submenu. On mobile, this will affect the entire menu. +$_MODULE['<{creativeelements}prestashop>_8a84bf5a983ed52ea6aca9188f21c927'] = 'Accesso eseguito'; // Signed in +$_MODULE['<{creativeelements}prestashop>_bc910f8bdf70f29374f496f05be0330c'] = 'Nome'; // First Name +$_MODULE['<{creativeelements}prestashop>_77587239bf4c54ea493c7033e1dbf636'] = 'Cognome'; // Last Name +$_MODULE['<{creativeelements}prestashop>_50346473cb92c34ef84e58f727a6a911'] = 'Menu utente'; // Usermenu +$_MODULE['<{creativeelements}prestashop>_d95cf4ab2cbf1dfb63f066b50558b07d'] = 'Il mio account'; // My account +$_MODULE['<{creativeelements}prestashop>_0fd8dc8abb2404ad11af4182f10643c1'] = 'Dati personali'; // Personal info +$_MODULE['<{creativeelements}prestashop>_284b47b0bb63ae2df3b29f0e691d6fcf'] = 'Indirizzi'; // Addresses +$_MODULE['<{creativeelements}prestashop>_df96fcb565aa7ca076514dfb1f7d94a7'] = 'Nuovo indirizzo'; // New Address +$_MODULE['<{creativeelements}prestashop>_782c8b38bce4f2f6975ca7f33ac8189b'] = 'Storico ordini'; // Order history +$_MODULE['<{creativeelements}prestashop>_cf3bae95c5f6023d5a10fe415b205a45'] = 'Nota di credito'; // Credit slip +$_MODULE['<{creativeelements}prestashop>_95d2137c196c7f84df5753ed78f18332'] = 'Sconto'; // My vouchers +$_MODULE['<{creativeelements}prestashop>_9b0af1b39d6dff87b095d7041924e7b8'] = 'Bandiera del paese'; // Country Flag +$_MODULE['<{creativeelements}prestashop>_ad68f9bafd9bf2dcf3865dac55662fd5'] = 'Codice ISO'; // ISO code +$_MODULE['<{creativeelements}prestashop>_81ca343ca02154e6d9d0b1428a9dd2f6'] = 'Nessuna immagine'; // No Image +$_MODULE['<{creativeelements}prestashop>_e833b5e560bdc737fe850bc50d0c5f0c'] = 'Slideshow'; // Slideshow +$_MODULE['<{creativeelements}prestashop>_a296104f0c61a9cf39f4824d05315e12'] = 'Cubo'; // Cube +$_MODULE['<{creativeelements}prestashop>_e8b4b2443c2f0e19957e1e77c3c92c12'] = 'Coverflow'; // Coverflow +$_MODULE['<{creativeelements}prestashop>_acc66e14d297c1bfc20986bf593cb054'] = 'Miniature'; // Thumbnails +$_MODULE['<{creativeelements}prestashop>_f63af7ab801158241f45d82e519df16d'] = 'Zoom su hover'; // Zoom on Hover +$_MODULE['<{creativeelements}prestashop>_882277bdf25efaeb8295e842ebcb3d11'] = 'Fallback'; // Fallback +$_MODULE['<{creativeelements}prestashop>_d2203cb1237cb6460cbad94564e39345'] = 'Regolare'; // Regular +$_MODULE['<{creativeelements}prestashop>_19c562a36aeb455d09534f93b4f5236f'] = 'Unitario'; // Unit +$_MODULE['<{creativeelements}prestashop>_58ef6750a23ba432fc1377b7de085d9f'] = 'Iva escl.'; // Tax excl. +$_MODULE['<{creativeelements}prestashop>_4b78ac8eb158840e9638a3aeb26c4a9d'] = 'Tasse'; // Tax +$_MODULE['<{creativeelements}prestashop>_104d9898c04874d0fbac36e125fa1369'] = 'Sconto'; // Discount +$_MODULE['<{creativeelements}prestashop>_a586532c728620b9fed5f6baa415ee64'] = 'Media delle valutazioni'; // Average Grade +$_MODULE['<{creativeelements}prestashop>_71d7a3826df386366c89230976b16aca'] = 'Numero di commenti'; // Comments Number +$_MODULE['<{creativeelements}prestashop>_9934bb23bbec740cca05409a9cd33d7f'] = 'Pubblica commento'; // Post Comment +$_MODULE['<{creativeelements}prestashop>_1be6f9eb563f3bf85c78b4219bf09de9'] = 'Marca'; // Brand +$_MODULE['<{creativeelements}prestashop>_91e85212ab7a0d0295d40e7b03ef4f1c'] = 'Fornitore'; // Supplier +$_MODULE['<{creativeelements}prestashop>_205b01b3197cf06688f6ed574faf5664'] = 'Tempi di Consegna'; // Delivery Time +$_MODULE['<{creativeelements}prestashop>_241c3f2af65370ced61a874c5725e348'] = 'Data disponibilità'; // Availability Date +$_MODULE['<{creativeelements}prestashop>_9e2941b3c81256fac10392aaca4ccfde'] = 'Condizione'; // Condition +$_MODULE['<{creativeelements}prestashop>_d95867deadfe690e40f42068d6b59df8'] = 'Riferimenti'; // References +$_MODULE['<{creativeelements}prestashop>_6665e3761028c84e1d228de3432229ed'] = 'Riferimento'; // SKU +$_MODULE['<{creativeelements}prestashop>_3ccf74d463f8895cef06727cb9709d83'] = 'Colon'; // Colon +$_MODULE['<{creativeelements}prestashop>_0a045d39aea567664edf2daaa25860ff'] = 'Menù a tendina'; // Drop-down List +$_MODULE['<{creativeelements}prestashop>_7041d69f9024a46791714e59812fa68f'] = 'Bottoni radio'; // Radio Buttons +$_MODULE['<{creativeelements}prestashop>_eaec849a5ffecf1b13b1ca2490cdb4e1'] = 'Bottoni Colore o texture'; // Color/Texture Buttons +$_MODULE['<{creativeelements}prestashop>_c1f52fba179ff982b10e3881670b61ef'] = 'Acquista ora'; // Buy Now +$_MODULE['<{creativeelements}prestashop>_515c06a3b32dc640a16385b52ae67c56'] = 'Prodotto con combinazioni'; // Product with Combinations +$_MODULE['<{creativeelements}prestashop>_d248b7896bffb1d7bc56d6378930affb'] = 'Mostra tutti i dettagli'; // View Full Details +$_MODULE['<{creativeelements}prestashop>_9abdae4fa5d93330363a88ed8a5e7946'] = 'Cursore'; // Cursor +$_MODULE['<{creativeelements}prestashop>_37b6bd7fe61d651735cec3d3b0356c66'] = 'Dispari'; // Odd +$_MODULE['<{creativeelements}prestashop>_35537fbc25d87ffe59e4f35fefcd34b7'] = 'Pari'; // Even +$_MODULE['<{creativeelements}prestashop>_689202409e48743b914713f96d93947c'] = 'Valore'; // Value +$_MODULE['<{creativeelements}prestashop>_eec89088ee408b80387155272b113256'] = 'Network'; // Network +$_MODULE['<{creativeelements}prestashop>_e2d9081a3961cdb83db1d1fa7582ad04'] = 'Cover prodotto'; // Product Cover +$_MODULE['<{creativeelements}prestashop>_01b9e63c9fbfec3fe4863e79d46956fc'] = 'Personalizzazione prodotto'; // Product Customization +$_MODULE['<{creativeelements}prestashop>_f63e07e0b80ccecfebdc36e6fe11c876'] = 'Pacchetto prodotti'; // Product Pack +$_MODULE['<{creativeelements}prestashop>_3b67fc912569438cec7b2cc96eb415a9'] = 'Sconti prodotti'; // Product Discounts +$_MODULE['<{creativeelements}prestashop>_87421dbd18a1eb6349fefd26db3a717d'] = 'Azioni prodotto'; // Product Actions +$_MODULE['<{creativeelements}prestashop>_8bb5496d7ab4e19058067c0fa40d45ef'] = 'Disponibilità prodotto'; // Product Availability +$_MODULE['<{creativeelements}prestashop>_841368ddc1cc8ee4e5c8d010b62d3dd5'] = 'Quantità minima'; // Minimum Quantity +$_MODULE['<{creativeelements}prestashop>_e5c548d29f23c379b1452c40a208c445'] = 'Informazioni addizionali'; // Additional Info +$_MODULE['<{creativeelements}prestashop>_1c2df820420d0376965fb9da04eca4df'] = 'Rassicurazioni'; // Reassurance +$_MODULE['<{creativeelements}prestashop>_75fa820aebc10bf31b310065b38447c7'] = 'Schede prodotto'; // Product Tabs +$_MODULE['<{creativeelements}prestashop>_b8900d8adf598b6653bb8c071bc49a1d'] = 'Dettagli prodotto'; // Product Details +$_MODULE['<{creativeelements}prestashop>_623a9a1f669b091dd76bead27c3252ed'] = 'Quantità'; // Quantities +$_MODULE['<{creativeelements}prestashop>_4594f39c6dac58760daeb19d79389576'] = 'Riferimenti specifici'; // Specific References +$_MODULE['<{creativeelements}prestashop>_da1b85e60d23d8d59c77d31af402acda'] = 'Accessori prodotto'; // Product Accessories +$_MODULE['<{creativeelements}prestashop>_9787028383eef1dfde2f09093a851373'] = 'Piè di pagina prodotto'; // Product Footer +$_MODULE['<{creativeelements}prestashop>_9909f0bb3eb94634e3f8cd0164dbacac'] = 'Ti trovi in un contesto multinegozio: tutte le modifiche avranno un impatto su tutti i negozi o su ciascun negozio del gruppo attivo.'; // You are in a multistore context: any modification will impact all your shops, or each shop of the active group. diff --git a/modules/creativeelements/translations/pl.php b/modules/creativeelements/translations/pl.php new file mode 100644 index 00000000..cb168ed8 --- /dev/null +++ b/modules/creativeelements/translations/pl.php @@ -0,0 +1,1214 @@ +_506555a17a9375eb4a701c4fa22ab93c'] = 'Oblicz'; // Calculate +$_MODULE['<{creativeelements}prestashop>_1dcb5758bddf39c3c93a63bec8d7655a'] = 'Kolejność'; // Order +$_MODULE['<{creativeelements}prestashop>_f13af8b45701da62165a903a828eb26a'] = 'Sekwencja specjalne'; // Custom Order +$_MODULE['<{creativeelements}prestashop>_be8342af4ac5a74ec8d73f8cacec021d'] = 'Wprowadź adres URL'; // Enter your URL +$_MODULE['<{creativeelements}prestashop>_12737e0ac21826611dba8b42ce43a4a6'] = 'Sekcja wewnętrzna'; // Inner Section +$_MODULE['<{creativeelements}prestashop>_4252b72e6ebcd4d4b4c2e46a786f03d2'] = 'Zoom'; // Zoom +$_MODULE['<{creativeelements}prestashop>_66ba162102bbf6ae31b522aec561735e'] = 'Pojedynczy'; // Single +$_MODULE['<{creativeelements}prestashop>_ca0de64bfaed84cff1811c8a557460e8'] = 'Cała zawartość'; // All Content +$_MODULE['<{creativeelements}prestashop>_771beb30ea03f1a09209a509ba0a95e7'] = 'Resetuj style'; // Style Reset +$_MODULE['<{creativeelements}prestashop>_f373922b0d1d9582e2e01632fa435be2'] = 'Wklejono style'; // Style Pasted +$_MODULE['<{creativeelements}prestashop>_8c2857a9ad1d8f31659e35e904e20fa6'] = 'Logo'; // Logo +$_MODULE['<{creativeelements}prestashop>_28f69ec829f28c18234aeb9b4bf84085'] = 'Informacje o wideo'; // Video Info +$_MODULE['<{creativeelements}prestashop>_bdc558034c3fa1f53c632cb2b4a081eb'] = 'Logo na pasku sterowania'; // Modest Branding +$_MODULE['<{creativeelements}prestashop>_e6b391a8d2c4d45902a23a8b6585703d'] = 'URL'; // URL +$_MODULE['<{creativeelements}prestashop>_f31bbdd1b3e85bccd652680e16935819'] = 'Źródło'; // Source +$_MODULE['<{creativeelements}prestashop>_04d536bf597bcb004268f6d8c509dbde'] = 'ID przycisku'; // Button ID +$_MODULE['<{creativeelements}prestashop>_a7d6475ec8993b7224d6facc8cb0ead6'] = 'Strona'; // Site +$_MODULE['<{creativeelements}prestashop>_8d5e7e72f12067991186cdf3cb7d5d9d'] = 'Premium'; // Premium +$_MODULE['<{creativeelements}prestashop>_02b2a8ed2ee59fb6a1ccf3716c988597'] = 'Kopiuj całą zawartość'; // Copy All Content +$_MODULE['<{creativeelements}prestashop>_e86a54e13ae40856b7c38b514dc6974b'] = 'Resetuj style'; // Reset Style +$_MODULE['<{creativeelements}prestashop>_5fb63579fc981698f97d55bfecb213ea'] = 'Kopiuj'; // Copy +$_MODULE['<{creativeelements}prestashop>_086efb53f636c4bf4fc83938d9a1d39e'] = 'Kopiuj style'; // Copy Style +$_MODULE['<{creativeelements}prestashop>_2cef6b933418f084afe1c5e44bcaa4bc'] = 'Teraz możesz mieć dostęp do wszystkich czynności edycji za pomocą prawego przycisku myszy.'; // Now you can access all editing actions using right click. +$_MODULE['<{creativeelements}prestashop>_fd27a26bce8b01ecb7f38b4e1d6d2ad5'] = 'Poznaj prawy przycisk myszy'; // Meet Right Click +$_MODULE['<{creativeelements}prestashop>_47858182067cd39bac29ead1d6772192'] = 'Podgląd dla %s'; // Preview for %s +$_MODULE['<{creativeelements}prestashop>_0f7c6d84b1393efc4b3666e1866a5759'] = 'Przeciągnij widget tutaj'; // Drag widget here +$_MODULE['<{creativeelements}prestashop>filter_control_2e3307b9b1a2cc64b48f1cd6977a4b29'] = 'Saturacja'; // Saturation +$_MODULE['<{creativeelements}prestashop>filter_control_c63ecd19a0ca74c22dfcf3063c9805d2'] = 'Kontrast'; // Contrast +$_MODULE['<{creativeelements}prestashop>_86176e1d3dd3649de183dc33b7750f62'] = 'Tryb Mieszania'; // Blend Mode +$_MODULE['<{creativeelements}prestashop>filter_control_7f491274a53763ba32b7356ade638e19'] = 'Filtry CSS'; // CSS Filters +$_MODULE['<{creativeelements}prestashop>_9b5e1c921934d0b8af2f354006adc776'] = 'Własne hostowanie'; // Self Hosted +$_MODULE['<{creativeelements}prestashop>_74f88681be25e673fa7caacae1b165bc'] = 'Sprawdź'; // Got It +$_MODULE['<{creativeelements}prestashop>filter_control_b25323f99788ce64617f018b8a9f5f70'] = 'Jasność'; // Brightness +$_MODULE['<{creativeelements}prestashop>filter_control_8b52de510bc5497ac43abfe566be48ab'] = 'Rozmazanie'; // Blur +$_MODULE['<{creativeelements}prestashop>_a102718b3b0839b017af5764e82f6bcd'] = 'Upewnij się, że identyfikator jest unikatowy i nie jest używany w innym miejscu strony. To pole pozwala na użycie znaków A-z 0-9 wraz z podkreśleniem (bez spacji).'; // Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows A-z 0-9 & underscore chars without spaces. +$_MODULE['<{creativeelements}prestashop>_889deb44ad445ea359c1285d37f4a498'] = 'Określ czas zakończenia (w sekundach)'; // Specify an end time (in seconds) +$_MODULE['<{creativeelements}prestashop>_3e06b49da8235ee588abdd3f0b58d040'] = 'Określ czas rozpoczęcia (w sekundach)'; // Specify a start time (in seconds) +$_MODULE['<{creativeelements}prestashop>_2bbc845892f400626baab5af687527c5'] = 'Koniec czasu'; // Start Time +$_MODULE['<{creativeelements}prestashop>_c91a577b72313356fad611c55f43c10f'] = 'Koniec czasu'; // End Time +$_MODULE['<{creativeelements}prestashop>_7c7efec2d1dfd66eb653cf98d4cc865c'] = 'Coś poszło nie tak.'; // Something went wrong. +$_MODULE['<{creativeelements}prestashop>_bad6a5dd8c28e6b14f8e986615e3dc98'] = 'Przezroczystość'; // Opacity +$_MODULE['<{creativeelements}prestashop>page_template_c45746064138c22a117ad58d89d67f4b'] = 'CE pełna szerokość'; // CE Full Width +$_MODULE['<{creativeelements}prestashop>page_template_80aef4a77adcb8ced5b137d91a103239'] = 'CE Brezentowy'; // CE Canvas +$_MODULE['<{creativeelements}prestashop>_95e942c63e81ac4845c306bf110290a8'] = 'Maksymalna szerokość'; // Max Width +$_MODULE['<{creativeelements}prestashop>_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Pozycja'; // Position +$_MODULE['<{creativeelements}prestashop>_8b1b1aa6c2a4785ab415c8fbf20e70d9'] = 'Usuń %s'; // Delete %s +$_MODULE['<{creativeelements}prestashop>_95af255a86dc70e932634411b3f91e5f'] = 'Ten szablon zawiera nagłówek, pełnej szerokości zawartość i stopkę'; // This template includes the header, full-width content and footer +$_MODULE['<{creativeelements}prestashop>_222a267cc5778206b253be35ee3ddab5'] = 'Aktualny'; // Current +$_MODULE['<{creativeelements}prestashop>_47b74b5cb415e0a295404acaa62ff67a'] = 'Układ strony'; // Page Layout +$_MODULE['<{creativeelements}prestashop>_daaa4b3e4a9000898257ccbe03236593'] = 'Bez nagłówka, bez stopki, tylko Creative Elements'; // No header, no footer, just Creative Elements +$_MODULE['<{creativeelements}prestashop>_383478f70ecc7dc313b3653a3724ad5b'] = 'Domyślny szablon strony ze swojego motywu'; // Default Page Template from your theme +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Kategoria'; // Category +$_MODULE['<{creativeelements}prestashop>_04c4f9f595c4f21d1de65eb07056c15a'] = 'Bloki'; // Blocks +$_MODULE['<{creativeelements}prestashop>_453aceb005ceaf54a47da15fee8b2a26'] = 'Strony'; // Pages +$_MODULE['<{creativeelements}prestashop>template_library_b9390195ecad3986568746a2a9b56354'] = 'Moje szablony'; // My Templates +$_MODULE['<{creativeelements}prestashop>_c9344eb2ff26e96823cc252a90f77de8'] = 'Obrazek wyróżniający'; // Featured Image +$_MODULE['<{creativeelements}prestashop>_284716247b12b363fd6b6a71bff0918e'] = 'Więcej akcji'; // More actions +$_MODULE['<{creativeelements}prestashop>_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Wszystkie'; // All +$_MODULE['<{creativeelements}prestashop>_b6d34b10f9eae474e5843a027603c4a3'] = 'Odtwórz wideo'; // Play Video +$_MODULE['<{creativeelements}prestashop>_0125cf5f3ca38b312ca5d3b511c45a13'] = 'W linii'; // Inline +$_MODULE['<{creativeelements}prestashop>_10e2fab434f7952f5e61211f6445032a'] = 'Wyszukaj szablony:'; // Search Templates: +$_MODULE['<{creativeelements}prestashop>_d9c0bd850f0d755afe4a2f87790926bc'] = 'Ten tag nie ma ustawień.'; // This tag has no settings. +$_MODULE['<{creativeelements}prestashop>_971fd8cc345d8bd9f92e9f7d88fdf20c'] = 'Dynamiczny'; // Dynamic +$_MODULE['<{creativeelements}prestashop>_9421c4ccec3719a5d299f1b02862412f'] = 'URL kontaktu'; // Contact URL +$_MODULE['<{creativeelements}prestashop>_9a99c312fda8b07dbdd8ac72dc0773f8'] = 'Bieżąca data i czas'; // Current Date Time +$_MODULE['<{creativeelements}prestashop>_4001353741fc405c5786493d252a3991'] = 'Wewnętrzny adres URL'; // Internal URL +$_MODULE['<{creativeelements}prestashop>_e68c1ad1f675e02452d7f79969b9708e'] = 'Tytuł strony'; // Page Title +$_MODULE['<{creativeelements}prestashop>_ca341887d434838f3252e2d73f787680'] = 'Żądaj parametru'; // Request Parameter +$_MODULE['<{creativeelements}prestashop>_781ee6c523f73dae7044617f7cac3941'] = 'Kontakt w sklepie'; // Shop Contact +$_MODULE['<{creativeelements}prestashop>_5a43012799d4303730f0c9c32a41b0fd'] = 'URL sklepu'; // Shop URL +$_MODULE['<{creativeelements}prestashop>_04e0602d4335e2144468e51e5c424590'] = 'Reguła koszyka'; // Cart Rule +$_MODULE['<{creativeelements}prestashop>_4695483802b27812a65749cccd212b17'] = 'Nazwa kategorii'; // Category Name +$_MODULE['<{creativeelements}prestashop>_9bb87066bdb5b0307d442bd9d1552632'] = 'URL kategorii'; // Category URL +$_MODULE['<{creativeelements}prestashop>_4232c2deb6ff317abf49721680bd818a'] = 'Nazwa marki'; // Brand Name +$_MODULE['<{creativeelements}prestashop>_cad080cee7f847c07d0a0061b2f5f771'] = 'URL marki'; // Brand URL +$_MODULE['<{creativeelements}prestashop>_8973510d727af4f8c2ba6c1c84d0b718'] = 'URL produktu'; // Product URL +$_MODULE['<{creativeelements}prestashop>_e21f91c630214ac206a785cccd853154'] = 'Reguła katalogu cen'; // Catalog Price Rule + +$_MODULE['<{creativeelements}prestashop>_b1da34ea28921a8fac7d5f1273327229'] = 'Następny'; // Next +$_MODULE['<{creativeelements}prestashop>_033658cb7158c3f36bf7cf9c0f44fcde'] = 'Poprzedni'; // Previous +$_MODULE['<{creativeelements}prestashop>_eab23bbc21bd1fbd1207247a9864592b'] = 'Play'; // Play +$_MODULE['<{creativeelements}prestashop>_74322cb2d5a81d5daa8556673f478d7c'] = 'Pause'; // Pause +$_MODULE['<{creativeelements}prestashop>_f582dc21d5a9ffb1bbfadf74318bc5a6'] = 'Selektor'; // Selector +$_MODULE['<{creativeelements}prestashop>_2c7d98f10667515c7b00403e2b3ff9a5'] = 'Tel.'; // Tel +$_MODULE['<{creativeelements}prestashop>_83dff142c5bc22f9147bc823a52e2b4f'] = 'SMS'; // SMS +$_MODULE['<{creativeelements}prestashop>_56ad595875f55ad4163c2783f11fa964'] = 'Kalendarz Google'; // Google Calendar +$_MODULE['<{creativeelements}prestashop>_2f4523c3fec77710fbefd831cc1b893b'] = 'Kalendarz Outlook'; // Outlook Calendar +$_MODULE['<{creativeelements}prestashop>_a63a2923058723e763c1e82c75988f5c'] = 'Kalendarz Yahoo'; // Yahoo Calendar +$_MODULE['<{creativeelements}prestashop>_251a780878152bc8ea7c44050a46f6a0'] = 'Temat'; // Subject +$_MODULE['<{creativeelements}prestashop>_7f86db886a07a996fe3378fcbecc8041'] = 'Wiadomość'; // Message +$_MODULE['<{creativeelements}prestashop>_b6bda532a7e8a7ea0a75069f35ae864f'] = 'Nazwa użytkownika'; // Username +$_MODULE['<{creativeelements}prestashop>_d93abbcc3d3ff28056c410d12757aa0a'] = 'Format daty'; // Date Format +$_MODULE['<{creativeelements}prestashop>_c0740f55b6724b631052066baddbf7b0'] = 'Format czasu'; // Time Format +$_MODULE['<{creativeelements}prestashop>_1b4a75284a56a339d132e59456d27e3a'] = 'Własny format'; // Custom Format +$_MODULE['<{creativeelements}prestashop>_169920a350e7960154dcdc875dafc8df'] = 'Dokumentacja w formacie daty i czasu'; // Documentation on date and time formatting +$_MODULE['<{creativeelements}prestashop>_df9a7c88f7bf07e724b934716cc790f4'] = 'Szukaj & Wybierz'; // Search & Select +$_MODULE['<{creativeelements}prestashop>_363507878ffebd26d035aa7ba2093f35'] = 'Wpisz nazwę produktu / Ref'; // Type Product Name / Ref +$_MODULE['<{creativeelements}prestashop>_a9c548584e357eca69a0f96e8295e524'] = 'Nazwa parametru'; // Parameter Name +$_MODULE['<{creativeelements}prestashop>_6ba425ac509bdf319cbb43aae65ee954'] = 'Pole'; // Field +$_MODULE['<{creativeelements}prestashop>_45e41f822b049adbf2eedb23cb170188'] = 'Firma'; // Company +$_MODULE['<{creativeelements}prestashop>_4984ae7378622cd416b9aced4cdc7612'] = 'Adres'; // Address +$_MODULE['<{creativeelements}prestashop>_a4c7dc56186aaf14cb52b6ad6e320d91'] = 'ID'; // ID +$_MODULE['<{creativeelements}prestashop>_882136c04720783972d2ba15cabb2533'] = 'Wyświetl nazwę'; // Display Name +$_MODULE['<{creativeelements}prestashop>_719c34f35eef4e53e7a8060f4ac1f5b0'] = 'Urodziny'; // Birthday +$_MODULE['<{creativeelements}prestashop>_cf8495c5e163a5edd0c194a344fa0458'] = 'Strona web'; // Website +$_MODULE['<{creativeelements}prestashop>_369ee98b6cc4c2ac77e0c4ed5665a33a'] = 'Od'; // From +$_MODULE['<{creativeelements}prestashop>_a2933e922ff8e0247d44938b93e5bb6a'] = 'Do'; // To +$_MODULE['<{creativeelements}prestashop>_ef69cf49bb993edf5f654dd21ff63f2a'] = 'Waluta'; // Currency +$_MODULE['<{creativeelements}prestashop>_0cac3b5a1b412862847fce41fc8978fe'] = 'Wysokość ceny'; // Price Amount +$_MODULE['<{creativeelements}prestashop>_71bd0d3f32c2c668811a52eedc3ee8fc'] = 'Cena Integer'; // Price Integer +$_MODULE['<{creativeelements}prestashop>_c504cce3f32c095020e882875cb77d45'] = 'Cena dziesiętna'; // Price Decimals +$_MODULE['<{creativeelements}prestashop>_d456e04d06b851d54f7dd7782cd7f5a2'] = 'Regularna kwota'; // Regular Amount +$_MODULE['<{creativeelements}prestashop>_c3091d709b8b46ce1c89b9d2d7f3f3e1'] = 'Cena jednostkowa'; // Unit Price + +$_MODULE['<{creativeelements}prestashop>_26d59c8605cb411d04f53ba087fbde7b'] = 'Dodaj szablony i wykorzystaj je ponownie w swojej witrynie. Łatwo eksportuj i importuj je do dowolnego innego projektu, aby zoptymalizować sobie pracę.'; // Add templates and reuse them across your website. Easily export and import them to any other project, for an optimized workflow. +$_MODULE['<{creativeelements}prestashop>_0945359809dad1fbf3dea1c95a0da951'] = 'Dokument'; // Document +$_MODULE['<{creativeelements}prestashop>_da900198c1a7d78f57e400a23733c8bd'] = 'Nie znaleziono wpisu.'; // Post not found. +$_MODULE['<{creativeelements}prestashop>_70bb931768a57accd63e7496c25dfd18'] = 'Stwórz swój pierwszy %s'; // Create Your First %s +$_MODULE['<{creativeelements}prestashop>_04b2e4188d4ef8051e4699da8af01335'] = 'Separator'; // Separator +$_MODULE['<{creativeelements}prestashop>_db71f6e371eb7124134284e029343fbb'] = '%s ustawienia'; // %s Settings +$_MODULE['<{creativeelements}prestashop>_442444e4a8a066e42bd056d71c649288'] = 'Styl body'; // Body Style +$_MODULE['<{creativeelements}prestashop>border_control_a5d7f2d1b78f9222563004a41a616334'] = 'Groove'; // Groove +$_MODULE['<{creativeelements}prestashop>_b377dbdf3aeb55f9443947236db71ab3'] = 'Ustaw liczbę przewijanych slajdów na jednym przesunięciu.'; // Set how many slides are scrolled per swipe. +$_MODULE['<{creativeelements}prestashop>_6cd988821d5e8796c47a32e453c95633'] = 'Uwaga: Poprawka dotycząca załącznika działa tylko na komputerze'; // Note: Attachment Fixed works only on desktop. +$_MODULE['<{creativeelements}prestashop>_b1fce7d76fc2b85bb2203bed78d8514c'] = 'Wczesny Dostęp Google'; // Google Early Access +$_MODULE['<{creativeelements}prestashop>_b3ea5d4962bbcb423b6e3693d7a1ea9f'] = 'Nieznany błąd'; // Unknown Error +$_MODULE['<{creativeelements}prestashop>_89b5fd445acdad16cd2ee39330fd90bd'] = 'Utracono połączenie'; // Connection Lost +$_MODULE['<{creativeelements}prestashop>_ce71ffa436bfbe5fd6e1f8af2a0671eb'] = 'Zapisywanie zostało wyłączone dopóki się nie połączysz ponownie.'; // Saving has been disabled until you’re reconnected. +$_MODULE['<{creativeelements}prestashop>_dd9742741ad6a068ce129e4fa97aa294'] = 'Błąd serwera'; // Server Error +$_MODULE['<{creativeelements}prestashop>_2bd339d85ee3b33e513359ce781b60cc'] = 'Przywróć'; // Restore +$_MODULE['<{creativeelements}prestashop>_5b008951213ac933cab550ae80b43529'] = 'Aktualna wersja'; // Current Version +$_MODULE['<{creativeelements}prestashop>_95d126b737c78e8f8a4e00c0e0170c3a'] = 'Edytuj opublikowane'; // Edit Published +$_MODULE['<{creativeelements}prestashop>_9b97514a6cb123cccf70b60ae40f9c92'] = 'Edytuj szkic'; // Edit Draft +$_MODULE['<{creativeelements}prestashop>_b8a6d142349b07242bf3d2ec60016c41'] = 'Tryb prywatny'; // Privacy Mode +$_MODULE['<{creativeelements}prestashop>_cbdfcfddce72f99e436eca187f00b290'] = 'Wprowadź swój shortcode'; // Enter your shortcode +$_MODULE['<{creativeelements}prestashop>_b70b756df7f18d4fee17dd1d38bcc135'] = 'Wprowadź swój opis obrazka'; // Enter your image caption +$_MODULE['<{creativeelements}prestashop>_16f6c60cf0b840982bc1f595ac1641cb'] = 'Wprowadź swój kod'; // Enter your code +$_MODULE['<{creativeelements}prestashop>_b1b95b84202450b35fd7afb914031d55'] = 'To jest tylko szkic. Pobaw się, a kiedy skończysz - kliknij zaktualizuj'; // This is just a draft. Play around and when you're done - click update. +$_MODULE['<{creativeelements}prestashop>_2199472d685d3b90df180760ea665a71'] = 'Kontynuuj edycję'; // Keep Editing +$_MODULE['<{creativeelements}prestashop>_a4d3b161ce1309df1c4e25df28694b7b'] = 'Zatwierdź'; // Submit +$_MODULE['<{creativeelements}prestashop>_06933067aafd48425d67bcb01bba5cb6'] = 'Aktualizuj'; // Update +$_MODULE['<{creativeelements}prestashop>_9b9d8a976b42e0bd66381797644943d5'] = 'Opublikowano'; // Published +$_MODULE['<{creativeelements}prestashop>_010f371ad222d36015d7ab70f3256160'] = 'Kontynuuj mimo wszystko'; // Proceed Anyway +$_MODULE['<{creativeelements}prestashop>_1a7acf9e1a4485f55a6d75bcc40655e3'] = 'Twoja przeglądarka nie jest kompatybilna z wszystkimi elementami CreativeElements. Zalecamy zmianę przeglądarki na np. Chrome lub Firefox.'; // Your browser isn't compatible with all of Creative Elements' editing features. We recommend you switch to another browser like Chrome or Firefox. +$_MODULE['<{creativeelements}prestashop>_0c6f349a95f4864d65730cad900e3551'] = 'Twoja przeglądarka nie jest kompatybilna'; // Your browser isn't compatible +$_MODULE['<{creativeelements}prestashop>_c12f59e844e6d839ba6ee4cd26e8ea27'] = 'Nie znaleziono żadnych wyników'; // No Results Found +$_MODULE['<{creativeelements}prestashop>_01165dcf77c191e6c69b31d98b0ec6ff'] = 'Ulubione'; // Favorite +$_MODULE['<{creativeelements}prestashop>_52fc7a0ab6328f8aaabb6ef411816b9e'] = 'Data utworzenia'; // Creation Date +$_MODULE['<{creativeelements}prestashop>_7b1255f8fdd0cb8751baee55621164e1'] = 'Utworzone przez'; // Created By +$_MODULE['<{creativeelements}prestashop>_13348442cc6a27032d2b4aa28b75a5d3'] = 'Szukaj'; // Search +$_MODULE['<{creativeelements}prestashop>_f2c3119ccf960f54688bf6f227390e36'] = 'Moje ulubione'; // My Favorites +$_MODULE['<{creativeelements}prestashop>_2cc1943d4c0b46bfcf503a75c44f988b'] = 'Popularne'; // Popular +$_MODULE['<{creativeelements}prestashop>_349d789f5d11f630c282f547b568d08d'] = 'Modne'; // Trend +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Nowe'; // New +$_MODULE['<{creativeelements}prestashop>_a0415b5ba0373565c33828715bba8c8d'] = 'Importuj szablon'; // Import Template +$_MODULE['<{creativeelements}prestashop>_1063e38cb53d94d386f21227fcd84717'] = 'Usuń'; // Remove +$_MODULE['<{creativeelements}prestashop>_ed75712b0eb1913c28a3872731ffd48d'] = 'Duplikuj'; // Duplicate +$_MODULE['<{creativeelements}prestashop>_9c4d6fcf53fc6c3ad770fed0e57ccc49'] = 'Złap i Upuść'; // Drag & Drop +$_MODULE['<{creativeelements}prestashop>_bf16d61e5b485458fa158bfb5584befc'] = 'Ukryj Panel'; // Hide Panel +$_MODULE['<{creativeelements}prestashop>_0bec922eda645e0ac505d942505b9be9'] = 'Zapisz jako Szablon'; // Save as Template +$_MODULE['<{creativeelements}prestashop>_5778e182c50cbba1d86e14690c8aa35c'] = 'Zapisz szkic'; // Save Draft +$_MODULE['<{creativeelements}prestashop>_6ca8bf4766b9dc7b1ea8b69562faac3f'] = 'Krótki opis'; // Excerpt +$_MODULE['<{creativeelements}prestashop>_cdbf49d6ac280f03cc7d24714bc42a4e'] = 'Aktywna ikona'; // Active Icon +$_MODULE['<{creativeelements}prestashop>_960fa36947fbb569380aba693b494feb'] = 'Wprowadź swój opis'; // Enter your description +$_MODULE['<{creativeelements}prestashop>_2fcd87fc57c33e7fb8a1df657776f274'] = 'Dodaj tu swój tekst nagłówka'; // Add Your Heading Text Here +$_MODULE['<{creativeelements}prestashop>_4fccea1707d00bf8926ebf0897e4a325'] = 'Szkic zapisany %1$s przez %2$s'; // Draft saved on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>_f0a0314cf8e7c3ad6d977d5adacfeb0d'] = 'Ostatnio edytowany %1$s przez %2$s'; // Last edited on %1$s by %2$s +$_MODULE['<{creativeelements}prestashop>_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'lub'; // or +$_MODULE['<{creativeelements}prestashop>_1a10f6476e54db68548305a69fdcec09'] = 'Przeciągnij i upuść swój plik .JSON lub .zip z szablonem'; // Drag & drop your .JSON or .zip template file +$_MODULE['<{creativeelements}prestashop>_4a66d51c9716349085fc7ea77edfe5c5'] = 'Importuj Szablon do Twojej Biblioteki'; // Import Template to Your Library +$_MODULE['<{creativeelements}prestashop>_936ccdb97115e9f35a11d35e3d5b5cad'] = 'Kliknij tutaj'; // Click here +$_MODULE['<{creativeelements}prestashop>_89ba5a0cd9537dd0cd44a3ece29b877a'] = 'Chcesz dowiedzieć się więcej o Bibliotece CreativeElements?'; // Want to learn more about the Elementor library? +$_MODULE['<{creativeelements}prestashop>_110a4b01beabd53b661a47d4b44bd7a8'] = 'Publikuj'; // Publish +$_MODULE['<{creativeelements}prestashop>_b2e886db4593c5ddc8e369f34d3744f3'] = 'Zobacz zmiany'; // Preview Changes +$_MODULE['<{creativeelements}prestashop>_82815a6312a1e5a2ffafff6f1734df30'] = 'Wróć do Back-office'; // Exit to Back-office +$_MODULE['<{creativeelements}prestashop>_b0d066425fa39974fe45240b33bbfacb'] = 'Wróć do ustawień domyślnych'; // Back to default +$_MODULE['<{creativeelements}prestashop>_fb4fb9b2615dddca1a6cda5ecdfb47c0'] = 'Importuj ustawienia dokumentu'; // Import Document Settings +$_MODULE['<{creativeelements}prestashop>revision_date_format_b29ef0e5dad2e3b86cfa343482ce8e9c'] = 'M j, H:i'; // M j, H:i +$_MODULE['<{creativeelements}prestashop>_c8a59e7135a20b362f9c768b09454fdb'] = 'Odrzuć'; // Dismiss +$_MODULE['<{creativeelements}prestashop>_70d4a329d37dc2df41466a420e983966'] = 'Spójrz'; // Have a look +$_MODULE['<{creativeelements}prestashop>_c81c48c260d8fe33746bb88a06a31b40'] = 'Przywróć automatycznie zapisane dane'; // Restore Auto Saved Data +$_MODULE['<{creativeelements}prestashop>_94c7a492c400660d0ce730ceea7778a9'] = 'Po włączeniu trybu prywatności, YouTube nie będzie zapisywał informacji o użytkownikach odwiedzających twoją stronę dopóki nie odtworzą filmu.'; // When you turn on privacy mode, YouTube won't store information about visitors on your website unless they play the video. +$_MODULE['<{creativeelements}prestashop>_f44c3ec59688f8173b34c08b1ad961b2'] = 'Brak ulubionych szablonów'; // No Favorite Templates +$_MODULE['<{creativeelements}prestashop>_081a48a2a1f0eee4b209bcdaf54803c0'] = 'Możesz zaznaczyć każdy wstępnie zaprojektowany szablon jako ulubiony.'; // You can mark any pre-designed template as a favorite. +$_MODULE['<{creativeelements}prestashop>typography_control_852721aa5fc738dfedff2945d71da439'] = 'Podkreślenie'; // Underline +$_MODULE['<{creativeelements}prestashop>typography_control_24365794120e03b807acbd05c0a48db9'] = 'Dekoracja'; // Decoration +$_MODULE['<{creativeelements}prestashop>_ff0a58d7006cd437862608b39e9cc7fe'] = 'Odłączone wartości'; // Unlinked values +$_MODULE['<{creativeelements}prestashop>typography_control_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Nadkreślenie'; // Overline +$_MODULE['<{creativeelements}prestashop>typography_control_46e52f6310c224aa5846b3a5a5b1c6fe'] = 'Przekreślenie'; // Line Through +$_MODULE['<{creativeelements}prestashop>_c829769966db94e5478e39391b995ac5'] = 'Zobacz wszystkie wersje'; // View All Revisions +$_MODULE['<{creativeelements}prestashop>_f12a625ade1d1349f8d760c137d2e4b8'] = 'Upewnij się, że wyszukiwanie jest poprawne lub wypróbuj inne słowa.'; // Please make sure your search is spelled correctly or try a different words. +$_MODULE['<{creativeelements}prestashop>_9d38dcdc957310dcaab2eda11f46c1f8'] = 'Istnieje auto zapis tego wpisu, który jest nowszy od wersji poniżej. Możesz przywrócić zapisane dane z panelu '; // There is an autosave of this post that is more recent than the version below. You can restore the saved data fron the Revisions panel +$_MODULE['<{creativeelements}prestashop>_57986647011dee008f9d492989a90fb1'] = 'Hura! Twój %s żyje.'; // Hurray! Your %s is live. +$_MODULE['<{creativeelements}prestashop>_1909e5c12b63e80afbedfe3a4f5c3363'] = 'Odrzuć alert'; // Dismiss alert +$_MODULE['<{creativeelements}prestashop>_92fb9e9788b3d8cad885c5fe16343c75'] = 'To jest alert'; // This is an Alert +$_MODULE['<{creativeelements}prestashop>_6083cfeb84f702b582e655b5f4168579'] = 'Pokaż panel'; // Show Panel +$_MODULE['<{creativeelements}prestashop>_b95d3d403307efa40962df363734e941'] = 'Ustawienia modułu'; // Module Settings +$_MODULE['<{creativeelements}prestashop>_1aa14e9f377b528b5537d70fbd35c6a2'] = 'Wybierz plik'; // Select File +$_MODULE['<{creativeelements}prestashop>_23183cd144a4dcc5a599a4b6506f7154'] = 'Zapisz opcje'; // Save Options +$_MODULE['<{creativeelements}prestashop>_4bda311edbaa9e54025c057c6c102fba'] = 'Szukaj widgetu:'; // Search Widget: +$_MODULE['<{creativeelements}prestashop>_652122103181aa2752efaecab300edf0'] = 'Brak dostępu.'; // Access denied. +$_MODULE['<{creativeelements}prestashop>_87557f11575c0ad78e4e28abedc13b6e'] = 'Koniec'; // End +$_MODULE['<{creativeelements}prestashop>_a6122a65eaa676f700ae68d393054a37'] = 'Początek'; // Start +$_MODULE['<{creativeelements}prestashop>_cf85e0aa6dbff8e1237bc70f6a1da1b2'] = 'Pisz tutaj'; // Type Here +$_MODULE['<{creativeelements}prestashop>_289e1087105787353c5bae37c7982aa8'] = 'Odśwież stronę'; // Reload Page +$_MODULE['<{creativeelements}prestashop>_f9636eccbb10d99e4aabfefe4ebfe479'] = 'Twoja sesja wygasła. Odśwież stronę aby kontynuować edytowanie.'; // Your session has expired. Please reload the page to continue editing. +$_MODULE['<{creativeelements}prestashop>_c85a251cc457840f1e032f1b733e9398'] = 'Limit czasu'; // Timeout +$_MODULE['<{creativeelements}prestashop>_57b4c0031bc5c78e49d0a7e568115ff1'] = 'Przepraszamy, ale coś poszło nie tak. Kliknij na "Czytaj więcej" i postępuj zgodnie z wskazówkami aby szybko naprawić problem.'; // We're sorry, but something went wrong. Click on 'Learn more' and follow each of the steps to quickly solve it. +$_MODULE['<{creativeelements}prestashop>_fab4cde10ae2ec07bdee32a6749a3e7c'] = 'Podgląd nie mógł zostać załadowany.'; // The preview could not be loaded +$_MODULE['<{creativeelements}prestashop>_26342c8741f7cf60f979e91ad570b291'] = 'Domyślne kolory'; // Default Colors +$_MODULE['<{creativeelements}prestashop>_b2f5eb6ce3e6e97e89ec594c52ba48c1'] = 'Nieznana wartość'; // Unknown Value +$_MODULE['<{creativeelements}prestashop>_351683969bd504e253fb05ef9b542bc8'] = 'Kiedy zaczniesz działać będziesz mógł powtórzyć lub cofnąć dowolną akcję którą dokonasz w edytorze.'; // Once you start working, you'll be able to redo / undo any action you make in the editor. +$_MODULE['<{creativeelements}prestashop>_abb565ed2df80ae405ca35167910924d'] = 'Jeszcze nie ma historii.'; // No History Yet +$_MODULE['<{creativeelements}prestashop>_8d7eb55a18265b4dc59ea4f896e7c1ed'] = 'Przejdź do zakładki Rewizje aby zobaczyć starsze rewizje'; // Switch to Revisions tab for older versions +$_MODULE['<{creativeelements}prestashop>_06df33001c1d7187fdd81ea1f5b277aa'] = 'Akcje'; // Actions +$_MODULE['<{creativeelements}prestashop>_95bfdefaaf01553cbf21ccd942855c69'] = 'Przeniesiono'; // Moved +$_MODULE['<{creativeelements}prestashop>_f29ddbfb905eb2593fdcdfb243f9af85'] = 'Dodano'; // Added +$_MODULE['<{creativeelements}prestashop>_5b6cf869265c13af8566f192b4ab3d2a'] = 'Dokumentacja'; // Documentation +$_MODULE['<{creativeelements}prestashop>_16d2b386b2034b9488996466aaae0b57'] = 'Historia'; // History +$_MODULE['<{creativeelements}prestashop>_bf59b07aded13165bea058e8f636a308'] = 'Kolor UI po najechaniu'; // UI Hover Color +$_MODULE['<{creativeelements}prestashop>_ead9ed73aace2253b77e3455b2105ea3'] = 'Kolor UI'; // UI Color +$_MODULE['<{creativeelements}prestashop>_67ed6ddb7d890b23166c1bef771e9451'] = 'Zedytowano'; // Edited +$_MODULE['<{creativeelements}prestashop>_01a94df3c831063bf2b04d9c09e2b972'] = 'Rozpoczęto edycję'; // Editing Started +$_MODULE['<{creativeelements}prestashop>_fd88b11cfde6aa5e3c7ff0553b534885'] = 'Wersje'; // Revisions +$_MODULE['<{creativeelements}prestashop>text_shadow_control_3f39588bb19e28051d9aedfbb170025c'] = 'Cień'; // Shadow +$_MODULE['<{creativeelements}prestashop>_00cd7be4cb21c59179316d7844a8cfc4'] = 'Wycisz'; // Mute +$_MODULE['<{creativeelements}prestashop>_03ea6664bd8bb744fadc253f84bf32d5'] = 'Wybierz plik JSON lub archiwum .zip z motywem i dodaj go do listy motywów dostępnych w Twojej bibliotece.'; // Choose a JSON template file or a .zip archive of templates, and add them to the list of templates available in your library. +$_MODULE['<{creativeelements}prestashop>text_shadow_control_86e470e0e13bcfec3b2e102c167fe223'] = 'Cień Tekstu'; // Text Shadow +$_MODULE['<{creativeelements}prestashop>_a97cc615f64c36e0f7cb6ea6e94c948d'] = 'Otwieraj wszystkie podlinkowane zdjęcia z efektem wyskakującego okna lightbox. Lightbox zostanie automatycznie uruchomiony w każdym linku prowadzącym do zdjęcia.'; // Open all image links in a lightbox popup window. The lightbox will automatically work on any link that leads to an image file. +$_MODULE['<{creativeelements}prestashop>_060e9cb662a63ad93391971af1ced41e'] = 'Lightbox Obrazu'; // Image Lightbox +$_MODULE['<{creativeelements}prestashop>_9a51a007b33a46e553def6423aad8648'] = 'Ustawienia Globalne'; // Global Settings +$_MODULE['<{creativeelements}prestashop>_a889e4cafb176aebf2d32a9037cbb227'] = 'Włącz w edytorze'; // Enable In Editor +$_MODULE['<{creativeelements}prestashop>_b95c09fb28e80cc672fd533a62252d70'] = 'Dodaj %s'; // Add %s +$_MODULE['<{creativeelements}prestashop>_7dfa8bf72c98a7c1927d689cdbc49ce1'] = 'Edytuj %s'; // Edit %s +$_MODULE['<{creativeelements}prestashop>_39a33ab3ae10c15b5c60328b23512713'] = 'Usuń %s'; // Remove %s +$_MODULE['<{creativeelements}prestashop>_60b3911c3a666b23f2579c62a6416542'] = 'Duplikuj %s'; // Duplicate %s +$_MODULE['<{creativeelements}prestashop>_6ed562a0d4381eef12d92c87520f3208'] = 'Widżet'; // Widget +$_MODULE['<{creativeelements}prestashop>_c626b471f89bc0c52d34a3a3f7df35c5'] = 'Z-Index'; // Z-Index +$_MODULE['<{creativeelements}prestashop>_a585b417342e2b83baa9e0c91631b635'] = 'Czas trwania przejścia'; // Transition Duration +$_MODULE['<{creativeelements}prestashop>_155731c389e7798846fc9daeb3d4872a'] = 'Opóźnienie przejścia'; // Transition Delay +$_MODULE['<{creativeelements}prestashop>_f5b67dd021f56100a6ea99169a67bf5e'] = 'Odstępy Widżetów'; // Widgets Space +$_MODULE['<{creativeelements}prestashop>_b3f82cf76f55546dc898d561c847b5d9'] = 'Chcesz również zaimportować ustawienia strony szablonu?'; // Do you want to also import the document settings of the template? +$_MODULE['<{creativeelements}prestashop>_ebbb5896554d13cc4f2e46a9e44eb51e'] = 'Dodaj nofollow'; // Add nofollow +$_MODULE['<{creativeelements}prestashop>_2959ce8aed67d6b6e6f5cefd601f1091'] = 'Otwórz w nowym oknie'; // Open in new window +$_MODULE['<{creativeelements}prestashop>_0fb7010ec16c91ec543a440daab8917b'] = 'Opcje Linku'; // Link Options +$_MODULE['<{creativeelements}prestashop>box_shadow_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Pozycja'; // Position +$_MODULE['<{creativeelements}prestashop>box_shadow_control_606b51cc1c9d0b4af394419a22f2ff1f'] = 'Kontur'; // Outline +$_MODULE['<{creativeelements}prestashop>_d727e004d42165085a9b12a006cf31fc'] = 'Ustaw domyślne odstępy pomiędzy widżetami (Domyślny: 20)'; // Sets the default space between widgets (Default: 20) +$_MODULE['<{creativeelements}prestashop>_83473b478b2b3b5ece5200f5f60cb055'] = 'Opóźnienie Animacji'; // Animation Delay +$_MODULE['<{creativeelements}prestashop>_b289b32a5fe99e0c7e9369e56f19700d'] = 'Uwaga: Importowanie może zastąpić poprzednie ustawienia.'; // Attention: Importing may override previous settings. +$_MODULE['<{creativeelements}prestashop>_ec53a8c4f07baed5d8825072c89799be'] = 'Status'; // Status +$_MODULE['<{creativeelements}prestashop>_d38fd78cc216991579c255174909bd73'] = 'Ukryj Tytuł'; // Hide Title +$_MODULE['<{creativeelements}prestashop>_d511f8439ecde36647437fbba67a4394'] = 'Odstęp'; // Space +$_MODULE['<{creativeelements}prestashop>_91ba387c0204e8d0bdfa4e589f850606'] = 'Selektor Tytułu Strony'; // Page Title Selector +$_MODULE['<{creativeelements}prestashop>_278c491bdd8a53618c149c4ac790da34'] = 'Szablon'; // Template +$_MODULE['<{creativeelements}prestashop>_4dcd94eeeaad2b446cdea3c97f67c974'] = 'Nie działa? Możesz ustawić dla selektora tytułu inny selektor na stronie Ustawień.'; // Not working? You can set a different selector for the title in the Settings page. +$_MODULE['<{creativeelements}prestashop>_cc74161b4d0042cb69688fc031335b36'] = 'Inicjał'; // Drop Cap +$_MODULE['<{creativeelements}prestashop>_c39aca79ca3cc4558a313f65528a47a7'] = 'Wklej style'; // Paste Style +$_MODULE['<{creativeelements}prestashop>_7e5d6ab43f675667c7109ecd0ea8dabf'] = 'Przesuń na przód'; // Bring to Front +$_MODULE['<{creativeelements}prestashop>shapes_8e8c2adc91106422362ffd9b8b44e9a2'] = 'Góry'; // Mountains +$_MODULE['<{creativeelements}prestashop>shapes_4a8f72b777dc9735afaebac72822c77e'] = 'Chmury'; // Clouds +$_MODULE['<{creativeelements}prestashop>shapes_4fae8be981bd327f1302f4b678afe734'] = 'Zygzak'; // Zigzag +$_MODULE['<{creativeelements}prestashop>shapes_5e5500cb2b82eb72d550de644bd1b64b'] = 'Trójkąt'; // Triangle +$_MODULE['<{creativeelements}prestashop>shapes_ff8e3e7230eb6da5eb9df66861459010'] = 'Piramidy'; // Pyramids +$_MODULE['<{creativeelements}prestashop>shapes_bef629014564e9ece50fad279b2ab211'] = 'Trójkąt Asymetryczny'; // Triangle Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_686319a93c35facda5c3da08875fb394'] = 'Przechylenie'; // Tilt +$_MODULE['<{creativeelements}prestashop>shapes_2cb4d4a3f8dacd623fa045a44febd476'] = 'Krzywa'; // Curve +$_MODULE['<{creativeelements}prestashop>shapes_62d331ed3fa84befe1b7b3a45fe3c630'] = 'Krzywa Asymetryczna'; // Curve Asymmetrical +$_MODULE['<{creativeelements}prestashop>shapes_253761d8ff1b6655697cb0d9962d2537'] = 'Przezroczystość Przechylenia'; // Tilt Opacity +$_MODULE['<{creativeelements}prestashop>_ee08ead15605dc63a2ad3357d04f5838'] = 'Lightbox'; // Lightbox +$_MODULE['<{creativeelements}prestashop>_5a2cafc2b0fdf3e5242d40a878db7129'] = 'Przestrzeń Pomiędzy'; // Space Between +$_MODULE['<{creativeelements}prestashop>_4ee29ca12c7d126654bd0e5275de6135'] = 'Lista'; // List +$_MODULE['<{creativeelements}prestashop>shapes_2b1f94ef23b79bf90eb891cae1df7a90'] = 'Książka'; // Book +$_MODULE['<{creativeelements}prestashop>shapes_0f4e1aaabd074689b7d3ead824d1ee8e'] = 'Strzałka'; // Arrow +$_MODULE['<{creativeelements}prestashop>shapes_2c7642ce7af68f37ad5f82153ec30f2b'] = 'Wzór Fali'; // Waves Pattern +$_MODULE['<{creativeelements}prestashop>shapes_a609a9143e96c90080bddddb3305284f'] = 'Pędzel Fali'; // Waves Brush +$_MODULE['<{creativeelements}prestashop>shapes_a4b44939aabfe8df39b1ecf05fa95c0a'] = 'Fale'; // Waves +$_MODULE['<{creativeelements}prestashop>_9b8958acb7be504bb5f55f17c0eea366'] = 'Odwróć'; // Invert +$_MODULE['<{creativeelements}prestashop>_3dd971eb0a2385db4f30e71a456daf8a'] = 'Kształt Separatora'; // Shape Divider +$_MODULE['<{creativeelements}prestashop>_9ffbd422925a6839ee820ddbc59278c5'] = 'Efekt ’Flip’'; // Flip +$_MODULE['<{creativeelements}prestashop>shapes_8a9e64d86ed12ad40de129bc7f4683b2'] = 'Rozdzielenie'; // Split +$_MODULE['<{creativeelements}prestashop>shapes_08fb41620aa4c498a1f2ef09bbc1183c'] = 'Krople'; // Drops +$_MODULE['<{creativeelements}prestashop>_48686859ede3505d93db63bedafb649e'] = 'Uwaga: następujące kolory nie będą działać, jeśli włączone są kolory domyślne.'; // Note: The following colors won't work if Default Colors are enabled. +$_MODULE['<{creativeelements}prestashop>shapes_8af1e1ff4512e7d258e9b8ea8e9b48ef'] = 'Zanikający Wachlarz'; // Fan Opacity +$_MODULE['<{creativeelements}prestashop>_7b366044b5cb5aad6cc2fabb977c8534'] = 'ID CSS'; // CSS ID +$_MODULE['<{creativeelements}prestashop>_eee0168be69b854c20621fc6f01cc3fc'] = 'Po najechaniu'; // Hover +$_MODULE['<{creativeelements}prestashop>_7d11089c148e5d9b9e686b62454a491e'] = 'Szerokość Nawigacji'; // Navigation Width +$_MODULE['<{creativeelements}prestashop>_d55b3ffa9fc8021e934158ca07e2770e'] = 'Dodaj własne id BEZ znaku ’#’, np. moje-id'; // Add your custom id WITHOUT the Pound key. e.g: my-id +$_MODULE['<{creativeelements}prestashop>background_control_32a843da6ea40ab3b17a3421ccdf671b'] = 'Linearny'; // Linear +$_MODULE['<{creativeelements}prestashop>background_control_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Rodzaj'; // Type +$_MODULE['<{creativeelements}prestashop>background_control_d9eb9d6792d85c5d2433902a63116ad5'] = 'Drugi Kolor'; // Second Color +$_MODULE['<{creativeelements}prestashop>background_control_ce5bf551379459c1c61d2a204061c455'] = 'Lokacja'; // Location +$_MODULE['<{creativeelements}prestashop>background_control_5e59525cb7d1d1cd93be0b9f36e9d09a'] = 'Gradient'; // Gradient +$_MODULE['<{creativeelements}prestashop>background_control_fdc32a55217f1ca054f1f2b51ef4f6ec'] = 'Radialny'; // Radial +$_MODULE['<{creativeelements}prestashop>background_control_45f4ce6c3306644b1efe333f4f8d6929'] = 'Kąt'; // Angle +$_MODULE['<{creativeelements}prestashop>_0cc5d0ddd0ea34a8490e6e7fdb2cf924'] = 'Auto-Zapis'; // Autosave +$_MODULE['<{creativeelements}prestashop>_32c676ac5296556c0573a301ef5ab07b'] = 'Rewizja'; // Revision +$_MODULE['<{creativeelements}prestashop>_3fb0206d178d45a9b3542587483d4cd2'] = 'Wygląda na to, że opcja rewizji wpisów nie jest dostępna na Twojej stronie.'; // It looks like the post revision feature is unavailable in your website. +$_MODULE['<{creativeelements}prestashop>_3c4f26f0975793eb27edab314f670410'] = 'Rozpocznij projektowanie swojej strony, a zobaczysz tutaj całą historię rewizji.'; // Start designing your page and you'll be able to see the entire revision history here. +$_MODULE['<{creativeelements}prestashop>_b8c4a80d0eda1423acdda2bd6680be78'] = 'Historia rewizji pozwala na zapisanie wcześniejszych wersji Twojej pracy i przywrócenie ich w dowolnym momencie.'; // Revision history lets you save your previous versions of your work, and restore them any time. +$_MODULE['<{creativeelements}prestashop>_53e5aa2c97fef1555d2511de8218c544'] = 'Przez'; // By +$_MODULE['<{creativeelements}prestashop>_585823316b8534dcef7df30ebeab9951'] = 'Nie zapisano jeszcze żadnej rewizji'; // No Revisions Saved Yet +$_MODULE['<{creativeelements}prestashop>_512fec27328fb722291cf6ecf36fa913'] = 'Pola `od` i `do` adresu URL muszą się różnić'; // The `from` and `to` URL's must be different +$_MODULE['<{creativeelements}prestashop>revision_date_format_bd8abeec6fc85d0fa0846a78ef6554b8'] = 'M j @ H:i'; // M j @ H:i +$_MODULE['<{creativeelements}prestashop>_ee9d01da1e865af1b559fa7c8c047555'] = '%1$s temu (%2$s)'; // %1$s ago (%2$s) +$_MODULE['<{creativeelements}prestashop>_d2b49c98219ccb89d57a87f2a0a4b4c2'] = 'Adresy URL "od" i "do" muszą być prawidłowymi adresami URL'; // The `from` and `to` URL's must be valid URL's +$_MODULE['<{creativeelements}prestashop>_2b3a87fb1d58406bd4b58eeb2af2f23c'] = 'Nie można usunąć tej wersji.'; // Cannot delete this revision. +$_MODULE['<{creativeelements}prestashop>_cf82b977e27ef9ac33709a3effde83a2'] = 'Separator Tysięczny'; // Thousand Separator +$_MODULE['<{creativeelements}prestashop>background_control_7a1920d61156abc05a60135aefe8bc67'] = 'Domyślne'; // Default +$_MODULE['<{creativeelements}prestashop>_6579fbb112744c89b2c74f479df5f94b'] = 'Własny CSS pozwala na dodanie kodu CSS do każdego widget’a i sprawdzenie ich na żywo w edytorze.'; // Custom CSS lets you add CSS code to any widget, and see it render live right in the editor. +$_MODULE['<{creativeelements}prestashop>_42e6feb7f76e910efcda54034ecc83ce'] = 'Spersonalizowany CSS'; // Custom CSS +$_MODULE['<{creativeelements}prestashop>_525e4cfb0dd9f1b84d6018feff823cfe'] = 'Z tą opcją możesz zapisać widget jako globalny i dodawać go w wielu obszarach. Wszystkie te obszary będą dostępne do edycji z jednego miejsca.'; // With this feature, you can save a widget as global, then add it to multiple areas. All areas will be editable from one single place. +$_MODULE['<{creativeelements}prestashop>_d15305d7a4e34e02489c74a5ef542f36'] = 'Wyłączony'; // Off +$_MODULE['<{creativeelements}prestashop>_521c36a31c2762741cf0f8890cbe05e3'] = 'Włączony'; // On +$_MODULE['<{creativeelements}prestashop>_5d4d8771b47d6c5166952822e552f082'] = 'Bardzo Duży'; // Extra Large +$_MODULE['<{creativeelements}prestashop>_581a3d012fd82e4905a9fe0db3b37bfe'] = 'Bardzo Mały'; // Extra Small +$_MODULE['<{creativeelements}prestashop>_52293f13937b8aed21da15967dad191a'] = 'Błąd Danych: ID Szablonu nie może być takie same, jak aktualnie edytowany szablon. Wybierz inne ID.'; // Invalid Data: The Template ID cannot be the same as the currently edited template. Please choose a different one. +$_MODULE['<{creativeelements}prestashop>_9313566fe19aca293daefe4ce37942bf'] = 'Skórka'; // Skin +$_MODULE['<{creativeelements}prestashop>_3c1065e0c6f9907043f41d333a91b80e'] = 'Wybierz kolory, które pojawią się w kolorach edytora. Sprawia to, że dostęp do wybranych dla strony kolorów jest o wiele łatwiejszy.'; // Choose which colors appear in the editor's color picker. This makes accessing the colors you chose for the site much easier. +$_MODULE['<{creativeelements}prestashop>_280123f6890e1c72895353373d2caf09'] = 'Kolejność malejąca'; // Descending order +$_MODULE['<{creativeelements}prestashop>_a4f0054ae4e726280b463caec716d1e9'] = 'Kolejność rosnąca'; // Ascending order +$_MODULE['<{creativeelements}prestashop>_22f41f72bb164a942b3320ad48914c00'] = 'UWAGA! Zostanie USUNIĘTA CAŁA TREŚĆ tej strony. Jesteś pewna/pewny, że chcesz tego?'; // Attention: We are going to DELETE ALL CONTENT from this page. Are you sure you want to do that? +$_MODULE['<{creativeelements}prestashop>_e0ec11596b5e9fec2ae608c59800cebe'] = 'Usuń całą treść'; // Delete All Content +$_MODULE['<{creativeelements}prestashop>_c6f6c095c286b1f7a30b3366e22ef17f'] = 'Aktualizuj zmiany na stronie'; // Update changes to page +$_MODULE['<{creativeelements}prestashop>_55fb1b11cc3dbb67782af12731c07206'] = 'Wybór kolorów'; // Color Picker +$_MODULE['<{creativeelements}prestashop>_7ffb0536a7eb8a1924bc8cddd5ebd992'] = '%s są wyłączone'; // %s are disabled +$_MODULE['<{creativeelements}prestashop>_bad32986401d36fef61ae1ea7d8c6c4b'] = 'Wpisz selektor elementu rodzica, do którego zostanie rozciągnięta sekcja (np. #primary / .wrapper / main itp.) Zostaw puste pole, być rozciągnąć sekcję do szerokości strony.'; // Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width. +$_MODULE['<{creativeelements}prestashop>_b844b7c80a87be2619f6876933b07aea'] = 'Sekcja Rozciągnięta do'; // Stretched Section Fit To +$_MODULE['<{creativeelements}prestashop>_e1e75c2b4e63835910c8aee262af0d02'] = 'Ustaw domyślną szerokość obszaru treści (Domyślny: 1140)'; // Sets the default width of the content area (Default: 1140) +$_MODULE['<{creativeelements}prestashop>_b7b6baa53f2fedf6c3b60e0327c95a2f'] = 'Sekcja z kartami'; // Tabbed Section +$_MODULE['<{creativeelements}prestashop>_fbfd467e50aef807cbdabd58a86621d3'] = 'Pasek kart'; // Tab Bar +$_MODULE['<{creativeelements}prestashop>_8c5751b7fdbcb82b348c2e5ad90b3183'] = 'Przepełnienie przewijania'; // Overflow Scrolling +$_MODULE['<{creativeelements}prestashop>_7bafc2154ab2b900bbb572c80ba6c423'] = 'Rozciągnij Sekcję do pełnej szerokości strony używając JS.'; // Stretch the section to the full width of the page using JS. +$_MODULE['<{creativeelements}prestashop>_442a913f95b8efa0a564f8acd5953752'] = 'Rozciągnij Sekcję'; // Stretch Section +$_MODULE['<{creativeelements}prestashop>_d87d1f34e54b9466c18bca47e34b0c37'] = 'Ten obrazek okładki zastąpi wideo w tle na urządzeniach mobilnych i tabletach.'; // This cover image will replace the background video on mobile and tablet devices. +$_MODULE['<{creativeelements}prestashop>_7a007d6bcd82bb60a6d3e4d45dc61eb4'] = 'Odwróć kolumny'; // Reverse Columns +$_MODULE['<{creativeelements}prestashop>_7afa3444548693d41aba80ed9946e2bf'] = 'Podgląd dla 360px'; // Preview for 360px +$_MODULE['<{creativeelements}prestashop>_87d17f4624a514e81dc7c8e016a7405c'] = 'Mobilna'; // Mobile +$_MODULE['<{creativeelements}prestashop>_aba47e8f90c4d9395507038e9215582f'] = 'Domyślny Podgląd'; // Default Preview +$_MODULE['<{creativeelements}prestashop>_bc30b765dbe7cfa8d8cfa4184af2c620'] = 'Wartości linku'; // Link values together +$_MODULE['<{creativeelements}prestashop>_6feadb455c64759731e453380c52fbd9'] = 'Shortcode'; // Shortcode +$_MODULE['<{creativeelements}prestashop>_4d70254b3a8e2bc38b6147fa6ee813be'] = 'Biblioteka'; // Library +$_MODULE['<{creativeelements}prestashop>_d3d2e617335f08df83599665eef8a418'] = 'Zamknij'; // Close +$_MODULE['<{creativeelements}prestashop>_ec8c82009f9de01c14037e4b85106701'] = 'Wybierz Strukturę'; // Select your Structure +$_MODULE['<{creativeelements}prestashop>_e37f4fc0441c524ee5a89453f12178c8'] = 'Dodaj Szablon'; // Add Template +$_MODULE['<{creativeelements}prestashop>_193cfc9be3b995831c6af2fea6650e60'] = 'Strona'; // Page +$_MODULE['<{creativeelements}prestashop>_db10a1ce6ae80065018ce639ce2b8989'] = 'Podczas przesyłania zapytania pojawił się następujący błąd:'; // The following error(s) occurred while processing the request: +$_MODULE['<{creativeelements}prestashop>_a25c753ee3e4be15ec0daa5a40deb7b8'] = 'Wystąpił błąd'; // An error occurred +$_MODULE['<{creativeelements}prestashop>_b10355bde8ffa109adfb72095166e87d'] = 'Oto, gdzie powinny się znajdować Twoje Szablony. Zaprojektuj je. Zapisz je. Wykorzystaj je wielokrotnie.'; // This is where your templates should be. Design it. Save it. Reuse it. +$_MODULE['<{creativeelements}prestashop>_9593b20ca67ef909af17be47183d93d2'] = 'Nie zapisywałaś/eś jeszcze Szablonów?'; // Haven’t Saved Templates Yet? +$_MODULE['<{creativeelements}prestashop>_ad07bae09061eb7eadc703f182e8c889'] = 'Wpisz Nazwę Szablonu'; // Enter Template Name +$_MODULE['<{creativeelements}prestashop>_d51fd6071c560eaade2f7f5b326bb472'] = 'Twój projekt będzie można wyeksportować i wykorzystać na dowolnej stronie'; // Your designs will be available for export and reuse on any page or website +$_MODULE['<{creativeelements}prestashop>_0095a9fa74d1713e43e370a7d7846224'] = 'Eksport'; // Export +$_MODULE['<{creativeelements}prestashop>_3e30a35f9c0c80e76e91b32e7a59a41c'] = 'Bądź czujna/y! Wkrótce pojawi się więcej niesamowitych Szablonów!'; // Stay tuned! More awesome templates coming real soon. +$_MODULE['<{creativeelements}prestashop>_b8b8e9f67faf0bb214c1686c52166ec4'] = 'Powrót do Repozytorium'; // Back to Library +$_MODULE['<{creativeelements}prestashop>_a458be0f08b7e4ff3c0f633c100176c0'] = 'Wstaw'; // Insert +$_MODULE['<{creativeelements}prestashop>_b9390195ecad3986568746a2a9b56354'] = 'Moje Szablony'; // My Templates +$_MODULE['<{creativeelements}prestashop>template_library_0e74beca97e711d51cf7a12165d583b7'] = 'Przeszukaj Szablony'; // Search Template +$_MODULE['<{creativeelements}prestashop>template_library_842adbd6cb91017b2ff5a1d89bd7c54f'] = 'Podgląd Szablonu'; // View Template +$_MODULE['<{creativeelements}prestashop>template_library_b9e1606876afab10e75fb80740c860a0'] = 'Wszystkie Szablony'; // All Templates +$_MODULE['<{creativeelements}prestashop>template_library_01c91564910069ffcc8f67ecb2180d38'] = 'Nowy Szablon'; // New Template +$_MODULE['<{creativeelements}prestashop>template_library_e838b63505c498050eccbcd6090a8262'] = 'Edytuj Szablon'; // Edit Template +$_MODULE['<{creativeelements}prestashop>template_library_5a6eb418df400f68052e7725cdc1170a'] = 'Dodaj Nowy Szablon'; // Add New Template +$_MODULE['<{creativeelements}prestashop>template_library_de9ced9bf5e9829de4a93ad8c9d7a170'] = 'Dodaj Nowy'; // Add New +$_MODULE['<{creativeelements}prestashop>template_library_278c491bdd8a53618c149c4ac790da34'] = 'Szablon'; // Template +$_MODULE['<{creativeelements}prestashop>_509820290d57f333403f490dde7316f4'] = 'Lokalne'; // Local +$_MODULE['<{creativeelements}prestashop>_917d94376951e7a0fd3d30a655a12f2e'] = 'Aktualizuj Repozytorium'; // Sync Library +$_MODULE['<{creativeelements}prestashop>_3da44b906269817f50ef58ea29f5f38d'] = 'Jesteś pewna/y, że chcesz usunąć ten Szablon?'; // Are you sure you want to delete this template? +$_MODULE['<{creativeelements}prestashop>_12113ea41be8a8ac8ed3301094d4c007'] = 'Usuń Szablon'; // Delete Template +$_MODULE['<{creativeelements}prestashop>_f8508f576cd3f742dfc268258dcdf0dd'] = 'Zdalne'; // Remote +$_MODULE['<{creativeelements}prestashop>_b9709e1b50c06ed39df03fa0b90d40ab'] = 'Importuj'; // Import Now +$_MODULE['<{creativeelements}prestashop>_e153ba109d2d09abb855127d99ed6f25'] = 'Eksportuj Szablon'; // Export Template +$_MODULE['<{creativeelements}prestashop>_2e46eab92bf73b409799a8baaa13f8f2'] = '(brak tytułu)'; // (no title) +$_MODULE['<{creativeelements}prestashop>template_library_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Rodzaj'; // Type +$_MODULE['<{creativeelements}prestashop>template_library_c7ae4d8246472b41edae4e734cc323aa'] = 'Brak Szablonów w Koszu'; // No Templates found in Trash +$_MODULE['<{creativeelements}prestashop>template_library_6d9743b85d09a6bc07b10c70ef974687'] = 'Nie znaleziono Szablonów'; // No Templates found +$_MODULE['<{creativeelements}prestashop>_fcbad5f8e00955d4129fe79370802ff1'] = 'Importuj Szablony'; // Import Templates +$_MODULE['<{creativeelements}prestashop>_64c2250bbf2bc80767d781cd19bb82af'] = 'Zapisz Twój %s do Repozytorium'; // Save Your %s to Library +$_MODULE['<{creativeelements}prestashop>_f5395c9793af8a11b406ca7c1ac70da9'] = 'Dowiedz się więcej'; // Learn More +$_MODULE['<{creativeelements}prestashop>_d0799ce2e6e121f7d748fe60ca5ee142'] = 'Dopasowanie obiektu'; // Object Fit +$_MODULE['<{creativeelements}prestashop>_9de70901d3562acdbec7f907c2ca62e7'] = 'Animacja po najechaniu'; // Hover Animation +$_MODULE['<{creativeelements}prestashop>_dc448aa55848e923ec2cc916305b6d2b'] = 'Wyłącz przewijanie'; // Prevent Scroll +$_MODULE['<{creativeelements}prestashop>_e16b5b7f26f54214445cbe38d72c2828'] = 'Szybkie'; // Fast +$_MODULE['<{creativeelements}prestashop>_efa5397985b8609a5dbeb430a4bcadd3'] = 'Wolne'; // Slow +$_MODULE['<{creativeelements}prestashop>box_shadow_control_838389e9675a112e8187aa34a4f61709'] = 'Boks z cieniem'; // Box Shadow +$_MODULE['<{creativeelements}prestashop>_06ce2a25e5d12c166a36f654dbea6012'] = 'Pionowy'; // Vertical +$_MODULE['<{creativeelements}prestashop>_c1b5fa03ecdb95d4a45dd1c40b02527f'] = 'Poziomy'; // Horizontal +$_MODULE['<{creativeelements}prestashop>_180bc3b1c5619aaef40e803f49921012'] = 'Rozszerz'; // Spread +$_MODULE['<{creativeelements}prestashop>_8b52de510bc5497ac43abfe566be48ab'] = 'Blur'; // Blur +$_MODULE['<{creativeelements}prestashop>_c78a3584ba81e0cd0ba8c29487e85d10'] = 'Domyślne Czcionki'; // Default Fonts +$_MODULE['<{creativeelements}prestashop>_b201b2e7e7a20df48b625f20c2f0933e'] = 'Palety Kolorów'; // Color Palettes +$_MODULE['<{creativeelements}prestashop>_373492f01889c61ff7d8bb91cf43d1bd'] = 'Animacja Wejścia'; // Entrance Animation +$_MODULE['<{creativeelements}prestashop>_f0153907b3a8a6ab6d24ebda1e079951'] = 'Możesz włączyć tę opcję na stronie Ustawienia modułu.'; // You can enable it from the module settings page. +$_MODULE['<{creativeelements}prestashop>box_shadow_control_b56d315e49178ba86341ff3b4e337c6b'] = 'Wewnętrzny'; // Inset +$_MODULE['<{creativeelements}prestashop>_9769396cc39a68db5cb5ff02896596ea'] = 'Umiejętność'; // My Skill +$_MODULE['<{creativeelements}prestashop>_a3d68d897c2e60e93783fe59e4da7ebf'] = 'Boczny'; // Aside +$_MODULE['<{creativeelements}prestashop>_cf51066f49e517f274b8173cc265c60b'] = 'Praca'; // Job +$_MODULE['<{creativeelements}prestashop>_5289f1a930358cba4623a7234db5c71e'] = 'Referencje'; // Testimonial +$_MODULE['<{creativeelements}prestashop>_30e624fbe7c9345f3cdb243bc2eeacfd'] = 'Oficjalny Kolor'; // Official Color +$_MODULE['<{creativeelements}prestashop>_bef2481eda40bd121482f1814d72314f'] = 'Zaokrąglony'; // Rounded +$_MODULE['<{creativeelements}prestashop>_786c4bcb88b15bd37b70d4b9d62ba324'] = 'Ikonki Społecznościowe'; // Social Icons +$_MODULE['<{creativeelements}prestashop>_3f761a65a378ebfdfc28741392606662'] = 'Przycisk "Pobierz"'; // Download Button +$_MODULE['<{creativeelements}prestashop>_b682e97ce55b3fbc9cc299c667cea845'] = 'Nakładka Tła'; // Background Overlay +$_MODULE['<{creativeelements}prestashop>_f23578fcd2a868168854ab714e7de537'] = 'Rozszerzone'; // Extended +$_MODULE['<{creativeelements}prestashop>_0db377921f4ce762c62526131097968f'] = 'Ogólne'; // General +$_MODULE['<{creativeelements}prestashop>_a9ded1e5ce5d75814730bb4caaf49419'] = 'Tło'; // Background +$_MODULE['<{creativeelements}prestashop>_812a48ba719daeda82e4da8e812d426c'] = 'Własny Adres URL'; // Custom URL +$_MODULE['<{creativeelements}prestashop>_ec114b1e189d6c3044e5706e93682fa8'] = 'Szerzej'; // Wider +$_MODULE['<{creativeelements}prestashop>_36bb6559696dc9124986ae120515984f'] = 'Wklej'; // Paste +$_MODULE['<{creativeelements}prestashop>_7b49a3eb804d134cdce5579121787fc3'] = 'Możesz przyciąć oryginalny rozmiar obrazka do dowolnych wymiarów. Możesz również ustawić pojedynczą wartość dla wysokości lub szerokości, by zachować oryginalne proporcje obrazu.'; // You can crop the original image size to any custom size. You can also set a single value for height or width in order to keep the original size ratio. +$_MODULE['<{creativeelements}prestashop>_0dc52fcd265149dd09a6d1f5b0e5a3b5'] = 'Prędkość Animacji'; // Animation Speed +$_MODULE['<{creativeelements}prestashop>_35773b27596fe91a749ddbf3e1257966'] = 'Karuzela Obrazów'; // Image Carousel +$_MODULE['<{creativeelements}prestashop>_17b04c58b2a994e2a115530681ca25e3'] = 'Rozciągnięcie Obrazu'; // Image Stretch +$_MODULE['<{creativeelements}prestashop>_c7f201c52862951afad2ae9802595286'] = 'Czas Animacji'; // Animation Duration +$_MODULE['<{creativeelements}prestashop>_b26ff651c2d7385db87fa44737402935'] = 'Szerokość Lewego Obramowania'; // Left Border Width +$_MODULE['<{creativeelements}prestashop>_6649c4b2e13734c911fbd45e025d9431'] = 'Strzałki i Punkty'; // Arrows and Dots +$_MODULE['<{creativeelements}prestashop>_a301fb6c9931e5b86a9b36a31b9c9e6d'] = 'Ustawienia Dodatkowe'; // Additional Options +$_MODULE['<{creativeelements}prestashop>_02674a4ef33e11c879283629996c8ff8'] = 'Kierunek'; // Direction +$_MODULE['<{creativeelements}prestashop>_9b6d3000134648fc9f1e71094ae0847d'] = 'Wewnątrz'; // Inside +$_MODULE['<{creativeelements}prestashop>_76fbf0ccd7fcd64879c2ff2119dc15a4'] = 'Na zewnątrz'; // Outside +$_MODULE['<{creativeelements}prestashop>_627b24abf27e2d03d38537f84e81cb2e'] = 'Odstęp'; // Spacing +$_MODULE['<{creativeelements}prestashop>_737e6c4a46563dd9da1557b304178be1'] = 'Intro Byline'; // Intro Byline +$_MODULE['<{creativeelements}prestashop>_9e24be381f41ce80bb67674e03f7b83a'] = 'Przepraszamy, nie odnaleziono obszaru treści na Twojej stronie.'; // Sorry, the content area was not found in your page. +$_MODULE['<{creativeelements}prestashop>_f9641a2d9ee9b7d52b4c15b7745c5ad6'] = 'Musisz wstawić wybraną pozycję modułu (zaczep) w bieżącym szablonie, aby CreativeElements działało na tej stronie.'; // You must insert the selected module position (hook) in the current template, in order for CreativeElements to work on this page. +$_MODULE['<{creativeelements}prestashop>_79c046167b0bdf15a17eb653226a2796'] = 'Nie Wybrano Obrazu'; // No Images Selected +$_MODULE['<{creativeelements}prestashop>border_control_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Ciągłe'; // Solid +$_MODULE['<{creativeelements}prestashop>border_control_d909d38d705ce75386dd86e611a82f5b'] = 'Podwójne'; // Double +$_MODULE['<{creativeelements}prestashop>border_control_90c09393a4c0970bc9a6703ad527781c'] = 'Kropki'; // Dotted +$_MODULE['<{creativeelements}prestashop>border_control_eb656e41b6da91494775ecf47a51da91'] = 'Kreski'; // Dashed +$_MODULE['<{creativeelements}prestashop>image_size_control_90589c47f06eb971d548591f23c285af'] = 'Własny'; // Custom +$_MODULE['<{creativeelements}prestashop>image_size_control_0e0613e1f93d33fba15773ba3ff6f56a'] = 'Wymiary Obrazu'; // Image Dimension +$_MODULE['<{creativeelements}prestashop>_1779d23035f16bb6f8a0f548f1eaa6b9'] = 'Załaduj Media'; // Insert Media +$_MODULE['<{creativeelements}prestashop>_12ad9074a51088cf63b8e33236d8cc13'] = 'Kolejność'; // Ordering +$_MODULE['<{creativeelements}prestashop>_b9987a246a537f4fe86f1f2e3d10dbdb'] = 'Wygląd'; // Display +$_MODULE['<{creativeelements}prestashop>_34e2d1989a1dbf75cd631596133ee5ee'] = 'Film'; // Video +$_MODULE['<{creativeelements}prestashop>_4182f4b55a58f5a6a3e3ee9fdb9b6b88'] = 'Opcje filmu'; // Video Options +$_MODULE['<{creativeelements}prestashop>_89d7b10cb4238977d2b523dfd9ea7745'] = 'Pętla'; // Loop +$_MODULE['<{creativeelements}prestashop>_54f70e7001bba1a2f8b2c7394b7fbc65'] = 'Tytuł Intra'; // Intro Title +$_MODULE['<{creativeelements}prestashop>_87cd4e8df281e8565913cb1dee924173'] = 'Obraz Intra'; // Intro Portrait +$_MODULE['<{creativeelements}prestashop>_8250b33e7828c54440743f11d36c2204'] = 'Kolor Przycisków'; // Controls Color +$_MODULE['<{creativeelements}prestashop>image_size_control_bbd47109890259c0127154db1af26c75'] = 'Pełny'; // Full +$_MODULE['<{creativeelements}prestashop>_a62d22910732d5343689f5117999abfa'] = 'Efekt'; // Effect +$_MODULE['<{creativeelements}prestashop>_04e0385c10aefee8e4681617d2f3ef40'] = 'Zanikanie'; // Fade +$_MODULE['<{creativeelements}prestashop>_4c72d232d1a1406e6c26251bbf6c3b25'] = 'Kropki'; // Dots +$_MODULE['<{creativeelements}prestashop>_431c060088b62effa79dd9c710d20b00'] = 'Nieskończona Pętla'; // Infinite Loop +$_MODULE['<{creativeelements}prestashop>_d3eea2f5aca8f6254f0938b5e8a33506'] = 'Wyrównanie Pionowe'; // Vertical Alignment +$_MODULE['<{creativeelements}prestashop>image_size_control_7d25feb59b8a44341084a00840d860d1'] = 'Rozmiar Obrazu'; // Image Size +$_MODULE['<{creativeelements}prestashop>_8c38c6601843e340c9e290746e5f92cc'] = 'Reset Struktury'; // Reset Structure +$_MODULE['<{creativeelements}prestashop>typography_control_6adf97f83acf6453d4a6a4b1070f3754'] = 'Brak'; // None +$_MODULE['<{creativeelements}prestashop>_ddedab99da4615aa6cb108466ba35bf1'] = 'Dodaj własną klasę BEZ KROPEK, np. moja-klasa'; // Add your custom class WITHOUT the dot. e.g: my-class +$_MODULE['<{creativeelements}prestashop>_b4dbdac374f627ca60f562d1dd368e97'] = 'To jest nagłówek'; // This is the heading +$_MODULE['<{creativeelements}prestashop>_33f5f59c40d41e206fd9af76ba81f8a2'] = 'Kliknij ten przycisk, by zmienić ten tekst. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'; // Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo. +$_MODULE['<{creativeelements}prestashop>_59a1c1ca0188302c39e06c1ceaf9b4d5'] = 'Tag HTML Tytułu'; // Title HTML Tag +$_MODULE['<{creativeelements}prestashop>_46c613087b2b4545ce4ef4ca82dc579c'] = 'UWAGA: Ustawienia wyświetlania (pokaż/ukryj dla urządzeń mobilnych, tabletów lub komputerów) ma zastosowanie jedynie wówczas, gdy znajdujesz się na stronie podglądu lub stronie docelowej. Nie działa on w trybie edycji Creative Elements.'; // Attention: The display settings (show/hide for mobile, tablet or desktop) will only take effect once you are on the preview or live page, and not while you're in editing mode in Elementor. +$_MODULE['<{creativeelements}prestashop>_527173285a0e8a11e07da121e3dc9493'] = 'Domyślne Czcionki Generic'; // Default Generic Fonts +$_MODULE['<{creativeelements}prestashop>_5e8fe619138eb3ea59cbc11b4e977a3c'] = 'Lista używanych czcionek, jeśli wybrana czcionka nie jest dostępna.'; // The list of fonts used if the chosen font is not available. +$_MODULE['<{creativeelements}prestashop>_aa56a2e65d8106aef3c61e4f6bf94fdb'] = 'Elementy'; // Elements +$_MODULE['<{creativeelements}prestashop>_a1a1577b9a9dddef5aa6644847575ef0'] = 'Wprowadź link filmu YouTube lub pliku (zalecane rozszerzenie - mp4).'; // YouTube link or video file (mp4 is recommended). +$_MODULE['<{creativeelements}prestashop>_f4f70727dc34561dfde1a3c529b6205c'] = 'Ustawienia'; // Settings +$_MODULE['<{creativeelements}prestashop>_7070a8e837fa8d255ec7aff468edb08d'] = 'Najbardziej zaawansowany edytor stron "przeciągnij i upuść" w trybie "live". Twórz z rekordową prędkością wysokiej jakości strony dopracowane co do piksela. Współpracuje z każdym motywem i każdym projektem.'; // The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design. +$_MODULE['<{creativeelements}prestashop>typography_control_621e7b8ece62fecc55e883252ff2fbe7'] = 'Wielkie Litery'; // Uppercase +$_MODULE['<{creativeelements}prestashop>typography_control_dc1ff975a46c75335d6d640abdc0c3a6'] = 'Małe Litery'; // Lowercase +$_MODULE['<{creativeelements}prestashop>typography_control_97a62b5e6d3cae255036b6bc37b87b44'] = 'Przekształć na Wielkie Litery'; // Capitalize +$_MODULE['<{creativeelements}prestashop>typography_control_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normalne'; // Normal +$_MODULE['<{creativeelements}prestashop>typography_control_1d874710ccdcd46b95397049d2e7500c'] = 'Nachylone'; // Italic +$_MODULE['<{creativeelements}prestashop>typography_control_12a8e47062ed3272e04dc0b991e38466'] = 'Przezroczystość'; // Oblique +$_MODULE['<{creativeelements}prestashop>_3acb228e77768f2611ae59e04595a90d'] = 'Tytuł Zakładki'; // Tab Title +$_MODULE['<{creativeelements}prestashop>_5a9bf0bc2b910b5e03c3f85d363838e7'] = 'Treść Zakładki'; // Tab Content +$_MODULE['<{creativeelements}prestashop>_e0f1691bdb67d9859e5a6a8d7c26e6a1'] = 'Edytor Tekstu'; // Text Editor +$_MODULE['<{creativeelements}prestashop>_a8875bbe4272c0bdd786cfaaedf77921'] = 'Przełącz'; // Toggle +$_MODULE['<{creativeelements}prestashop>_ee17cbac55d446219173726589867db9'] = 'Sugerowane Filmy'; // Suggested Videos +$_MODULE['<{creativeelements}prestashop>_3cc101db14264780bd1e84bc80d588f1'] = 'Styl Tytułu'; // Title Style +$_MODULE['<{creativeelements}prestashop>_4e05974b02cc4aa95db4d85baef6b6b4'] = 'Strzałki'; // Arrows +$_MODULE['<{creativeelements}prestashop>_6533b60847609ca99607d99753b6ea9b'] = 'Zatrzymaj po najechaniu'; // Pause on Hover +$_MODULE['<{creativeelements}prestashop>_7015777bcc86cd0c5e4819310d62b040'] = 'Zakładki'; // Tabs +$_MODULE['<{creativeelements}prestashop>_d9acb2b50c1ced5fe56790e1518532b2'] = 'Zakładka #1'; // Tab #1 +$_MODULE['<{creativeelements}prestashop>_ef6bec3512b7dee69f91f853f5fe7292'] = 'Zakładka #2'; // Tab #2 +$_MODULE['<{creativeelements}prestashop>_880c1273b27d27cfc82004c3a4b205c9'] = 'Kształt'; // Shape +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Koło'; // Circle +$_MODULE['<{creativeelements}prestashop>_ceb46ca115d05c51aa5a16a8867c3304'] = 'Kwadrat'; // Square +$_MODULE['<{creativeelements}prestashop>_f951a1e1ff1ed0d24a2758b6441a3431'] = 'Główny Kolor'; // Primary Color +$_MODULE['<{creativeelements}prestashop>_020a9f6a979825fc9349eccc66bef6db'] = 'Dodatkowy Kolor'; // Secondary Color +$_MODULE['<{creativeelements}prestashop>_757e8d7a69c388d1b39efa9bd3d54d4d'] = 'Szerokość Obramowania'; // Border Width +$_MODULE['<{creativeelements}prestashop>_7d25feb59b8a44341084a00840d860d1'] = 'Rozmiary Obrazu'; // Image Size +$_MODULE['<{creativeelements}prestashop>_13c31590d98cc452fc3794eaf0811e4d'] = 'Pozycja Obrazu'; // Image Position +$_MODULE['<{creativeelements}prestashop>_01d645c1c180eba4d15dd4438e712cd9'] = 'Odnośnik do'; // Link to +$_MODULE['<{creativeelements}prestashop>_591180770b39c5f069a1b2f9e643952c'] = 'Lista Ikon'; // Icon List +$_MODULE['<{creativeelements}prestashop>_88e38f5c21b56f5f87896476088a1783'] = 'Element Listy #1'; // List Item #1 +$_MODULE['<{creativeelements}prestashop>_043fd607b45939749a567bcb850978bc'] = 'Element Listy #2'; // List Item #2 +$_MODULE['<{creativeelements}prestashop>_8d35756b5a8f878d9d20f3ba0851786d'] = 'Element Listy #3'; // List Item #3 +$_MODULE['<{creativeelements}prestashop>_3f7b121ec5cc19cf6676a28656e0d5b8'] = 'Element Listy'; // List Item +$_MODULE['<{creativeelements}prestashop>_d8e4922dd15f21a02528d54926dcceac'] = 'Wpisz swój tytuł'; // Enter your title +$_MODULE['<{creativeelements}prestashop>_022586563e1d7808a2dcc1adf7d31cdd'] = 'Tag HTML'; // HTML Tag +$_MODULE['<{creativeelements}prestashop>_4c4ad5fca2e7a3f74dbb1ced00381aa4'] = 'HTML'; // HTML +$_MODULE['<{creativeelements}prestashop>_e0ec89dede7dfb470b66327694fcd96c'] = 'Kod HTML'; // HTML Code +$_MODULE['<{creativeelements}prestashop>_d33c208fe1458eff399189b5b0515025'] = 'Dodaj Obrazy'; // Add Images +$_MODULE['<{creativeelements}prestashop>_9cc51a9ca0ed0404f8b9125ad563ade9'] = 'Galeria Obrazów'; // Image Gallery +$_MODULE['<{creativeelements}prestashop>_6e475c4e40cb8bdfd54c18345937bc9a'] = 'Plik Multimedialny'; // Media File +$_MODULE['<{creativeelements}prestashop>_64663f4646781c9c0110838b905daa23'] = 'Losowy'; // Random +$_MODULE['<{creativeelements}prestashop>_fff0d600f8a0b5e19e88bfb821dd1157'] = 'Obrazy'; // Images +$_MODULE['<{creativeelements}prestashop>_272ba7d164aa836995be6319a698be84'] = 'Podpis'; // Caption +$_MODULE['<{creativeelements}prestashop>_4d60ab2c6d11d753267484006c23e54c'] = 'Mapy Google'; // Google Maps +$_MODULE['<{creativeelements}prestashop>_46f3ea056caa3126b91f3f70beea068c'] = 'Mapa'; // Map +$_MODULE['<{creativeelements}prestashop>_ec6d39989d44bfedcd0ddaa3651fa194'] = 'London Eye, London, United Kingdom'; // London Eye, London, United Kingdom +$_MODULE['<{creativeelements}prestashop>_dd7bf230fde8d4836917806aff6a6b27'] = 'Adres'; // Address +$_MODULE['<{creativeelements}prestashop>_0101316665d4f82adaa26d86fbbb2d6e'] = 'Nagłówek'; // Heading +$_MODULE['<{creativeelements}prestashop>_6861444ec5168a915bf147d856ecb91b'] = 'Strona Załącznika'; // Attachment Page +$_MODULE['<{creativeelements}prestashop>_466b98ca0f38bd8bf2260246c91f6882'] = 'Przerwa'; // Gap +$_MODULE['<{creativeelements}prestashop>_d7b5e50ef2050d92c3972793da595f49'] = 'Slajdy do pokazania'; // Slides to Show +$_MODULE['<{creativeelements}prestashop>_05b1dc77590105a18fc4c02526fe0c7a'] = 'Automatyczne odtwarzanie'; // Autoplay +$_MODULE['<{creativeelements}prestashop>_64d129224a5377b63e9727479ec987d9'] = 'Licznik'; // Counter +$_MODULE['<{creativeelements}prestashop>_ededf9a7b5f65a321a5f20ebf58e9517'] = 'Początkowa Liczba'; // Starting Number +$_MODULE['<{creativeelements}prestashop>_0cb5ed4f4d6f3d8b739d1f10fec8d36d'] = 'Końcowa Liczba'; // Ending Number +$_MODULE['<{creativeelements}prestashop>_83294d77029945fdb8dc4a5388829d27'] = 'Prefiks Liczby'; // Number Prefix +$_MODULE['<{creativeelements}prestashop>_5b122ce454e4b9f39a663d8d8ed6e85c'] = 'Sufiks Liczby'; // Number Suffix +$_MODULE['<{creativeelements}prestashop>_32ba78fe43257d3e7f88e3935a8ea0d4'] = 'Plus'; // Plus +$_MODULE['<{creativeelements}prestashop>_b2ee912b91d69b435159c7c3f6df7f5f'] = 'Liczba'; // Number +$_MODULE['<{creativeelements}prestashop>_2908050e771fb91a3afbb7809972e90c'] = 'Separator'; // Divider +$_MODULE['<{creativeelements}prestashop>_6ab9a295c00f945cf4881fd7667a0334'] = 'Odstęp'; // Spacer +$_MODULE['<{creativeelements}prestashop>_8c489d0946f66d17d73f26366a4bf620'] = 'Grubość'; // Weight +$_MODULE['<{creativeelements}prestashop>_a7a4ccc5e1a068d87f4965e014329201'] = 'XL'; // XL +$_MODULE['<{creativeelements}prestashop>_e737584ec6ea30637b1e2b1dde624fbe'] = 'XXL'; // XXL +$_MODULE['<{creativeelements}prestashop>_a63706eecfa33f67b315f978392ad7ae'] = 'Wyrównanie'; // Alignment +$_MODULE['<{creativeelements}prestashop>_058cc077563d4b47b43ae642a6478159'] = 'Wyjustowany'; // Justified +$_MODULE['<{creativeelements}prestashop>_cb5feb1b7314637725a2e73bdc9f7295'] = 'Kolor'; // Color +$_MODULE['<{creativeelements}prestashop>_6f6cb72d544962fa333e2e34ce64f719'] = 'Rozmiar'; // Size +$_MODULE['<{creativeelements}prestashop>_817434295a673aed431435658b65d9a7'] = 'Ikona'; // Icon +$_MODULE['<{creativeelements}prestashop>_f26664db07487754bb4b21355caad9ca'] = 'Pozycja Ikony'; // Icon Position +$_MODULE['<{creativeelements}prestashop>_9060587edeb01a63e3d3edc959678d1e'] = 'Przed'; // Before +$_MODULE['<{creativeelements}prestashop>_7bfcadb5535fe8aad5032762b7bfe159'] = 'Za'; // After +$_MODULE['<{creativeelements}prestashop>_070554647306343cbea29ebfdd278ba8'] = 'Obramowanie'; // Border +$_MODULE['<{creativeelements}prestashop>_be53a0541a6d36f6ecb879fa2c584b08'] = 'Obraz'; // Image +$_MODULE['<{creativeelements}prestashop>_10bf609ae34aa1c82f39f0e90cf6ffaf'] = 'Wybierz Obraz'; // Choose Image +$_MODULE['<{creativeelements}prestashop>_62a5e490880a92eef74f167d9dc6dca0'] = 'Ukryj'; // Hide +$_MODULE['<{creativeelements}prestashop>_75e7422f2fe253fc69d3f6c148d197ee'] = 'Kolor Tła'; // Background Color +$_MODULE['<{creativeelements}prestashop>_b78a3223503896721cca1303f776159b'] = 'Tytuł'; // Title +$_MODULE['<{creativeelements}prestashop>_b5a7adde1af5c87d7fd797b6245c2a39'] = 'Opis'; // Description +$_MODULE['<{creativeelements}prestashop>_b80517a37221cf35ccdfb5dfe99e57df'] = 'Zaokrąglenia Obramowania'; // Border Radius +$_MODULE['<{creativeelements}prestashop>_c936f9927e7b00ada48d5b571b74ff7d'] = 'Ukryj na Komputerze'; // Hide On Desktop +$_MODULE['<{creativeelements}prestashop>_4365dd761ee313b7154369721242ca54'] = 'Ukryj na Tablecie'; // Hide On Tablet +$_MODULE['<{creativeelements}prestashop>_8c51f4baf5c75864896a9984fdd085ed'] = 'Ukryj na Telefonie'; // Hide On Mobile +$_MODULE['<{creativeelements}prestashop>_7dce122004969d56ae2e0245cb754d35'] = 'Edytuj'; // Edit +$_MODULE['<{creativeelements}prestashop>_87b7760f14fbff78d8819291f36ab9a0'] = 'Przycisk'; // Button +$_MODULE['<{creativeelements}prestashop>_2660064e68655415da2628c2ae2f7592'] = 'Mały'; // Small +$_MODULE['<{creativeelements}prestashop>_87f8a6ab85c9ced3702b4ea641ad4bb5'] = 'Średni'; // Medium +$_MODULE['<{creativeelements}prestashop>_3a69b34ce86dacb205936a8094f6c743'] = 'Duży'; // Large +$_MODULE['<{creativeelements}prestashop>_b92071d61c88498171928745ca53078b'] = 'Alert'; // Alert +$_MODULE['<{creativeelements}prestashop>_a1fa27779242b4902f7ae3bdd5c6d508'] = 'Rodzaj'; // Type +$_MODULE['<{creativeelements}prestashop>_4059b0251f66a18cb56f544728796875'] = 'Informacja'; // Info +$_MODULE['<{creativeelements}prestashop>_505a83f220c02df2f85c3810cd9ceb38'] = 'Sukces'; // Success +$_MODULE['<{creativeelements}prestashop>_0eaadb4fcb48a0a0ed7bc9868be9fbaa'] = 'Ostrzeżenie'; // Warning +$_MODULE['<{creativeelements}prestashop>_990816b607ebf99b1415760965e4d564'] = 'Niebezpieczeństwo'; // Danger +$_MODULE['<{creativeelements}prestashop>_70124948c153a25f90f234807d432051'] = 'Tytuł i Opis'; // Title & Description +$_MODULE['<{creativeelements}prestashop>_53d7e9d912b9a2e0eb070e2f6ac8185b'] = 'Jestem opisem. Kliknij przycisk, by edytować ten tekst.'; // I am a description. Click the edit button to change this text. +$_MODULE['<{creativeelements}prestashop>_5c6dc399ce706d7c8114864dfe2e85cd'] = 'Usuń Przycisk'; // Dismiss Button +$_MODULE['<{creativeelements}prestashop>_498f79c4c5bbde77f1bceb6c86fd0f6d'] = 'Pokaż'; // Show +$_MODULE['<{creativeelements}prestashop>_f9b787a34b1385c01880b49c334398ce'] = 'Tytuł i Treść'; // Title & Content +$_MODULE['<{creativeelements}prestashop>_4351cfebe4b61d8aa5efa1d020710005'] = 'Zobacz'; // View +$_MODULE['<{creativeelements}prestashop>_475c80ecff56299d3527cf51af68e48c'] = 'Kolor Obramowania'; // Border Color +$_MODULE['<{creativeelements}prestashop>_779a68e20d5ee1a07b0968deda651684'] = 'Aktywny Kolor'; // Active Color +$_MODULE['<{creativeelements}prestashop>_93cba07454f06a4a960172bbd6e2a435'] = 'Tak'; // Yes +$_MODULE['<{creativeelements}prestashop>_bafd7322c6e97d25b6299b5d6fe8920b'] = 'Nie'; // No +$_MODULE['<{creativeelements}prestashop>_846495f9ceed11accf8879f555936a7d'] = 'Nawigacja'; // Navigation +$_MODULE['<{creativeelements}prestashop>_074de7e7c226d5c60f8af14c20725352'] = 'Nadrzędny'; // Primary +$_MODULE['<{creativeelements}prestashop>_0c7d6cf19426e01dcfa32434828ed266'] = 'Podrzędny'; // Secondary +$_MODULE['<{creativeelements}prestashop>_9dffbf69ffba8bc38bc4e01abf4b1675'] = 'Tekst'; // Text +$_MODULE['<{creativeelements}prestashop>_ecb45ba774122b23aa38ed2072872c19'] = 'Główny Nagłówek'; // Primary Headline +$_MODULE['<{creativeelements}prestashop>_c3cc351e0f5298324ba1af3535b17e97'] = 'Podrzędny Nagłówek'; // Secondary Headline +$_MODULE['<{creativeelements}prestashop>_52f4393e1b52ba63e27310ca92ba098c'] = 'Ustawienia Główne'; // General Settings +$_MODULE['<{creativeelements}prestashop>_205a36f1b372fa213113504073738be0'] = 'Pozycja Treści'; // Content Position +$_MODULE['<{creativeelements}prestashop>_7a1920d61156abc05a60135aefe8bc67'] = 'Domyślny'; // Default +$_MODULE['<{creativeelements}prestashop>_a4ffdcf0dc1f31b9acaf295d75b51d00'] = 'Góra'; // Top +$_MODULE['<{creativeelements}prestashop>_2ad9d63b69c4a10a5cc9cad923133bc4'] = 'Dół'; // Bottom +$_MODULE['<{creativeelements}prestashop>_97e7c9a7d06eac006a28bf05467fcc8b'] = 'Dodaj Link'; // Link +$_MODULE['<{creativeelements}prestashop>_a45da96d0bf6575970f2d27af22be28a'] = 'System'; // System +$_MODULE['<{creativeelements}prestashop>background_control_d35b51b639528d580362ca7042de6a0e'] = 'Klasyczny'; // Classic +$_MODULE['<{creativeelements}prestashop>background_control_06504aee6c05f084754e10986c07d51e'] = 'Tło Wideo'; // Background Video +$_MODULE['<{creativeelements}prestashop>background_control_8278a49e7da177e78b606cd1fae2f08f'] = 'Rodzaj Tła'; // Background Type +$_MODULE['<{creativeelements}prestashop>_92b09c7c48c520c3c55e497875da437c'] = 'Prawa Strona'; // Right +$_MODULE['<{creativeelements}prestashop>_945d5e233cf7d6240f6b783b36a374ff'] = 'Lewa Strona'; // Left +$_MODULE['<{creativeelements}prestashop>background_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Kolor'; // Color +$_MODULE['<{creativeelements}prestashop>background_control_75e7422f2fe253fc69d3f6c148d197ee'] = 'Kolor Tła'; // Background Color +$_MODULE['<{creativeelements}prestashop>background_control_be53a0541a6d36f6ecb879fa2c584b08'] = 'Obraz'; // Image +$_MODULE['<{creativeelements}prestashop>background_control_abd809c9e3c1c08e97740f86b8ceabfb'] = 'Obraz Tła'; // Background Image +$_MODULE['<{creativeelements}prestashop>background_control_52f5e0bc3859bc5f5e25130b6c7e8881'] = 'Pozycja'; // Position +$_MODULE['<{creativeelements}prestashop>background_control_ac71274aea488e58bea2a8c716fc578f'] = 'Góra Lewa Strona'; // Top Left +$_MODULE['<{creativeelements}prestashop>background_control_a20c9be95933e1fcf306b4b62d3792ea'] = 'Góra Środek'; // Top Center +$_MODULE['<{creativeelements}prestashop>background_control_5f9f678446e1abe7e062b056e755e059'] = 'Góra Prawa Strona'; // Top Right +$_MODULE['<{creativeelements}prestashop>background_control_617e1d17c0297a4b2c409f397618737e'] = 'Środek Lewa Strona'; // Center Left +$_MODULE['<{creativeelements}prestashop>background_control_cac17249ab9a6f510f995b5005dc94a2'] = 'Środek'; // Center Center +$_MODULE['<{creativeelements}prestashop>background_control_d7afdc5ae6dccbb16e24d9cac4067b41'] = 'Środek Prawa Strona'; // Center Right +$_MODULE['<{creativeelements}prestashop>background_control_7eb5542553fa5e5db4656e1c16f1316d'] = 'Dół Lewa Strona'; // Bottom Left +$_MODULE['<{creativeelements}prestashop>background_control_a088c172f6a893ef408116488ef672cd'] = 'Dół Środek'; // Bottom Center +$_MODULE['<{creativeelements}prestashop>background_control_4d297f5df921dca388a17e3336cad50f'] = 'Dół Prawa Strona'; // Bottom Right +$_MODULE['<{creativeelements}prestashop>background_control_e9cb217697088a98b1937d111d936281'] = 'Załącznik'; // Attachment +$_MODULE['<{creativeelements}prestashop>background_control_105078d294d30c978ca2badf7f376934'] = 'Przewijanie'; // Scroll +$_MODULE['<{creativeelements}prestashop>background_control_4457d440870ad6d42bab9082d9bf9b61'] = 'Przyklejony'; // Fixed +$_MODULE['<{creativeelements}prestashop>background_control_7020426cfb0a204051be4b3053d2acc8'] = 'Powtarzanie'; // Repeat +$_MODULE['<{creativeelements}prestashop>background_control_08b9e4f31c7aa3c1cfc97736ed8e6f81'] = 'Brak Powtarzania'; // No-repeat +$_MODULE['<{creativeelements}prestashop>background_control_f57da73b22e4c4b324499f5a19c8b782'] = 'Powtórz w osi X'; // Repeat-x +$_MODULE['<{creativeelements}prestashop>background_control_cfb23be94c536c4a0bc7e9a1e9b902fb'] = 'Powtórz w osi Y'; // Repeat-y +$_MODULE['<{creativeelements}prestashop>background_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Rozmiar'; // Size +$_MODULE['<{creativeelements}prestashop>background_control_06b9281e396db002010bde1de57262eb'] = 'Automatycznie'; // Auto +$_MODULE['<{creativeelements}prestashop>background_control_c795dfff10a7c952f4c5438951e9ece9'] = 'Pokryj'; // Cover +$_MODULE['<{creativeelements}prestashop>background_control_0e75eff17752bae4ab31af7ad9b45484'] = 'Contain'; // Contain +$_MODULE['<{creativeelements}prestashop>background_control_db3e3f51c9107e26c9bccf9a188ce2ed'] = 'Wypełnienie'; // Fill +$_MODULE['<{creativeelements}prestashop>background_control_69620f6919f430e72c0f67207535605b'] = 'Link Filmu'; // Video Link +$_MODULE['<{creativeelements}prestashop>border_control_f142def200da13d2a17cd85d74258d54'] = 'Rodzaj Obramowania'; // Border Type +$_MODULE['<{creativeelements}prestashop>_6adf97f83acf6453d4a6a4b1070f3754'] = 'Brak'; // None +$_MODULE['<{creativeelements}prestashop>_e41480b6bbfbf7407974a88d3d34f4fa'] = 'Stałe'; // Solid +$_MODULE['<{creativeelements}prestashop>_d909d38d705ce75386dd86e611a82f5b'] = 'Podwójne'; // Double +$_MODULE['<{creativeelements}prestashop>_90c09393a4c0970bc9a6703ad527781c'] = 'Kropki'; // Dotted +$_MODULE['<{creativeelements}prestashop>_eb656e41b6da91494775ecf47a51da91'] = 'Kreski'; // Dashed +$_MODULE['<{creativeelements}prestashop>border_control_32954654ac8fe66a1d09be19001de2d4'] = 'Szerokość'; // Width +$_MODULE['<{creativeelements}prestashop>border_control_cb5feb1b7314637725a2e73bdc9f7295'] = 'Kolor'; // Color +$_MODULE['<{creativeelements}prestashop>typography_control_6f6cb72d544962fa333e2e34ce64f719'] = 'Rozmiar'; // Size +$_MODULE['<{creativeelements}prestashop>typography_control_cefc4f7cbc8c34762e0f76703e7e174e'] = 'Rodzina'; // Family +$_MODULE['<{creativeelements}prestashop>typography_control_8c489d0946f66d17d73f26366a4bf620'] = 'Grubość'; // Weight +$_MODULE['<{creativeelements}prestashop>typography_control_2ff4148554480a37f85efd299df04850'] = 'Przekształcenie'; // Transform +$_MODULE['<{creativeelements}prestashop>typography_control_ae284f900f9d6e21ba69144cfc91e41b'] = 'Styl'; // Style +$_MODULE['<{creativeelements}prestashop>typography_control_2ea0cce3b1e76eb9a13c814937e7d295'] = 'Wysokość Linii'; // Line-Height +$_MODULE['<{creativeelements}prestashop>typography_control_81cb1a74d81616f475b029b26a548cc9'] = 'Odstępy pomiędzy literami'; // Letter Spacing +$_MODULE['<{creativeelements}prestashop>_90589c47f06eb971d548591f23c285af'] = 'Własna'; // Custom +$_MODULE['<{creativeelements}prestashop>_fe146ea3246d82386939d718b5869c88'] = 'Wybierz Ikonę'; // Select Icon +$_MODULE['<{creativeelements}prestashop>_f2a6c498fb90ee345d997f888fce3b18'] = 'Usuń'; // Delete +$_MODULE['<{creativeelements}prestashop>_138103c4e1d9c846d0afd000e5b928c8'] = 'Dodaj Element'; // Add Item +$_MODULE['<{creativeelements}prestashop>_5230001af73bfa7b6518d06ce7328efa'] = 'Więcej Struktur'; // More Structures +$_MODULE['<{creativeelements}prestashop>_16bfbf9c462762cf1cba4134ec53c504'] = 'Wczytuję'; // Loading +$_MODULE['<{creativeelements}prestashop>_1907bd03c6adcacb7ad68404b14ca18b'] = 'Dodaj Nową Sekcję'; // Add New Section +$_MODULE['<{creativeelements}prestashop>_9804fe0d898c7de798c4e175f59f6672'] = 'Widget Wyszukiwania...'; // Search Widget... +$_MODULE['<{creativeelements}prestashop>_b61541208db7fa7dba42c85224405911'] = 'Menu'; // Menu +$_MODULE['<{creativeelements}prestashop>_dd1a7e71effdaeffedeebbd060621250'] = 'Panel Widgetów'; // Widgets Panel +$_MODULE['<{creativeelements}prestashop>_628cef8c7f89a898c3c70b431700841b'] = 'Tryb Responsywny'; // Responsive Mode +$_MODULE['<{creativeelements}prestashop>_2310408a63388fe57e3a4177168a8798'] = 'Komputer'; // Desktop +$_MODULE['<{creativeelements}prestashop>_36384a9ea3ec791e6bd4ab6b36f2ff2a'] = 'Tablet'; // Tablet +$_MODULE['<{creativeelements}prestashop>_c9cc8cce247e49bae79f15173ce97354'] = 'Zapisz'; // Save +$_MODULE['<{creativeelements}prestashop>_31fde7b05ac8952dacf4af8a704074ec'] = 'Podgląd'; // Preview +$_MODULE['<{creativeelements}prestashop>_526d688f37a86d3c3f27d0c5016eb71d'] = 'Reset'; // Reset +$_MODULE['<{creativeelements}prestashop>_d94b42030b9785fd754d5c1754961269'] = 'Odrzuć'; // Discard +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Zastosuj'; // Apply +$_MODULE['<{creativeelements}prestashop>_5463fe6752b217567e3f1ab1921dd3cc'] = 'Paleta Kolorów'; // Color Palette +$_MODULE['<{creativeelements}prestashop>_040814c79beb48a59a293776e292ccb9'] = 'Więcej Palet'; // More Palettes +$_MODULE['<{creativeelements}prestashop>_ea4788705e6873b424c65e91c2846b19'] = 'Odrzuć'; // Cancel +$_MODULE['<{creativeelements}prestashop>_2e83ec658a7776a62a320cdee2690826'] = 'Przejmij'; // Take Over +$_MODULE['<{creativeelements}prestashop>_4f2f5e1d6e2a13469ad431474a68ab82'] = 'Powrót'; // Go Back +$_MODULE['<{creativeelements}prestashop>_248336101b461380a4b2391a7625493d'] = 'Zapisano'; // Saved +$_MODULE['<{creativeelements}prestashop>_d3b67861c9d313014761beb38d771889'] = 'Uwaga: Wszystkie niezapisane zmiany zostaną utracone.'; // Please note: All unsaved changes will be lost. +$_MODULE['<{creativeelements}prestashop>_5d50889672f6f860d14f502de3de1957'] = 'Kolory'; // Colors +$_MODULE['<{creativeelements}prestashop>_b5ccb7d52b4f221253779a94cd40e902'] = 'Wkrótce'; // Soon +$_MODULE['<{creativeelements}prestashop>_6ed482754b5780176fd1ba9dd789dea3'] = 'O Creative Elements'; // About Creative Elements +$_MODULE['<{creativeelements}prestashop>_168b82d33f8073018c50a4f658a02559'] = 'Kolumny'; // Columns +$_MODULE['<{creativeelements}prestashop>_f15c1cae7882448b3fb0404682e17e61'] = 'Treść'; // Content +$_MODULE['<{creativeelements}prestashop>_ae284f900f9d6e21ba69144cfc91e41b'] = 'Styl'; // Style +$_MODULE['<{creativeelements}prestashop>_9b6545e4cea9b4ad4979d41bb9170e2b'] = 'Zaawansowane'; // Advanced +$_MODULE['<{creativeelements}prestashop>_b2b2df378a7c7ade199bbaf944cb3f35'] = 'Responsywne'; // Responsive +$_MODULE['<{creativeelements}prestashop>_dc4c71563b9bc39a65be853457e6b7b6'] = 'Struktura'; // Structure +$_MODULE['<{creativeelements}prestashop>_d2c24d59e0baff4d0155fbdf62590867'] = 'Sekcja'; // Section +$_MODULE['<{creativeelements}prestashop>_1976d7f704de389d9fe064e08ea35b2d'] = 'Kolumna'; // Column +$_MODULE['<{creativeelements}prestashop>_603850e072131401265c4fc01027db93'] = 'Typografia'; // Typography +$_MODULE['<{creativeelements}prestashop>_8903861290617267b361478ab7f16f31'] = 'Kolor Tekstu'; // Text Color +$_MODULE['<{creativeelements}prestashop>_0a06bdec3ccc4e4b6f6401881cf922f6'] = 'Kolor Nagłówka'; // Heading Color +$_MODULE['<{creativeelements}prestashop>_59ece6dc07b89f5c61320dd130579a7f'] = 'Kolor Odnośnika'; // Link Color +$_MODULE['<{creativeelements}prestashop>_8435207e2ede48cf57a3a26e10a9e7a3'] = 'Kolor Odnośnika po najechaniu'; // Link Hover Color +$_MODULE['<{creativeelements}prestashop>_b14a348d14021b3f79da6be488d63253'] = 'Wyrównanie Tekstu'; // Text Align +$_MODULE['<{creativeelements}prestashop>_4f1f6016fc9f3f2353c0cc7c67b292bd'] = 'Środek'; // Center +$_MODULE['<{creativeelements}prestashop>_98369609669478919c74c916440e9978'] = 'Margines'; // Margin +$_MODULE['<{creativeelements}prestashop>_a10443964156b9e87c95e74c8f9baf15'] = 'Odstęp'; // Padding +$_MODULE['<{creativeelements}prestashop>_9a64f91eb059eb9a1ecf038d3467e09f'] = 'Klasy CSS'; // CSS Classes +$_MODULE['<{creativeelements}prestashop>_4f5f086e367315e5f52722c8c8e9b3e3'] = 'Szerokość Kolumny'; // Column Width +$_MODULE['<{creativeelements}prestashop>_02fbde656ea799c09d5d647dc0f5960a'] = 'Dodaj Nową Kolumnę'; // Add New Column +$_MODULE['<{creativeelements}prestashop>_ebd9bec4d70abc789d439c1f136b0538'] = 'Wygląd'; // Layout +$_MODULE['<{creativeelements}prestashop>_32954654ac8fe66a1d09be19001de2d4'] = 'Szerokość'; // Width +$_MODULE['<{creativeelements}prestashop>_6d1ca8184c6a1f11ecccfa17f8f9048a'] = 'Stała Kolumna'; // Boxed +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Pełna Szerokość'; // Full Width +$_MODULE['<{creativeelements}prestashop>_399df326b0ba3630641583807b229bfe'] = 'Szerokość Treści'; // Content Width +$_MODULE['<{creativeelements}prestashop>_845366c74d6395b273fa175bc2e057c3'] = 'Bez Odstępów'; // No Gap +$_MODULE['<{creativeelements}prestashop>_58b95bbe80c80c7dc3f16d8db0c506e8'] = 'Odstępy pomiędzy Kolumnami'; // Columns Gap +$_MODULE['<{creativeelements}prestashop>_4a7ab319be06025840ef3389301424b9'] = 'Wąska'; // Narrow +$_MODULE['<{creativeelements}prestashop>_e7c770a61dbdf81ca922ae0260e327c1'] = 'Szeroka'; // Wide +$_MODULE['<{creativeelements}prestashop>_eec6c4bdbd339edf8cbea68becb85244'] = 'Wysokość'; // Height +$_MODULE['<{creativeelements}prestashop>_3232bb2700bece80661b7b9f834be06d'] = 'Dopasuj do Ekranu'; // Fit To Screen +$_MODULE['<{creativeelements}prestashop>_c7a7e65064fdd9a2e9aa712fa88e9878'] = 'Minimalna Wysokość'; // Min Height +$_MODULE['<{creativeelements}prestashop>_4565b790baf0d98c20e624636451a43f'] = 'Minimalna Wysokość'; // Minimum Height +$_MODULE['<{creativeelements}prestashop>_a36618027461bc0fd7bb6868929ffaec'] = 'Pozycja Kolumny'; // Column Position +$_MODULE['<{creativeelements}prestashop>_fbb09a82eafab60150d0996e8fe46560'] = 'Rozciągnij'; // Stretch +$_MODULE['<{creativeelements}prestashop>_b1ca34f82e83c52b010f86955f264e05'] = 'Środek'; // Middle +$_MODULE['<{creativeelements}prestashop>_c1800412bc0184dd8339a641907b549f'] = 'Tekst Strony'; // Body Text +$_MODULE['<{creativeelements}prestashop>_5096bb1a69971401c543c0fd182777e9'] = 'Tekst Zaakcentowany'; // Accent Text +$_MODULE['<{creativeelements}prestashop>_4d5aae0b218a0bb62ff4513b66fc34d0'] = 'Akordion'; // Accordion +$_MODULE['<{creativeelements}prestashop>_ff3defaa406e66b49d1fd11ecebe07aa'] = 'Elementy Akordiona'; // Accordion Items +$_MODULE['<{creativeelements}prestashop>_228e7e4cc19e59ae320bd052cd12aeb3'] = 'Akordion #1'; // Accordion #1 +$_MODULE['<{creativeelements}prestashop>_708714aa8d5537518f5a8a8439012354'] = 'Tytuł Akordiona'; // Accordion Title +$_MODULE['<{creativeelements}prestashop>_01fa2fa7f98169b137677336c3f670f0'] = 'Treść Akordiona'; // Accordion Content +$_MODULE['<{creativeelements}prestashop>_059910d00f03f1aad921ecef33b1deb7'] = 'Slajdy do Przewijania'; // Slides to Scroll +$_MODULE['<{creativeelements}prestashop>_3902b5474a18ab7e9f8ce952a8f8123f'] = 'Blok z Ikoną'; // Icon Box +$_MODULE['<{creativeelements}prestashop>_917aedb05020a5ad03b91720c66d1900'] = 'Odstęp Ikony'; // Icon Spacing +$_MODULE['<{creativeelements}prestashop>_0c03306ef001b4e3d7f76ee2faad389e'] = 'Wcięcie Tekstu'; // Text Indent +$_MODULE['<{creativeelements}prestashop>_37e929a6d14b3e6eeb834900e8216c6e'] = 'Ikona po nacjechaniu'; // Icon Hover +$_MODULE['<{creativeelements}prestashop>_fb07b027d8d8c04f512f1a6a0f7bc365'] = 'Blok z Obrazem'; // Image Box +$_MODULE['<{creativeelements}prestashop>_ac2c0f8fbfcea1d561d0dbbfafc1747d'] = 'Odstępu Obrazu'; // Image Spacing +$_MODULE['<{creativeelements}prestashop>_7551d2d59d73e7d2650f7e2b9959efbf'] = 'Zakotwiczenie Menu'; // Menu Anchor +$_MODULE['<{creativeelements}prestashop>_a34285645af2703a9501db6fc881e5df'] = 'Zakotwiczenie'; // Anchor +$_MODULE['<{creativeelements}prestashop>_704fe059b7613cbd3353262998cdf836'] = 'To ID będzie ID CSS, które chcesz wykorzystać na swojej stronie, (bez #)'; // This ID will be the CSS ID you will have to use in your own page, Without #. +$_MODULE['<{creativeelements}prestashop>_697b67a9f0a74057bdbb8743bbb3c46e'] = 'ID Zakotwiczenia Menu'; // The ID of Menu Anchor. +$_MODULE['<{creativeelements}prestashop>_1fec9f77e87864f1bc863596105c295d'] = 'Na Przykład: o-nas'; // For Example: About +$_MODULE['<{creativeelements}prestashop>_8e4a53e769f15496d5c8f4fe9d0729df'] = 'Belka Postępu'; // Progress Bar +$_MODULE['<{creativeelements}prestashop>_37be07209f53a5d636d5c904ca9ae64c'] = 'Procent'; // Percentage +$_MODULE['<{creativeelements}prestashop>_e7832ab13448cc6894f4262dc1e05d0d'] = 'Wyświetl Procent'; // Display Percentage +$_MODULE['<{creativeelements}prestashop>_2ffe8a03531a12477e27a146bc15a3ba'] = 'Wewnętrzny Tekst'; // Inner Text +$_MODULE['<{creativeelements}prestashop>_8eb7d29b13b3a8389bef4c465053f63f'] = 'np. Projektant Stron WWW'; // e.g. Web Designer +$_MODULE['<{creativeelements}prestashop>_90d254b1e4a44ef82a0eff5ce2dd30bf'] = 'Projektant Stron WWW'; // Web Designer +$_MODULE['<{creativeelements}prestashop>_2bf376babbb3b4d6d1158aabc5b49109'] = 'Kolor Wewnętrznego Tekstu'; // Inner Text Color +$_MODULE['<{creativeelements}prestashop>_6160a53ece50ce6d4f5ef4452549835e'] = 'Slajd'; // Slide +$_MODULE['<{creativeelements}prestashop>_7396285ad8822a609e7d737cc82f6076'] = 'Automatyczna Prędkość'; // Autoplay Speed +$_MODULE['<{creativeelements}prestashop>_30eb111c6722ac96a4239a87dddfe5ae'] = 'Elementy Zakładek'; // Tabs Items +$_MODULE['<{creativeelements}prestashop>_f2a9f78110ca6de657f70b3ee9cd5320'] = 'Rozwijana Lista'; // Toggle Items +$_MODULE['<{creativeelements}prestashop>_0eb925daf423fe1169c3f6720e3c74c0'] = 'Element #1'; // Toggle #1 +$_MODULE['<{creativeelements}prestashop>_a1be4433701f8936cdf49569eb44e3ab'] = 'Element #2'; // Toggle #2 +$_MODULE['<{creativeelements}prestashop>_ccf67c36b837af38fd05d41dec1b47ec'] = 'Tytuł Elementu'; // Toggle Title +$_MODULE['<{creativeelements}prestashop>_9690ccd809b1cbdb861d0bad3c0802c9'] = 'Treść Elementu'; // Toggle Content +$_MODULE['<{creativeelements}prestashop>_ac97682c8f12cd9e67d121e87da0338d'] = 'Proporcje'; // Aspect Ratio +$_MODULE['<{creativeelements}prestashop>_9bcffa546758e012c3379c285a9e95c4'] = 'Nakładka Obrazu'; // Image Overlay +$_MODULE['<{creativeelements}prestashop>_512e805300422d5e8a86031b665ef28c'] = 'Ikona Otwarzania'; // Play Icon +$_MODULE['<{creativeelements}prestashop>_7ad033dd18a58e91f283103cdcd98d24'] = 'Akordion #2'; // Accordion #2 +$_MODULE['<{creativeelements}prestashop>_c900e1bd8e22771d610bd2a5861b544f'] = 'Akcent'; // Accent +$_MODULE['<{creativeelements}prestashop>_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normalne'; // Normal +$_MODULE['<{creativeelements}prestashop>_6b73ad372508225645eb96a2e505a602'] = 'Z obramowaniem'; // Framed +$_MODULE['<{creativeelements}prestashop>_49ee3087348e8d44e1feda1917443987'] = 'Nazwa'; // Name +$_MODULE['<{creativeelements}prestashop>_972e73b7a882d0802a4e3a16946a2f94'] = 'Podstawowy'; // Basic +$_MODULE['<{creativeelements}prestashop>_7776af0e9a7220bb12e18bbb20d49314'] = 'Animowany Licznik'; // Cool Number +$_MODULE['<{creativeelements}prestashop>background_control_16619cb16904fc183583f843307c4645'] = 'Zamiennik graficzny'; // Background Fallback +$_MODULE['<{creativeelements}prestashop>_8d2de5368588552fbae54044ac5c7b3d'] = 'Obróć'; // Rotate +$_MODULE['<{creativeelements}prestashop>_29b733fdb4bddeda910b3b4a659c2fef'] = 'Ułożony'; // Stacked +$_MODULE['<{creativeelements}prestashop>_93f07b720ebf7d1246512569761a5804'] = 'Usunięto'; // Removed +$_MODULE['<{creativeelements}prestashop>_e0583393371074d791e836b0087dcbae'] = 'Historia zmian'; // Revision History +$_MODULE['<{creativeelements}prestashop>_0c02adc8335c386e48c48be7304d6f9e'] = 'https://your-link.com'; // https://your-link.com +$_MODULE['<{creativeelements}prestashop>_47748fe5d78900c50f5bfe078cd3d44d'] = '%s przejęła/ął edycję tej strony. Chcesz przejąć edycję z powrotem?'; // %s has taken over and is currently editing. Do you want to take over this page editing? +$_MODULE['<{creativeelements}prestashop>_3248e7a58c1ea530e42933f72bb676e6'] = 'Kontrolki odtwarzacza'; // Player Controls +$_MODULE['<{creativeelements}prestashop>_a5dd7c693ee0caedf9aa691116106572'] = 'Czy na pewno chcesz usunąć %s?'; // Are you sure you want to remove this %s? + +$_MODULE['<{creativeelements}prestashop>backoffice_header_36f76decda17622c3cca1592a5a5bbb5'] = 'Edytuj w Creative Elements'; // Edit with Creative Elements +$_MODULE['<{creativeelements}prestashop>backoffice_header_fbf27983c033a1a3a9567cb19b10df48'] = 'Powrót do Edytora PrestaShop'; // Back to PrestaShop Editor +$_MODULE['<{creativeelements}prestashop>creativeelements_1352b53a1f0602c4682ed452b411bac1'] = 'Zapisz formularz przed edycją za pomocą Creative Elements.'; // Please save the form before editing with Creative Elements +$_MODULE['<{creativeelements}prestashop>creativeelements_58e1cede60a89e8489918834221dfe2e'] = 'Sklep jest w trybie konserwacji, dodaj swoje IP do białej listy.'; // The shop is in maintenance mode, please whitelist your IP +$_MODULE['<{creativeelements}prestashop>creativeelements_5972f8e1a9936ed85e8ad83b600bcc35'] = 'Nie możesz edytować elementów, które nie są wyświetlane, ponieważ brakuje pliku nadpisania. Prosimy o kontakt pod adresem https://addons.prestashop.com'; // You can not edit items which are not displayed, because an override file is missing. Please contact us on https://addons.prestashop.com +$_MODULE['<{creativeelements}prestashop>_9988f25f46a8a5fbf780ea53f748841e'] = 'Nieokreślona pozycja!'; // Undefined Position! +$_MODULE['<{creativeelements}prestashop>_ad8e46819e3ac7ff26d3db6a887164e6'] = 'Wstaw zawartość w dowolnym miejscu'; // Place Content Anywhere +$_MODULE['<{creativeelements}prestashop>_f7f19392da30e81c3abf433ce7b8ca38'] = 'Utworzono dnia'; // Created on +$_MODULE['<{creativeelements}prestashop>_155d14c40d6267b444be21ad136c5f60'] = 'Zmodyfikowano dnia'; // Modified on +$_MODULE['<{creativeelements}prestashop>_49ed4f70af1d8e7ba23a097c3daa9b6b'] = 'Lista szablonów'; // Templates List +$_MODULE['<{creativeelements}prestashop>_5a6eb418df400f68052e7725cdc1170a'] = 'Dodaj Nowy Szablon'; // Add New Template +$_MODULE['<{creativeelements}prestashop>_e838b63505c498050eccbcd6090a8262'] = 'Edytuj Szablon'; // Edit Template +$_MODULE['<{creativeelements}prestashop>_a14e0a7ee36fa87535472a963ba30bea'] = 'Plik szablonu'; // Template file +$_MODULE['<{creativeelements}prestashop>_bf50d5e661106d0abe925af3c2e6f7e7'] = 'Nagłówek'; // Header +$_MODULE['<{creativeelements}prestashop>_ded40f2a77c30efc6062db0cbd857746'] = 'Stopka'; // Footer +$_MODULE['<{creativeelements}prestashop>_cfe6e34a4c7f24aad32aa4299562f5b1'] = 'Strona główna'; // Home Page +$_MODULE['<{creativeelements}prestashop>_b60d1950a4271a0e4dd4f647d479dfa4'] = 'Strona kontaktowa'; // Contact Page +$_MODULE['<{creativeelements}prestashop>_6a015ba06ba180aa8a893610dbf1061a'] = 'Strona 404'; // 404 Page +$_MODULE['<{creativeelements}prestashop>_235e8d1a54ecddcf1d3ff533331ed416'] = 'Strona produktu'; // Product Page +$_MODULE['<{creativeelements}prestashop>_70f23ff594252e51839210b6cc9641fc'] = 'Aperçu rapide'; // Quick View +$_MODULE['<{creativeelements}prestashop>_15cff73eea419d7365dc3b88e95e7367'] = 'Miniatura produktu'; // Product Miniature +$_MODULE['<{creativeelements}prestashop>_7bf70debc40b3303954a6c18ae1aea62'] = 'Miniatura'; // Miniature +$_MODULE['<{creativeelements}prestashop>_88331ec25a3ecf67656071351edacce5'] = 'Ustawienia podglądu'; // Preview Settings +$_MODULE['<{creativeelements}prestashop>_9639e32cab248434a17ab32237cb3b71'] = 'Zastosuj i podejrzyj'; // Apply & Preview +$_MODULE['<{creativeelements}prestashop>_20928185e5bc74a3b872efdb77a2d806'] = 'Dopasuj do treści'; // Fit To Content +$_MODULE['<{creativeelements}prestashop>_6b551379c3c0b59326abdaf3b4395bd3'] = 'Maska'; // Overlay +$_MODULE['<{creativeelements}prestashop>_31e0a3a16f717e60e27cb65195dcb128'] = 'Przycisk zamykania'; // Close Button +$_MODULE['<{creativeelements}prestashop>_e873d89b2c012e5f3d22f8540180bd0e'] = 'Ustawienia motywu'; // Theme Settings +$_MODULE['<{creativeelements}prestashop>_c14300d0aebc9cf1a8da9f6bd83e700c'] = 'Lista czcionek'; // Fonts List +$_MODULE['<{creativeelements}prestashop>_630bd947659ab07c114e5ccef701a7af'] = 'Dodaj nową czcionkę'; // Add New Font +$_MODULE['<{creativeelements}prestashop>_486841ebd4c0bc17e6fc279da5268645'] = 'Edytuj czcionkę'; // Edit Font +$_MODULE['<{creativeelements}prestashop>_8ab72d49e1108ccb328f74491ea49c03'] = 'Nazwa czcionki'; // Font Name +$_MODULE['<{creativeelements}prestashop>_729d37b0c80d21143c60b3a877b88f43'] = 'Podaj nazwę czcionki'; // Enter Font Family +$_MODULE['<{creativeelements}prestashop>_e52ada68529abb857b61e9f2cf3ea369'] = 'Pliki czcionek'; // Font Files +$_MODULE['<{creativeelements}prestashop>_2eb11617fc1cce6c73173d413f9c271c'] = 'Dodaj wariant czcionki'; // Add Font Variation +$_MODULE['<{creativeelements}prestashop>_729a51874fe901b092899e9e8b31c97a'] = 'Jesteś pewien?'; // Are you sure? +$_MODULE['<{creativeelements}prestashop>_0d9c8dfe174c5be68d35a4055031de0d'] = 'Plik %s'; // %s File +$_MODULE['<{creativeelements}prestashop>_d68a6107129a6d62c76f49d59ffe9800'] = 'Web Open Font Format, używany przez nowoczesne przeglądarki'; // The Web Open Font Format, Used by Modern Browsers +$_MODULE['<{creativeelements}prestashop>_73e633e5de0477512fcb1b06f8a6ab89'] = 'Web Open Font Format 2, używany przez super nowoczesne przeglądarki'; // The Web Open Font Format 2, Used by Super Modern Browsers +$_MODULE['<{creativeelements}prestashop>_fc4106231d0296304e3cafd5d7296d12'] = 'Czcionki TrueType, używane dla lepszego wsparcia Safari, Android, iOS'; // TrueType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_d6abbfda58c20a18061c96fda4408779'] = 'Czcionki OpenType, używane dla lepszego wsparcia Safari, Android, iOS'; // OpenType Fonts, Used for better supporting Safari, Android, iOS +$_MODULE['<{creativeelements}prestashop>_794df3791a8c800841516007427a2aa3'] = 'Licencja'; // License +$_MODULE['<{creativeelements}prestashop>_c5985660600c4825c7a02653cdd26fe1'] = 'Aktywuj licencję'; // Activate License +$_MODULE['<{creativeelements}prestashop>_684b15c2f38b9147cc86e0af9d62ed53'] = 'Proszę aktywować licencję, aby uzyskać nieograniczony dostęp do biblioteki szablonów.'; // Please activate your license to get unlimited access to the template library. +$_MODULE['<{creativeelements}prestashop>_4a4fdd49ee2bc115b68859296441fe43'] = 'Stan licencji:'; // License Status: +$_MODULE['<{creativeelements}prestashop>_924272e395a0e2d3acf641224d5c67d8'] = 'Twoja witryna jest aktywna. Chcesz aktywować tę witrynę internetową za pomocą innej licencji?'; // Your website is activated. Want to activate this website by a different license? +$_MODULE['<{creativeelements}prestashop>_63cfad19115e3d7777f7767827160582'] = 'Napraw CSS'; // Regenerate CSS +$_MODULE['<{creativeelements}prestashop>_be99e107a4ef9dfbfa2f80d5d1ea1ab7'] = 'Style ustawione w Creative Elements są zapisywane w plikach CSS. Nadpisuj te pliki zgodnie z aktualnymi ustawieniami.'; // Styles set in Creative Elements are saved in CSS files. Recreate those files, according to the most recent settings. +$_MODULE['<{creativeelements}prestashop>_2846a86c26360bf5060ad147ae5e5757'] = 'Zmiana Adresu URL'; // Replace URL +$_MODULE['<{creativeelements}prestashop>_727ce4730bb0818c4b26f8fffc8f68d9'] = 'Uaktualni Adres Strony (URL)'; // Update Site Address (URL) +$_MODULE['<{creativeelements}prestashop>_15fa88522f8cb6d0c1fc3a9ac8010731'] = 'Zalecamy, abyś zrobił/a kopię bazy danych zanim skorzystasz z narzędzia Zmiany Adresu URL.'; // It is strongly recommended that you backup your database before using Replace URL. +$_MODULE['<{creativeelements}prestashop>_fea9d3952e7afb5f07cee1d876907752'] = 'Wpisz stary i nowy adres URL Twojej instalacji PrestaShop’a, aby uaktualnić wszystkie dane Creative Elements (Narzędzie istotne przy zmianie domeny lub przejściu na adres ’HTTPS’).'; // Enter your old and new URLs for your PrestaShop installation, to update all Creative Elements data (Relevant for domain transfers or move to 'HTTPS'). +$_MODULE['<{creativeelements}prestashop>_e60cf455794a35c95ea8d1fef0472731'] = 'Pokaż edycji ikonę na frontend'; // Show Edit Icon on Frontend +$_MODULE['<{creativeelements}prestashop>_604354d5a72ee39a59fea613aef87e41'] = 'Wyświetla ikonę edycji na frontend gdy pracownik ma aktywną sesję. Po kliknięciu tej ikony otworzy się edytor na żywo.'; // Displays an edit icon on frontend while employee has active session. By clicking on this icon the live editor will open. +$_MODULE['<{creativeelements}prestashop>_f02c1c38095f6c8954522d0ce7a22695'] = 'Ogranicz wersje'; // Limit Revisions +$_MODULE['<{creativeelements}prestashop>_f1a68d0a9ec7321ff122615cda20e15c'] = 'Ustawia maksymalną liczbę wersji na zawartość.'; // Sets the maximum number of revisions per content. +$_MODULE['<{creativeelements}prestashop>_ee75e395394c62827452484b6762a3c3'] = 'Wyłącz historię zmian'; // Disable Revision History +$_MODULE['<{creativeelements}prestashop>_4606c5e64748843a35978c392679fded'] = 'Wyłącz Domyślne kolory'; // Disable Default Colors +$_MODULE['<{creativeelements}prestashop>_d43bf721ede9d072d2301ca64c8625d8'] = 'Jeśli wolisz odziedziczyć kolory z motywu, możesz wyłączyć tę funkcję.'; // If you prefer to inherit the colors from your theme, you can disable this feature. +$_MODULE['<{creativeelements}prestashop>_e04e5c4768c5991e460a58f2cabdc6d3'] = 'Wyłącz domyślne fonty'; // Disable Default Fonts +$_MODULE['<{creativeelements}prestashop>_c9915f4e48ec2247d30af2034ec81f24'] = 'Jeśli wolisz odziedziczyć czcionki z motywu, możesz tutaj wyłączyć tę funkcję.'; // If you prefer to inherit the fonts from your theme, you can disable this feature here. +$_MODULE['<{creativeelements}prestashop>_aace7931afa15411153641f4fb5dd0fa'] = 'Ustawienia stylu'; // Style Settings +$_MODULE['<{creativeelements}prestashop>_c6083c97affb33b00b4236fc08125b4e'] = 'Możesz ukryć tytuł w ustawieniach dokumentu. Działa to motywy, które mają „%s” selektor. Jeśli selektor motywu jest inny, wprowadź go powyżej.'; // You can hide the title at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_8a756d3484d64b800c304144d79ff78e'] = 'Selektor opakowań treści'; // Content Wrapper Selector +$_MODULE['<{creativeelements}prestashop>_4550c700c57cabfc47b677f26d598c14'] = 'W ustawieniach dokumentu można usunąć marginesy, wypełnienia i maksymalną szerokość z obwoluty treści. Działa to w przypadku motywów, które mają selektor „%s”. Jeśli selektor motywu jest inny, wprowadź go powyżej.'; // You can clear margin, padding, max-width from content wrapper at document settings. This works for themes that have ”%s” selector. If your theme's selector is different, please enter it above. +$_MODULE['<{creativeelements}prestashop>_4038e06d3f1c2ed9a8b8ba1418842203'] = 'Breakpoint - Tablet'; // Tablet Breakpoint +$_MODULE['<{creativeelements}prestashop>_df1a7f57a6d0fa52039a36b1ee55851c'] = 'Ustawia punkt przerwania między komputerami stacjonarnymi i tabletami. Poniżej tego punktu przerwania pojawi się układ tabletu (domyślnie:%dpx).'; // Sets the breakpoint between desktop and tablet devices. Below this breakpoint tablet layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_5b23136cd3711bdae57560b72e66e923'] = 'Breakpoint - Telefon'; // Mobile Breakpoint +$_MODULE['<{creativeelements}prestashop>_4f663f113b83a55f1218b5403739d9e0'] = 'Ustawia punkt przerwania między tabletem a urządzeniami mobilnymi. Poniżej tego punktu przerwania pojawi się układ mobilny (domyślnie:%dpx).'; // Sets the breakpoint between tablet and mobile devices. Below this breakpoint mobile layout will appear (Default: %dpx). +$_MODULE['<{creativeelements}prestashop>_9ffc3ccc968a96d902af963c6d7b4e97'] = 'Zaawansowane ustawienia'; // Advanced Settings +$_MODULE['<{creativeelements}prestashop>_d626d902c43ae80039304aaabb577ebe'] = 'Nie zmieniaj tych opcji bez doświadczenia, nieprawidłowe ustawienia mogą uszkodzić Twoją witrynę.'; // Do not change these options without experience, incorrect settings might break your site. +$_MODULE['<{creativeelements}prestashop>_8b682d779569cdb4f8eac8f8113882b6'] = 'Sposób osadzenia CSS'; // CSS Print Method +$_MODULE['<{creativeelements}prestashop>_86921a38b6b13f5bac7815b64261bfc3'] = 'Użyj zewnętrznych plików CSS dla wszystkich wygenerowanych stylów. Skorzystaj z tej opcji, aby uzyskać lepszą wydajność.'; // Use external CSS files for all generated stylesheets. Choose this setting for better performance (recommended). +$_MODULE['<{creativeelements}prestashop>_df46e4e4a37b992335889fe0bcc9fbc2'] = 'Plik zewnętrzny'; // External File +$_MODULE['<{creativeelements}prestashop>_8654f2b13455edc295f7ce17c14c9887'] = 'Osadzenie wewnętrzne'; // Internal Embedding +$_MODULE['<{creativeelements}prestashop>_b49eb11b7c3a0762a6df47f7424c4d99'] = 'Edycja uchwytów'; // Editing Handles +$_MODULE['<{creativeelements}prestashop>_8fabaa06bc2da9ec5a25a0b9ee554e99'] = 'Pokaż edycji uchwyty po najechaniu na przycisk Edytuj element'; // Show editing handles when hovering over the element edit button +$_MODULE['<{creativeelements}prestashop>_7e6a43ce8ac6c832c95ecedb00a6064e'] = 'Wykluczenie kategorii z widgetu Moduł'; // Exclude Categories from Module widget +$_MODULE['<{creativeelements}prestashop>_723d690837af8a91be989751fadab183'] = 'Załaduj bibliotekę FontAwesome'; // Load FontAwesome Library +$_MODULE['<{creativeelements}prestashop>_c1a1c7d11028c7a1436198ca59331944'] = 'FontAwesome zapewnia skalowalne ikony wektorowe, które można natychmiast dostosować - rozmiar, kolor, cień i wszystko, co można zrobić za pomocą mocy CSS.'; // FontAwesome gives you scalable vector icons that can instantly be customized - size, color, drop shadow, and anything that can be done with the power of CSS. +$_MODULE['<{creativeelements}prestashop>_0016eea9e78adc9ba06072ac9b6a1b75'] = 'Załaduj bibliotekę Waypoints'; // Load Waypoints Library +$_MODULE['<{creativeelements}prestashop>_498b278c8d4479bdedb1bb77be02b4f2'] = 'Biblioteka Waypoints to najłatwiejszy sposób na wywołanie funkcji podczas przewijania do elementu.'; // Waypoints library is the easiest way to trigger a function when you scroll to an element. +$_MODULE['<{creativeelements}prestashop>_03ee559731e9434a9740773f516a38df'] = 'Załaduj bibliotekę Slick'; // Load Slick Library +$_MODULE['<{creativeelements}prestashop>_050ddbb779fbf2dc5b64861639b5eb41'] = 'Slick to wtyczka jQuery do tworzenia w pełni dostosowywalnych, responsywnych i przyjaznych dla urządzeń mobilnych karuzeli / suwaków, które działają z dowolnymi elementami HTML.'; // Slick is a jQuery plugin for creating fully customizable, responsive and mobile friendly carousels/sliders that work with any html elements. +$_MODULE['<{creativeelements}prestashop>_4829262cecb9828817b33e0f9c907f91'] = 'Eksperymenty'; // Experiments +$_MODULE['<{creativeelements}prestashop>_84f8df76775e37ae5a4a2b857220f90b'] = 'Uzyskaj dostęp do nowych i eksperymentalnych funkcji z Creative Elements przed ich oficjalną premierą. Ponieważ funkcje te są wciąż w fazie rozwoju, prawdopodobnie ulegną zmianie, ewolucji lub nawet zostaną całkowicie usunięte.'; // Access new and experimental features from Creative Elements before they're officially released. As these features are still in development, they are likely to change, evolve or even be removed altogether. +$_MODULE['<{creativeelements}prestashop>_f1dbba0d570fb6cc1b5dcf7c2f7cb374'] = 'Usuń ukryte elementy'; // Remove Hidden Elements +$_MODULE['<{creativeelements}prestashop>_cafe73a877fb194de8fe2fb509502f61'] = 'Gdy ukryjesz elementy na "Karta Zaawansowane / Sekcja Responsywne" ich kod zostanie usunięty z DOM.'; // When you hide elements on "Advanced tab / Responsive section" their markup will be removed from DOM. +$_MODULE['<{creativeelements}prestashop>_0000495ba408d49c02c05686a067646c'] = 'Sekcja Widoczność'; // Visibility Section +$_MODULE['<{creativeelements}prestashop>_d2d862f4b4341afe63f8164ca80f0373'] = 'Jeśli chcesz planować elementy lub filtrować je według wybranych grup klientów, ta funkcja będzie przydatna. Pojawi się w Karta Zaawansowane.'; // If you would like to schedule elements or filter them by selected customer groups, then this feature will be handy. It will appear under Advanced tab. +$_MODULE['<{creativeelements}prestashop>_1729a56cfc89021478498fe0c89a843a'] = 'Widoczność'; // Visibility +$_MODULE['<{creativeelements}prestashop>_25f7347236b51a5eae4ba01a7862cb55'] = 'Zaplanuj'; // Schedule +$_MODULE['<{creativeelements}prestashop>_08b02383dce834815c99539f02f0fd89'] = 'Grupa klientów'; // Customer Group +$_MODULE['<{creativeelements}prestashop>_1c0d77992f834a9640d9e094e7a73fb9'] = 'Pokaż dla'; // Show for +$_MODULE['<{creativeelements}prestashop>_449ca279e02730b90da2695e4261c154'] = 'Ukryj dla'; // Hide for +$_MODULE['<{creativeelements}prestashop>_777475dcd2749b94375fe07762d9d76f'] = 'Wybierz...'; // Select... +$_MODULE['<{creativeelements}prestashop>_e18056ef5b17ae8dda5f90f67c9e8533'] = '%s rok'; // %s year +$_MODULE['<{creativeelements}prestashop>_2fa7fca44cb89fd199a257dc02b3b1e5'] = '%s lata'; // %s years +$_MODULE['<{creativeelements}prestashop>_f44e927446959585ff1c59871ec2d5a3'] = '%s miesiąc'; // %s month +$_MODULE['<{creativeelements}prestashop>_7a9362f7b668d13007042dfeb04377f0'] = '%s miesiące'; // %s months +$_MODULE['<{creativeelements}prestashop>_059fb9aa56ea0f60a309243c0f1b7584'] = '%s tydzień'; // %s week +$_MODULE['<{creativeelements}prestashop>_a6a22726bcd37b84a44dcb29adcd9028'] = '%s tygodnie'; // %s weeks +$_MODULE['<{creativeelements}prestashop>_cc0c6aa19f38a763c6138695ea957edc'] = '%s dzień'; // %s day +$_MODULE['<{creativeelements}prestashop>_b95227314c538383cf221dae2172b047'] = '%s dni'; // %s days +$_MODULE['<{creativeelements}prestashop>_0aaff30699e63ba9bf8133d98b1d6832'] = '%s godzinę'; // %s hour +$_MODULE['<{creativeelements}prestashop>_99e8d9aecac65d9833e10a2d3bbee4f7'] = '%s godziny'; // %s hours +$_MODULE['<{creativeelements}prestashop>_b3f066d7b12126d9a43fc20a691994bb'] = '%s minutę'; // %s min +$_MODULE['<{creativeelements}prestashop>_9bd57b1597a0cd2a2d7e9a10ea01b41d'] = '%s minuty'; // %s mins +$_MODULE['<{creativeelements}prestashop>_6c5505b168fe8a3f3acc9ab255fc8f29'] = '%s sekunda'; // %s sec +$_MODULE['<{creativeelements}prestashop>_0174b36c22db64939888c723079becd9'] = '%s sekundy'; // %s secs +$_MODULE['<{creativeelements}prestashop>_88183b946cc5f0e8c96b2e66e1c74a7e'] = 'Nieznany'; // Unknown +$_MODULE['<{creativeelements}prestashop>_096d592e6ab639b929dae0985f3271f6'] = 'Nie działa? Możesz ustawić inny selektor tytułu w sekcji Ustawienia witryny.'; // Not working? You can set a different selector for the title in the Settings page. +$_MODULE['<{creativeelements}prestashop>_00d23a76e43b46dae9ec7aa9dcbebb32'] = 'Włączone'; // Enabled +$_MODULE['<{creativeelements}prestashop>_b9f5c797ebbf55adccdd8539a65a0241'] = 'Wyłączone'; // Disabled +$_MODULE['<{creativeelements}prestashop>_303efff2ee73c68202a22c21e900df83'] = 'http://docs.webshopworks.com/creative-elements?gt=pl'; +$_MODULE['<{creativeelements}prestashop>_4994a8ffeba4ac3140beb89e8d41f174'] = 'Język'; // Language +$_MODULE['<{creativeelements}prestashop>_c10ffb2e13c40ebe8294e296b7d499b2'] = 'Efekty przewijania'; // Scrolling Effects +$_MODULE['<{creativeelements}prestashop>_1e7581a778b92c0a0090b551a1a8d068'] = 'Przewijanie w pionie'; // Vertical Scroll +$_MODULE['<{creativeelements}prestashop>_4467c46a4d7150d5fb2079bd0fde510c'] = 'Przewijanie w poziomie'; // Horizontal Scroll +$_MODULE['<{creativeelements}prestashop>_6f7956741d5d673ff0c8eacc8d8c961c'] = 'Transparentność'; // Transparency +$_MODULE['<{creativeelements}prestashop>_85a7cd587d6142dbfc1a4de05af7b75d'] = 'Skala'; // Scale +$_MODULE['<{creativeelements}prestashop>_a0db49ba470c1c9ae2128c3470339153'] = 'Poziom'; // Level +$_MODULE['<{creativeelements}prestashop>_f3b666f2a16c1deb05bd6aa7eacfeb92'] = 'X Punkt kotwiczenia'; // X Anchor Point +$_MODULE['<{creativeelements}prestashop>_b41864fcc199583ca5c19b10e0afc25a'] = 'Y Punkt kotwiczenia'; // Y Anchor Point +$_MODULE['<{creativeelements}prestashop>_85cfe2037fb50aaf0632e12e655ce3db'] = 'Zastosuj efekty na'; // Apply Effects On +$_MODULE['<{creativeelements}prestashop>_31978abc991a7e1367f73b112e817c7d'] = 'Efekty względem'; // Effects Relative To +$_MODULE['<{creativeelements}prestashop>_8d6f3510a5cca2c1281c9c6afe7e0da2'] = 'Viewport'; // Viewport +$_MODULE['<{creativeelements}prestashop>_b670b69ddb8e225df6bb7ad005d3c33e'] = 'Całej strony'; // Entire Page +$_MODULE['<{creativeelements}prestashop>_c26f05fe62ad1f8fc2a83eddd105285b'] = 'Efekty działania myszy'; // Mouse Effects +$_MODULE['<{creativeelements}prestashop>_96c30ab1599bf72dca1549df71fe32af'] = 'Tor myszy'; // Mouse Track +$_MODULE['<{creativeelements}prestashop>_8ac8e312b9397d6c7a2c5b1b63967803'] = 'Pochylenie 3D'; // 3D Tilt +$_MODULE['<{creativeelements}prestashop>_fd1dd0c603be8170f9eae0be9f2f6afb'] = 'Bezpośredni'; // Direct +$_MODULE['<{creativeelements}prestashop>_d8d76e03141ed1cf0d5704df71efbfef'] = 'Naprzeciwko'; // Opposite +$_MODULE['<{creativeelements}prestashop>_d8f6d391ba573fe747a3360afb99904d'] = 'Sticky'; // Sticky +$_MODULE['<{creativeelements}prestashop>_79441290f51f6ddfd0bd605d31b5d913'] = 'Sticky on'; // Sticky On +$_MODULE['<{creativeelements}prestashop>_6db6ce4ce0746f333c58972e1e3682bf'] = 'Przesunięcie efektu'; // Effects Offset +$_MODULE['<{creativeelements}prestashop>_9218088d5225c7174f7299cb339ebce9'] = 'Zmieść się w kolumnie'; // Stay In Column +$_MODULE['<{creativeelements}prestashop>_f2f52cbf3a183f750f261f615e25d622'] = 'Ukryj przy przewijaniu'; // Hide on Scroll +$_MODULE['<{creativeelements}prestashop>_c1171931c7b83ccac8c962e368963010'] = 'Sticked'; // Sticked +$_MODULE['<{creativeelements}prestashop>_2ff4148554480a37f85efd299df04850'] = 'Transformacja'; // Transform +$_MODULE['<{creativeelements}prestashop>_33a9fad969f69834a37b94c729d98b2a'] = 'Rotacja 3D'; // 3D Rotate +$_MODULE['<{creativeelements}prestashop>_b78a58fa389c15e3e9676406754bb1df'] = 'Obrót X'; // Rotate X +$_MODULE['<{creativeelements}prestashop>_0d10ed97cb17c5220132a845f6a78d0a'] = 'Obrót Y'; // Rotate Y +$_MODULE['<{creativeelements}prestashop>_a80420eef88d11f77532f1b9cb467fa3'] = 'Perspektywa'; // Perspective +$_MODULE['<{creativeelements}prestashop>_85702e5968e1616bd5c577cf306b9806'] = 'Przesunięcie X'; // Offset X +$_MODULE['<{creativeelements}prestashop>_73411f5996beaef37222d8cac0b89b71'] = 'Przesunięcie Y'; // Offset Y +$_MODULE['<{creativeelements}prestashop>_2d69a9a5782855ac84602cc45863f342'] = 'Mantener las proporciones'; // Zachowaj proporcje +$_MODULE['<{creativeelements}prestashop>_df1195616b85f74c8828e20c5781cdd7'] = 'Skala X'; // Scale X +$_MODULE['<{creativeelements}prestashop>_979de706f6ea1f9eb5fba71c83a56c99'] = 'Skala Y'; // Scale Y +$_MODULE['<{creativeelements}prestashop>_2f2227d480b0c69364d7fddfecb82bd0'] = 'Pochylenie'; // Skew +$_MODULE['<{creativeelements}prestashop>_8bf35b556bf5a142730e8a8ed3d8137a'] = 'Pochylenie X'; // Skew X +$_MODULE['<{creativeelements}prestashop>_15c7890285219037e6f29c0814063128'] = 'Pochylenie Y'; // Skew Y +$_MODULE['<{creativeelements}prestashop>_fb7d5e3a3f491ac9d3b6711daa32cd00'] = 'Obrót w poziomie'; // Flip Horizontal +$_MODULE['<{creativeelements}prestashop>_5b83f92ddc4d4ff9e3a211c23268665d'] = 'Obrót w pionie'; // Flip Vertical +$_MODULE['<{creativeelements}prestashop>_29d94dad2c561873cffebf8d5ee4ba0c'] = 'Trigger Przez'; // Trigger By +$_MODULE['<{creativeelements}prestashop>_690c6e22d9a3b56d19e83710af87da0a'] = 'Dodaj tutaj swój własny niestandardowy CSS'; // Add your own custom CSS here +$_MODULE['<{creativeelements}prestashop>_c5c6bcf867da29493e4bb1bd4b6b0a78'] = 'Użyj „selector”, aby wskazać element opakowania. Przykłady:'; // Use "selector" to target wrapper element. Examples: +$_MODULE['<{creativeelements}prestashop>_756bcf5c0d47a6c968964d25f0eeaf57'] = "/* Dla głównego elementu */\nselector { color: red; }\n/* Dla elementu podrzędnego */\nselector .child-element { margin: 10px; }\n/* Lub selektor niestandardowy */\n.my-class { text-align: center; }"; +$_MODULE['<{creativeelements}prestashop>_80460385b65514494dcbb9fe041905d1'] = 'Kliknij ten przycisk, by zmienić ten tekst. Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; +$_MODULE['<{creativeelements}prestashop>_756b97abbc9f4c13c541b1adf847eaf0'] = 'Strona Facebook'; // Facebook Page +$_MODULE['<{creativeelements}prestashop>_d8a2783eec9416dc80f620f6dfba578c'] = 'Przycisk Facebook’a'; // Facebook Button +$_MODULE['<{creativeelements}prestashop>_c859113fb39b64631ca542ac10b0a7d5'] = 'Flip Box'; // Flip Box +$_MODULE['<{creativeelements}prestashop>_a601e28fb6c693bef281e5e63179674d'] = 'Wezwanie do działania'; // Call to Action +$_MODULE['<{creativeelements}prestashop>_e64465da4a42d65847b321045b155602'] = 'Odliczanie'; // Countdown +$_MODULE['<{creativeelements}prestashop>_c4d22d7c40de128eb983fcf5f2ae2674'] = 'Karuzela rekomendacji'; // Testimonial Carousel +$_MODULE['<{creativeelements}prestashop>_dbade2f6a2f7257aa7377edb1c2f1c4a'] = 'Obraz Hotspot'; // Image Hotspot +$_MODULE['<{creativeelements}prestashop>_0016012d63bde0bbb9a8c4e7e5ba113f'] = 'Wyszukiwanie AJAX'; // AJAX Search +$_MODULE['<{creativeelements}prestashop>_b0c309bbd6756d4e0d4dbb491dee248a'] = 'Recenzje TrustedShops'; // TrustedShops Reviews +$_MODULE['<{creativeelements}prestashop>_5d2d75cb0a2913351601b255eaa17bb6'] = 'Siatka produkt'; // Product Grid +$_MODULE['<{creativeelements}prestashop>_aeb0c8a362126a14711eb2441769f851'] = 'Karuzela produkt'; // Product Carousel +$_MODULE['<{creativeelements}prestashop>_2e9436e79e59f39483f89ddeb4c9fac6'] = 'Box produkt'; // Product Box +$_MODULE['<{creativeelements}prestashop>_396cfc95445a375fa678d71c6657fd21'] = 'Suwak obrazu'; // Image Slider +$_MODULE['<{creativeelements}prestashop>_1e56256dd5d600c0f0bf54ca1259139d'] = 'Subskrypcja email'; // Email Subscription +$_MODULE['<{creativeelements}prestashop>_2750dfebe7e01be17a0aaadf6b5effcc'] = 'Drzewo kategorii'; // Category Tree +$_MODULE['<{creativeelements}prestashop>_e55f75a29310d7b60f7ac1d390c8ae42'] = 'Moduł'; // Module +$_MODULE['<{creativeelements}prestashop>_a7c83a652241f74e9e8c13d4a8e77327'] = 'Logo sklepu'; // Shop Logo +$_MODULE['<{creativeelements}prestashop>_c62ada394e70783b9d5c00bc249af5a6'] = 'Tytuł sklepu'; // Shop Title +$_MODULE['<{creativeelements}prestashop>_b75443a19207ed3a3552edda86536857'] = 'Koszyk'; // Shopping Cart +$_MODULE['<{creativeelements}prestashop>_ca9085e1c300127e6d45bb7cc9a00a1c'] = 'Nawigacja'; // Nav Menu +$_MODULE['<{creativeelements}prestashop>_6e9accb242f0c478ccd34428e96c782b'] = 'Wybór języka'; // Language Selector +$_MODULE['<{creativeelements}prestashop>_162a8c580f44c2fe1357f6aab84ef88a'] = 'Wybór waluty'; // Currency Selector +$_MODULE['<{creativeelements}prestashop>_b9aefa40a54680bb258f9f9569290fae'] = 'Nazwa produktu'; // Product Name +$_MODULE['<{creativeelements}prestashop>_646911b123e94f0fb11d711926dd2c4b'] = 'Odznaki produktów'; // Product Badges +$_MODULE['<{creativeelements}prestashop>_76dd13f20840d624f3da3784f9d72c92'] = 'Produkt obrazki'; // Product Images +$_MODULE['<{creativeelements}prestashop>_3c38027cd61ce6345509574bc269f54c'] = 'Obraz produktu'; // Product Image +$_MODULE['<{creativeelements}prestashop>_e4cc585947db6303293acd6e50e23abd'] = 'Cena produktu'; // Product Price +$_MODULE['<{creativeelements}prestashop>_a3598f51ebb4d31d7e7811fc0fbd358f'] = 'Obrazy produktów'; // Product Rating +$_MODULE['<{creativeelements}prestashop>_4cc55681d14e73c3febdf5dd0566315c'] = 'Odliczanie do sprzedaży'; // Sale Countdown +$_MODULE['<{creativeelements}prestashop>_2eb2d7fb081e1ae3127a46c53f10119e'] = 'Obraz marki'; // Brand Image +$_MODULE['<{creativeelements}prestashop>_d20724dd5e4e41245018a3626478e81e'] = 'Produkt meta'; // Product Meta +$_MODULE['<{creativeelements}prestashop>_36e3402e4ddef43e92b99aef016c057e'] = 'Krótki opis'; // Short Description +$_MODULE['<{creativeelements}prestashop>_c12b4ee170ad3dbeda03b91102c76da2'] = 'Wariacje produktów'; // Product Variations +$_MODULE['<{creativeelements}prestashop>_d0629ccdf9ac5d63566c3f46f375b4a8'] = 'Zapas produktów'; // Product Stock +$_MODULE['<{creativeelements}prestashop>_608315af4932b03356df72ac18092446'] = 'Ilość produktu'; // Product Quantity +$_MODULE['<{creativeelements}prestashop>_638f592f71fc3fac3351534e69f9d29f'] = 'Dodaj do koszyka'; // Add to Cart +$_MODULE['<{creativeelements}prestashop>_87f3cd376f8aa27326148860be759c19'] = 'Cechy produktu'; // Product Features +$_MODULE['<{creativeelements}prestashop>_6a5373df703ab2827a4ba7facdfcf779'] = 'Dodaj do listy życzeń'; // Add to Wishlist +$_MODULE['<{creativeelements}prestashop>_854ee576475a63775d79cbfd6e4b13b6'] = 'Opis produktu'; // Product Description +$_MODULE['<{creativeelements}prestashop>_a1e3a46a20f81b1e21b30156a2370812'] = 'Załączniki produktu'; // Product Attachments +$_MODULE['<{creativeelements}prestashop>_167881850315c4df68e31d56fd9dd5d9'] = 'Udostępnij produkt'; // Product Share +$_MODULE['<{creativeelements}prestashop>_1d845dde77864747f09c10275b281f1a'] = 'Blok produktu'; // Product Block +$_MODULE['<{creativeelements}prestashop>_01f00f96696da28ccd6583f819385e71'] = 'Ścieżka tekstowa'; // Text Path +$_MODULE['<{creativeelements}prestashop>_03ac26b00f3492797a3c8d54f0337c9b'] = 'Dodaj tutaj swój zakrzywiony tekst'; // Add Your Curvy Text Here +$_MODULE['<{creativeelements}prestashop>_233017ea023bfe5ee5cebc8a7970f06c'] = 'Typ ścieżki'; // Path Type +$_MODULE['<{creativeelements}prestashop>_d911b34823c7674c292556dc56148c27'] = 'Fala'; // Wave +$_MODULE['<{creativeelements}prestashop>_2b73f91683611c489560a1d163e37902'] = 'Łuk'; // Arc +$_MODULE['<{creativeelements}prestashop>_30954d90085f6eaaf5817917fc5fecb3'] = 'Koło'; // Circle +$_MODULE['<{creativeelements}prestashop>_4803e6b9e63dabf04de980788d6a13c4'] = 'Linia'; // Line +$_MODULE['<{creativeelements}prestashop>_01733ae48f19ae284165e55dd2934b61'] = 'Owalny'; // Oval +$_MODULE['<{creativeelements}prestashop>_c978545ade9f5ce21bfa0353c04feda9'] = 'Spirala'; // Spiral +$_MODULE['<{creativeelements}prestashop>_22c6682f4ddd4efe02aafd67ba1896e6'] = 'Chcesz tworzyć własne ścieżki tekstowe?'; // Want to create custom text paths? +$_MODULE['<{creativeelements}prestashop>_e96dee4d699a25d7033bbd706a416ee9'] = 'Kierunek tekstu'; // Text Direction +$_MODULE['<{creativeelements}prestashop>_ae2023195822977b20f4557cb2c231e5'] = 'Pokaż ścieżkę'; // Show Path +$_MODULE['<{creativeelements}prestashop>_a11b6ae4ff43bc27097fa1899010cd4a'] = 'Odstępy między wyrazami'; // Word Spacing +$_MODULE['<{creativeelements}prestashop>_c9fc5918d5031ae2a84dc85c1392d236'] = 'Punkt początkowy'; // Starting Point +$_MODULE['<{creativeelements}prestashop>_ac70412e939d72a9234cdebb1af5867b'] = 'Ścieżka'; // Path +$_MODULE['<{creativeelements}prestashop>_8e763d9065582268c9ffa345a3f81f5f'] = 'Przekreślenie'; // Stroke +$_MODULE['<{creativeelements}prestashop>_e72cd05de3b0f5e87e01f1043d250226'] = 'Obrys tekstu'; // Text Stroke +$_MODULE['<{creativeelements}prestashop>_fb4e932947262c76d46e7671a667eb03'] = 'Kolor obrysu'; // Stroke Color +$_MODULE['<{creativeelements}prestashop>_1ec22a9ec8fc7840e53abdf9f2761db4'] = 'Wklej adres URL strony na Facebooku.'; // Paste the URL of the Facebook page. +$_MODULE['<{creativeelements}prestashop>_3d1f92a565d3b1a61880236e33c49bf3'] = 'Oś czasu'; // Timeline +$_MODULE['<{creativeelements}prestashop>_87f9f735a1d36793ceaecd4e47124b63'] = 'Wydarzenia'; // Events +$_MODULE['<{creativeelements}prestashop>_41de6d6cfb8953c021bbe4ba0701c8a1'] = 'Wiadomości'; // Messages +$_MODULE['<{creativeelements}prestashop>_f4629a6a3f69f39737e590fe9072a20f'] = 'Mały nagłówka'; // Small Header +$_MODULE['<{creativeelements}prestashop>_7e109af3848e4849f6230a1a04d45859'] = 'Zdjęcia profilowe'; // Profile Photos +$_MODULE['<{creativeelements}prestashop>_cd7c1196d2d970d5cfb3f84af649a5ee'] = 'Przycisk niestandardowy CTA'; // Custom CTA Button +$_MODULE['<{creativeelements}prestashop>_98b82c200a2e309b24cb481970f3fcc4'] = 'Polub'; // Like +$_MODULE['<{creativeelements}prestashop>_cab1fe09bb50a19ae3975657afeec8f4'] = 'Poleć'; // Recommend +$_MODULE['<{creativeelements}prestashop>_eb6d8ae6f20283755b339c0dc273988b'] = 'Standardowy'; // Standard +$_MODULE['<{creativeelements}prestashop>_85967e33b3ebf9c859f2b50ef9bf151d'] = 'Przycisk licznika'; // Button Count +$_MODULE['<{creativeelements}prestashop>_f2f81540eb0898cdbbbbeae97e17c3e0'] = 'Licznik w skrzynce'; // Box Count +$_MODULE['<{creativeelements}prestashop>_f4a216cd03ef98f742fa9dffedc6f1f9'] = 'Przycisk "Udostępnij"'; // Share Button +$_MODULE['<{creativeelements}prestashop>_e64df1d7c22b9638f084ce8a4aff3ff3'] = 'Docelowy URL'; // Target URL +$_MODULE['<{creativeelements}prestashop>_f88589c3e803217e3f6fe9d8e740e6e8'] = 'Strona bieżąca'; // Current Page +$_MODULE['<{creativeelements}prestashop>_5835bab1ade0060909e31a06af2e2cde'] = 'Z przodu'; // Front +$_MODULE['<{creativeelements}prestashop>_0557fa923dcee4d0f86b1409f5c2167f'] = 'Plecy'; // Back +$_MODULE['<{creativeelements}prestashop>_2a458f5ab135bec8376047e4fd5bec7b'] = 'Element graficzny'; // Graphic Element +$_MODULE['<{creativeelements}prestashop>_714341d9339756588d1dc724991c2b9a'] = 'Kliknij tutaj'; // Click Here +$_MODULE['<{creativeelements}prestashop>_63295c99f929bee9eed51f39328abd5e'] = 'Zastosuj łącze na'; // Apply Link on +$_MODULE['<{creativeelements}prestashop>_eceba382c8d2965c9969f3c50e38fd1d'] = 'Tylko przycisk'; // Button Only +$_MODULE['<{creativeelements}prestashop>_3974ce153db569952e044cdfdfbc83cd'] = 'Całe pudełko'; // Whole Box +$_MODULE['<{creativeelements}prestashop>_0f714135a0bce5c010291b55524b0f2e'] = 'Flip efekt'; // Flip Effect +$_MODULE['<{creativeelements}prestashop>_67727c06d3264f409d0e11009b322911'] = 'Kierunek Flip'; // Flip Direction +$_MODULE['<{creativeelements}prestashop>_258f49887ef8d14ac268c92b02503aaa'] = 'W górę'; // Up +$_MODULE['<{creativeelements}prestashop>_08a38277b0309070706f6652eeae9a53'] = 'W dół'; // Down +$_MODULE['<{creativeelements}prestashop>_a0157ad2638ad23725b7ab940ea92500'] = 'Głębia 3D'; // 3D Depth +$_MODULE['<{creativeelements}prestashop>_3cfce651e667ab85486dd42a8185f98a'] = 'Pudełko'; // Box +$_MODULE['<{creativeelements}prestashop>_960b44c579bc2f6818d2daaf9e4c16f0'] = 'Normalne'; // Normal +$_MODULE['<{creativeelements}prestashop>_eee0168be69b854c20621fc6f01cc3fc'] = 'Po najechaniu'; // Hover +$_MODULE['<{creativeelements}prestashop>_e24ee2487879116dcab772c0ac4fe341'] = 'Fokus'; // Focus +$_MODULE['<{creativeelements}prestashop>_f309bf4bccf801eb2fe4541107671578'] = 'Faborek'; // Ribbon +$_MODULE['<{creativeelements}prestashop>_5b469fd01889ec12f1e84c6e66829fc1'] = 'Powyżej'; // Above +$_MODULE['<{creativeelements}prestashop>_45b5de8fb2930cf2cc1dc2c6d20bd72a'] = 'Tekst przycisku'; // Button Text +$_MODULE['<{creativeelements}prestashop>_de6e9435dd82a9bf0416380e2b093166'] = 'Ikona przycisku'; // Button Icon +$_MODULE['<{creativeelements}prestashop>_d35b51b639528d580362ca7042de6a0e'] = 'Klasyczny'; // Classic +$_MODULE['<{creativeelements}prestashop>_c795dfff10a7c952f4c5438951e9ece9'] = 'Pokryj'; // Cover +$_MODULE['<{creativeelements}prestashop>_021cee4b91f9ef9dccdbc396c88fbc96'] = 'Pozycja pionowa'; // Vertical Position +$_MODULE['<{creativeelements}prestashop>_3338cc479e22ce066463f8a571039a1b'] = 'Efekty najechania'; // Hover Effects +$_MODULE['<{creativeelements}prestashop>_d7f3c1bb6150f237c08a4ab1e69c5ba9'] = 'Sequenced animacja'; // Sequenced Animation +$_MODULE['<{creativeelements}prestashop>_3711e805016ec3364cac6040610418ae'] = 'Kolor nakładki'; // Overlay Color +$_MODULE['<{creativeelements}prestashop>_86176e1d3dd3649de183dc33b7750f62'] = 'Tryb mieszania'; // Blend Mode +$_MODULE['<{creativeelements}prestashop>_a585b417342e2b83baa9e0c91631b635'] = 'Czas trwania przejścia'; // Transition Duration +$_MODULE['<{creativeelements}prestashop>_14c841eea7774b78caf79c58989f9625'] = 'Termin'; // Due Date +$_MODULE['<{creativeelements}prestashop>_5e27ff9d1365046388c9422316d0aecb'] = 'Data ustawiona zgodnie z Twoją strefą czasową: %s.'; // Date set according to your timezone: %s. +$_MODULE['<{creativeelements}prestashop>_e807d3ccf8d24c8c1a3d86db5da78da8'] = 'Dni'; // Days +$_MODULE['<{creativeelements}prestashop>_6a7e73161603d87b26a8eac49dab0a9c'] = 'Godziny'; // Hours +$_MODULE['<{creativeelements}prestashop>_f670ea66cfb0e90bd6090472ad692694'] = 'Minuty'; // Minutes +$_MODULE['<{creativeelements}prestashop>_8f19a8c7566af54ea8981029730e5465'] = 'Sekundy'; // Seconds +$_MODULE['<{creativeelements}prestashop>_91e23f92acf00ad0c0a49d05a0412473'] = 'Etykieta własna'; // Custom Label +$_MODULE['<{creativeelements}prestashop>_3c1bb91f28c38aed22a0b45bc185efda'] = 'Operacje Po Wygasnąć'; // Actions After Expire +$_MODULE['<{creativeelements}prestashop>_4202ef115ebede37eb22297113f5fb32'] = 'Przeadresować'; // Redirect +$_MODULE['<{creativeelements}prestashop>_dea4346d3e834aa308004b9d9a3bddd0'] = 'Pokaż wiadomość'; // Show Message +$_MODULE['<{creativeelements}prestashop>_13ea583f6474cdce6c0c9b289b652ffe'] = 'Referencje'; // Testimonials +$_MODULE['<{creativeelements}prestashop>_9a56fece0f74241ee0ad926dae7142af'] = 'Obraz w lini'; // Image Inline +$_MODULE['<{creativeelements}prestashop>_6d8a959b6100d1127c23225c11fa883b'] = 'Obraz w obramowaniu'; // Image Stacked +$_MODULE['<{creativeelements}prestashop>_0feb1fedcd7c19a716f395aaaee18724'] = 'Obraz nad'; // Image Above +$_MODULE['<{creativeelements}prestashop>_225bf3d9290b5f536b2e442259e78652'] = 'karuzela'; // Carousel +$_MODULE['<{creativeelements}prestashop>_11b2f0f6f0bc356b0016cef1f65d43f7'] = 'Hotspoty'; // Hotspots +$_MODULE['<{creativeelements}prestashop>_1ba9660cdf805a4d401168d890e267f0'] = 'Identyfikator TrustedShops'; // TrustedShops Id +$_MODULE['<{creativeelements}prestashop>_96a3a918504b7fc5557a988a909b8731'] = 'Otrzymałeś swój osobisty identyfikator TS podczas rejestracji w Trusted Shops.'; // You received your personal TS ID when you registered with Trusted Shops. +$_MODULE['<{creativeelements}prestashop>_19c1a6a025c55f0f62ace3d44736df57'] = 'Filtruj recenzje'; // Filter Reviews +$_MODULE['<{creativeelements}prestashop>_eb92025cb8c66f1850c13a9b602a1856'] = 'Pokaż wszystko'; // Show all +$_MODULE['<{creativeelements}prestashop>_7ed67a77aee0decb9cad36d739c734ad'] = 'Pokaż od %d gwiazdek'; // Show from %d Stars +$_MODULE['<{creativeelements}prestashop>_34e80a799d144cfe4af46815e103f017'] = 'Recenzje'; // Reviews +$_MODULE['<{creativeelements}prestashop>_44749712dbec183e983dcd78a7736c41'] = 'Data'; // Date +$_MODULE['<{creativeelements}prestashop>_0be8406951cdfda82f00f79328cf4efc'] = 'Komentarz'; // Comment +$_MODULE['<{creativeelements}prestashop>_56ee3495a32081ccb6d2376eab391bfa'] = 'Lista'; // Listing +$_MODULE['<{creativeelements}prestashop>_cf8156f1f57a8603cd6b3a28c9c2c61b'] = 'Polecane produkty'; // Featured Products +$_MODULE['<{creativeelements}prestashop>_7f82cf6868d89ca72d670092caedfb86'] = 'Spadek cen'; // Prices Drop +$_MODULE['<{creativeelements}prestashop>_1529636c2dd134b028a08f7b131115b5'] = 'Nowe Produkty'; // New Products +$_MODULE['<{creativeelements}prestashop>_e4e3e01496bc4f69bb08fc7da19f6d45'] = 'Najlepsza sprzedaż'; // Best Sales +$_MODULE['<{creativeelements}prestashop>_534ed3f39af7a636f6cf7a59f74fe824'] = 'Niedawno oglądane'; // Recently Viewed +$_MODULE['<{creativeelements}prestashop>_347da0da598694c57fff1cbaa197d615'] = 'Produkty powiązane'; // Related Products +$_MODULE['<{creativeelements}prestashop>_640925b217801653719fa252c768f21e'] = 'Produkty według marek'; // Products by Brand +$_MODULE['<{creativeelements}prestashop>_a086d764f6d125919a1f1ae36610be98'] = 'Produkty według dostawcy'; // Products by Supplier +$_MODULE['<{creativeelements}prestashop>_3543501e965f5cae13f8257f51c96bf7'] = 'Produkty niestandardowe'; // Custom Products +$_MODULE['<{creativeelements}prestashop>_8a4f5a66d0fcc9d13614516db6e3d47a'] = 'Produkty z tej samej kategorii'; // Products in the same category +$_MODULE['<{creativeelements}prestashop>_704d59dbf9c0f798de6d48d9514f8c93'] = 'Produkty tej samej marki'; // Products with the same brand +$_MODULE['<{creativeelements}prestashop>_39a3224a7760b9e3963f1d91b2a1679c'] = 'Produkty z tym samym dostawcą'; // Products with the same supplier +$_MODULE['<{creativeelements}prestashop>_64b7a126e62d47bb341dff4b51ef8ee4'] = 'Aktualny produkt'; // Current Product +$_MODULE['<{creativeelements}prestashop>_068f80c7519d0528fb08e82137a72131'] = 'Produkty'; // Products +$_MODULE['<{creativeelements}prestashop>_deb10517653c255364175796ace3553f'] = 'Produkt'; // Product +$_MODULE['<{creativeelements}prestashop>_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Kategoria'; // Category +$_MODULE['<{creativeelements}prestashop>_801322095c363689f7620e0147e3fd14'] = 'Zamów przez'; // Order By +$_MODULE['<{creativeelements}prestashop>_e22269bb51f9f2394e148716babbafbb'] = 'Popularność'; // Popularity +$_MODULE['<{creativeelements}prestashop>_f8a385c7fdc1e711a02ad3054f7d6107'] = 'Wielkość sprzedaży'; // Sales Volume +$_MODULE['<{creativeelements}prestashop>_885b3c534ec909cf87987897bfba2235'] = 'Przyjazd'; // Arrival +$_MODULE['<{creativeelements}prestashop>_78d3b698da1e3dead203cce8f05e98d9'] = 'Kierunek zamówienia'; // Order Direction +$_MODULE['<{creativeelements}prestashop>_cf3fb1ff52ea1eed3347ac5401ee7f0c'] = 'Rosnąco'; // Ascending +$_MODULE['<{creativeelements}prestashop>_e3cf5ac19407b1a62c6fccaff675a53b'] = 'Malejąco'; // Descending +$_MODULE['<{creativeelements}prestashop>_bac39878c1766a7a8552263903b9eeb9'] = 'Losuj'; // Randomize +$_MODULE['<{creativeelements}prestashop>_5d1dba09dcca2334ab1c3345824e2141'] = 'Limit produkt'; // Product Limit +$_MODULE['<{creativeelements}prestashop>_9e9116fc9c6c97bf62e851175f2be9a1'] = 'Drugi obraz'; // Second Image +$_MODULE['<{creativeelements}prestashop>_21c9820a0ca58c27fc6c2da73e1a2641'] = 'Pokaż drugie zdjęcie po najechaniu myszą, jeśli istnieje'; // Show second image on hover if exists +$_MODULE['<{creativeelements}prestashop>_8df278efb191bfec176ff8dd42668fa9'] = 'Maksymalna długość'; // Max. Length +$_MODULE['<{creativeelements}prestashop>_d090bb34c5334e3f8307d4d14295dbc0'] = 'Normalna cena'; // Regular Price +$_MODULE['<{creativeelements}prestashop>_70f23ff594252e51839210b6cc9641fc'] = 'Szybki podgląd'; // Quick View +$_MODULE['<{creativeelements}prestashop>_ff5627f178b47dbd65d0cc229a956c4e'] = 'Odznaki'; // Badges +$_MODULE['<{creativeelements}prestashop>_f2cd171bd42220283b7a595c3ff2aaaf'] = 'Sprzedaż'; // Sale +$_MODULE['<{creativeelements}prestashop>_03c2e7e41ffc181a4e84080b4710e81e'] = 'Nowy'; // New +$_MODULE['<{creativeelements}prestashop>_4492081ca02b059f9e8af4ddaf0f7292'] = 'Pakiet'; // Pack +$_MODULE['<{creativeelements}prestashop>_2ef464d50f6acd767fb3424910995218'] = 'Out-of-Stock'; // Out-of-Stock +$_MODULE['<{creativeelements}prestashop>_50155057b32fd0eac6419c9303a484a6'] = 'Odstęp między rzędami'; // Rows Gap +$_MODULE['<{creativeelements}prestashop>_72f2d9457fc51fdf260b4bc7a467d537'] = 'Zezwalaj na multiline'; // Allow Multiline +$_MODULE['<{creativeelements}prestashop>_fb5befd93e30eba6a71fef4b32a65e9a'] = 'Górna odległość'; // Top Distance +$_MODULE['<{creativeelements}prestashop>_271e53cc1d1dfb05e14b2dc83b4edb9e'] = 'Lewy odległość'; // Left Distance +$_MODULE['<{creativeelements}prestashop>_965cbdf786f774c2d426dcc19a039aa4'] = 'Prawo odległość'; // Right Distance +$_MODULE['<{creativeelements}prestashop>_3f65d6e17a11466983fd177702cf6a71'] = 'Formularz kontaktowy'; // Contact Form +$_MODULE['<{creativeelements}prestashop>_3481dc97ec8ba3c605cdc753aff1fcf0'] = 'Pola formularza'; // Form Fields +$_MODULE['<{creativeelements}prestashop>_e0626222614bdee31951d84c64e5e9ff'] = 'Wybierz'; // Select +$_MODULE['<{creativeelements}prestashop>_b021df6aac4654c454f46c77646e745f'] = 'Etykieta'; // Label +$_MODULE['<{creativeelements}prestashop>_68753d36ec0c4d7768b20993268d68d1'] = 'Zastępczy'; // Placeholder +$_MODULE['<{creativeelements}prestashop>_530f488f7a9800411efc6926ab189708'] = 'Rzędy'; // Rows +$_MODULE['<{creativeelements}prestashop>_902b0d55fddef6f8d651fe1035b7d4bd'] = 'Błąd'; // Error +$_MODULE['<{creativeelements}prestashop>_4f8222964f9a317cef99dddc23a121bd'] = 'Pole wyboru'; // Checkbox +$_MODULE['<{creativeelements}prestashop>_b22aeaf14deafb2ea0d4517349e59a8c'] = 'Ustawienia karuzeli'; // Carousel Settings +$_MODULE['<{creativeelements}prestashop>_44877c6aa8e93fa5a91c9361211464fb'] = 'Prędkość'; // Speed +$_MODULE['<{creativeelements}prestashop>_70ab55fc8ac90620143b01c453be77a3'] = 'Pętla na zawsze'; // Loop forever +$_MODULE['<{creativeelements}prestashop>_52c697d185b28f19449ff8a4755f7d20'] = 'Lista slajdy'; // Slides List +$_MODULE['<{creativeelements}prestashop>_ceb94b5ba288f75b442e17df5e2f386e'] = 'Skonfiguruj moduł'; // Configure Module +$_MODULE['<{creativeelements}prestashop>_fafd952418c73bbc20286f8b0ec5bd6a'] = 'Kategoria korzeń'; // Category Root +$_MODULE['<{creativeelements}prestashop>_76519eb2c98e529ec632474488e618d0'] = 'Kategoria domowa'; // Home Category +$_MODULE['<{creativeelements}prestashop>_7e95adf6587633010eba9b602dc43817'] = 'Bieżąca kategoria'; // Current Category +$_MODULE['<{creativeelements}prestashop>_4e98e60e38a29ab7bd94ea815c4f2ef2'] = 'Kategoria nadrzędna'; // Parent Category +$_MODULE['<{creativeelements}prestashop>_ff571d9fd8c0039b08b1a6106f650e70'] = 'Maksymalna głębokość'; // Maximum Depth +$_MODULE['<{creativeelements}prestashop>_6b46ae48421828d9973deec5fa9aa0c3'] = 'Sortować'; // Sort +$_MODULE['<{creativeelements}prestashop>_2e958161e121e44beb3cc40325adf32a'] = 'Wg nazwy'; // By Name +$_MODULE['<{creativeelements}prestashop>_7d7ab8b7ee9f5fa61c94baca04eab51c'] = 'Przez pozycję'; // By Position +$_MODULE['<{creativeelements}prestashop>_c20cc8f5bb7d26404f80b1c990c8a7fd'] = 'Porządek sortowania'; // Sort Order +$_MODULE['<{creativeelements}prestashop>_6404a73edb680a8c8ef91c6604295a9f'] = 'Utwórz nowy suwak'; // Create New Slider +$_MODULE['<{creativeelements}prestashop>_50dbffc1e2883d38ccf6841e2bb32041'] = 'Nazwij swój nowy suwak'; // Name your new slider +$_MODULE['<{creativeelements}prestashop>_2d9b9a764fb0be4be10e1b2fce63f561'] = 'Suwak'; // Slider +$_MODULE['<{creativeelements}prestashop>_3c311933c000b6aab612c1f5944f4388'] = 'Edytuj suwak'; // Edit Slider +$_MODULE['<{creativeelements}prestashop>_cd4bb13b29348d29bad8b60ca5358726'] = 'Wprowadzone zmiany mogą nie zostać zapisane. Czy na pewno chcesz zamknąć?'; // Changes you made may not be saved, are you sure you want to close? +$_MODULE['<{creativeelements}prestashop>_b9b371458ab7c314f88b81c553f6ce51'] = 'Podepnij do'; // Hook +$_MODULE['<{creativeelements}prestashop>_e6c8da8ca137d6c8c67d2911cb39a7df'] = 'Określ wymaganą podepnij w razie potrzeby.'; // Specify the required hook if needed. +$_MODULE['<{creativeelements}prestashop>_1bacb9caa60813ee730288d7dd95e7fc'] = 'URL strony'; // Site URL +$_MODULE['<{creativeelements}prestashop>_30fc6bbba82125243ecf4ddb27fee645'] = 'Minimalny'; // Minimal +$_MODULE['<{creativeelements}prestashop>_4d5098c1fcd4aad3e501e7d48ba6678a'] = 'Górny pasek'; // Topbar +$_MODULE['<{creativeelements}prestashop>_324118a6721dd6b8a9b9f4e327df2bf5'] = 'Pole tekstowe'; // Input +$_MODULE['<{creativeelements}prestashop>_3601146c4e948c32b6424d2c0a7f0118'] = 'Cena'; // Price +$_MODULE['<{creativeelements}prestashop>_a6b9b2b91d590b3b3ee18a918f1e0019'] = 'Lista wyników'; // Result List +$_MODULE['<{creativeelements}prestashop>_fad52b41b8afc9dd3abfe62ddf2619ad'] = 'Maks Lines'; // Max Lines +$_MODULE['<{creativeelements}prestashop>_0b60a73d19a81f2c1d7317facbb190cb'] = 'Rozmiar ikony'; // Icon Size +$_MODULE['<{creativeelements}prestashop>_d865317d1c523409ecfeb7fe4b36b022'] = 'Rozmiar ramki'; // Border Size +$_MODULE['<{creativeelements}prestashop>_219ff7705d67d0c798779951dcf82e95'] = 'Boczny Panel'; // Sidebar +$_MODULE['<{creativeelements}prestashop>_4eb86eb205d6b3d881389109cf04f5a2'] = 'Pusta wiadomość'; // Empty Message +$_MODULE['<{creativeelements}prestashop>_47fffe3e93fbb9948af64f5669fa228a'] = 'Brak produktów w koszyku.'; // No products in the cart. +$_MODULE['<{creativeelements}prestashop>_8fb5243396b45a73c0edda2c7216a520'] = 'Cena przesyłki'; // Shipping Price +$_MODULE['<{creativeelements}prestashop>_6ab3dc1c702beaee933398ab684ed0f5'] = 'Wskaźnik pozycji'; // Items Indicator +$_MODULE['<{creativeelements}prestashop>_b6230dfc594205d0ea15d5890ac22d7f'] = 'Bąbelek'; // Bubble +$_MODULE['<{creativeelements}prestashop>_76d19c2a8909c1336a839cc4aa86fa71'] = 'Ukryj puste'; // Hide Empty +$_MODULE['<{creativeelements}prestashop>_2194aaec8cc7086ab0e93f74547e5f53'] = 'Razem'; // Subtotal +$_MODULE['<{creativeelements}prestashop>_4e0604a7752f38f11cc085a88d86560f'] = 'Dodaj do koszyka Akcja'; // Add To Cart Action +$_MODULE['<{creativeelements}prestashop>_4766ca6cee31e96506d90b68e2dcd095'] = 'Pokaż modalne'; // Show Modal +$_MODULE['<{creativeelements}prestashop>_bde17a3981c83c8c5967d989f40a7a27'] = 'Otwórz koszyk'; // Open Shopping Cart +$_MODULE['<{creativeelements}prestashop>_b54ebc45d5968196122274ca0d93d849'] = 'Atrybuty produktu'; // Product Attributes +$_MODULE['<{creativeelements}prestashop>_488b35d8ad1e08e668ac0f2d3d463f68'] = 'Usuń ikonę '; // Remove Item Icon +$_MODULE['<{creativeelements}prestashop>_290612199861c31d1036b185b4e69b75'] = 'Streszczenie'; // Summary +$_MODULE['<{creativeelements}prestashop>_5b3ec15499a125805b5bbf8e4afcec8c'] = 'Przyciski'; // Buttons +$_MODULE['<{creativeelements}prestashop>_59fc69e031ecb0f82efe467fd6692383'] = 'Obejrzyj koszyk'; // View Cart +$_MODULE['<{creativeelements}prestashop>_e404dd0bece5f7c53d80edaa70513eec'] = 'Menu główne'; // Main Menu +$_MODULE['<{creativeelements}prestashop>_b5750478c3c490d2c1df5dfdfdd6b7a4'] = 'Lista linków'; // Link List +$_MODULE['<{creativeelements}prestashop>_3f2a535406fb0b67258851e0b8816caa'] = 'Przejdź do modułu %s, aby zarządzać elementami menu.'; // Go to the %s module to manage your menu items. +$_MODULE['<{creativeelements}prestashop>_7498c445a737312f3678aa1494e01a38'] = 'Rozwijane menu'; // Dropdown +$_MODULE['<{creativeelements}prestashop>_61cf8510205077b6f5491d38cd44c0f7'] = 'Wskaźnik'; // Pointer +$_MODULE['<{creativeelements}prestashop>_852721aa5fc738dfedff2945d71da439'] = 'Podkreślenie'; // Underline +$_MODULE['<{creativeelements}prestashop>_a7d7d34d28ecacfa945c78f1ae7ec675'] = 'Linia nad'; // Overline +$_MODULE['<{creativeelements}prestashop>_14cc8634a5bfab35b6e853c9198925f7'] = 'Podwójna linia'; // Double Line +$_MODULE['<{creativeelements}prestashop>_d6b6b668dbca9d4fe774bb654226ebe3'] = 'Animacja'; // Animation +$_MODULE['<{creativeelements}prestashop>_bb339e17211e92f514b07c1951d06e72'] = 'Wskaźnik podmenu'; // Submenu Indicator +$_MODULE['<{creativeelements}prestashop>_a1e4659d43cc7eab28edeac2e9f75bc4'] = 'Wyrównaj podmenu'; // Submenu Align +$_MODULE['<{creativeelements}prestashop>_ead153a06f04c12e720c5aa0cffe0729'] = 'Pokaż podmenu'; // Show Submenu +$_MODULE['<{creativeelements}prestashop>_9ccbedea8cb99c482cb42bbae12a75ea'] = 'na najechaniu'; // On Hover +$_MODULE['<{creativeelements}prestashop>_6ddd42699e63792e32b11959de64ff6c'] = 'na kliknięcie'; // On Click +$_MODULE['<{creativeelements}prestashop>_98c9ea2e311ff0ddd10aa4a50c5cc04b'] = 'Lista rozwijana telefonu'; // Mobile Dropdown +$_MODULE['<{creativeelements}prestashop>_7129472c5eb598faf47e4e877f2618fd'] = 'Breakpoint'; // Breakpoint +$_MODULE['<{creativeelements}prestashop>_b2e65dd885f23af9aa18dc3485fe847b'] = 'Pełna Szerokość'; // Full Width +$_MODULE['<{creativeelements}prestashop>_29e7cdd1ed01040595b903308c492d8b'] = 'Rozciągnij menu rozwijane do pełnej szerokości.'; // Stretch the dropdown of the menu to full width. +$_MODULE['<{creativeelements}prestashop>_91eb91e653c97c3600e5ee786226e68b'] = 'Przełącznik'; // Toggle Button +$_MODULE['<{creativeelements}prestashop>_7aa99f13e44dd25f7de294bc71abe4ff'] = 'Hamburger'; // Hamburger +$_MODULE['<{creativeelements}prestashop>_f15f18ce20de4f5948ecb46b1958e7ea'] = 'Wypełnienie poziome'; // Horizontal Padding +$_MODULE['<{creativeelements}prestashop>_55f2842d1d6cd77c91e84ae5e4d1aea2'] = 'Wypełnienie pionowe'; // Vertical Padding +$_MODULE['<{creativeelements}prestashop>_0b1081024cf0544ac21de69d1b6a0f21'] = 'Szerokość wskaźnika'; // Pointer Width +$_MODULE['<{creativeelements}prestashop>_b1c6469beab5f226ceb51402e429215e'] = 'Kolor wskaźnika'; // Pointer Color +$_MODULE['<{creativeelements}prestashop>_d11ed49f634022147a3ab4a0ac7e8f1d'] = 'Na komputerach typu desktop zaburzy to submenu. Na komórkach zaburzy całe menu.'; // On desktop, this will affect the submenu. On mobile, this will affect the entire menu. +$_MODULE['<{creativeelements}prestashop>_8a84bf5a983ed52ea6aca9188f21c927'] = 'Zalogowano'; // Signed in +$_MODULE['<{creativeelements}prestashop>_bc910f8bdf70f29374f496f05be0330c'] = 'Imię'; // First Name +$_MODULE['<{creativeelements}prestashop>_77587239bf4c54ea493c7033e1dbf636'] = 'Nazwisko'; // Last Name +$_MODULE['<{creativeelements}prestashop>_50346473cb92c34ef84e58f727a6a911'] = 'Menu użytkownika'; // Usermenu +$_MODULE['<{creativeelements}prestashop>_d95cf4ab2cbf1dfb63f066b50558b07d'] = 'Moje konto'; // My account +$_MODULE['<{creativeelements}prestashop>_0fd8dc8abb2404ad11af4182f10643c1'] = 'Dane osobiste'; // Personal info +$_MODULE['<{creativeelements}prestashop>_284b47b0bb63ae2df3b29f0e691d6fcf'] = 'Adresy'; // Addresses +$_MODULE['<{creativeelements}prestashop>_df96fcb565aa7ca076514dfb1f7d94a7'] = 'Nowy adres'; // New Address +$_MODULE['<{creativeelements}prestashop>_782c8b38bce4f2f6975ca7f33ac8189b'] = 'Historia zamówień'; // Order history +$_MODULE['<{creativeelements}prestashop>_cf3bae95c5f6023d5a10fe415b205a45'] = 'Pokwitowanie - korekta kredytowa'; // Credit slip +$_MODULE['<{creativeelements}prestashop>_95d2137c196c7f84df5753ed78f18332'] = 'Rabat'; // My vouchers +$_MODULE['<{creativeelements}prestashop>_9b0af1b39d6dff87b095d7041924e7b8'] = 'Flaga kraju'; // Country Flag +$_MODULE['<{creativeelements}prestashop>_ad68f9bafd9bf2dcf3865dac55662fd5'] = 'Kod ISO'; // ISO code +$_MODULE['<{creativeelements}prestashop>_81ca343ca02154e6d9d0b1428a9dd2f6'] = 'Bez obrazu'; // No Image +$_MODULE['<{creativeelements}prestashop>_e833b5e560bdc737fe850bc50d0c5f0c'] = 'Slideshow'; // Slideshow +$_MODULE['<{creativeelements}prestashop>_a296104f0c61a9cf39f4824d05315e12'] = 'Kostka 3D'; // Cube +$_MODULE['<{creativeelements}prestashop>_e8b4b2443c2f0e19957e1e77c3c92c12'] = 'Coverflow'; // Coverflow +$_MODULE['<{creativeelements}prestashop>_acc66e14d297c1bfc20986bf593cb054'] = 'Miniatury'; // Thumbnails +$_MODULE['<{creativeelements}prestashop>_f63af7ab801158241f45d82e519df16d'] = 'Powiększanie po najechaniu'; // Zoom on Hover +$_MODULE['<{creativeelements}prestashop>_882277bdf25efaeb8295e842ebcb3d11'] = 'Wsparcie awaryjne'; // Fallback +$_MODULE['<{creativeelements}prestashop>_d2203cb1237cb6460cbad94564e39345'] = 'Regularny'; // Regular +$_MODULE['<{creativeelements}prestashop>_19c562a36aeb455d09534f93b4f5236f'] = 'Jednostka'; // Unit +$_MODULE['<{creativeelements}prestashop>_58ef6750a23ba432fc1377b7de085d9f'] = 'Netto'; // Tax excl. +$_MODULE['<{creativeelements}prestashop>_4b78ac8eb158840e9638a3aeb26c4a9d'] = 'Podatek'; // Tax +$_MODULE['<{creativeelements}prestashop>_104d9898c04874d0fbac36e125fa1369'] = 'Rabat'; // Discount +$_MODULE['<{creativeelements}prestashop>_a586532c728620b9fed5f6baa415ee64'] = 'Średnia ocena '; // Average Grade +$_MODULE['<{creativeelements}prestashop>_71d7a3826df386366c89230976b16aca'] = 'Liczba komentarzy'; // Comments Number +$_MODULE['<{creativeelements}prestashop>_9934bb23bbec740cca05409a9cd33d7f'] = 'Wyślij komentarz'; // Post Comment +$_MODULE['<{creativeelements}prestashop>_1be6f9eb563f3bf85c78b4219bf09de9'] = 'Marka'; // Brand +$_MODULE['<{creativeelements}prestashop>_91e85212ab7a0d0295d40e7b03ef4f1c'] = 'Dostawca'; // Supplier +$_MODULE['<{creativeelements}prestashop>_205b01b3197cf06688f6ed574faf5664'] = 'Czas dostawy'; // Delivery Time +$_MODULE['<{creativeelements}prestashop>_241c3f2af65370ced61a874c5725e348'] = 'Data dostępności'; // Availability Date +$_MODULE['<{creativeelements}prestashop>_9e2941b3c81256fac10392aaca4ccfde'] = 'Stan'; // Condition +$_MODULE['<{creativeelements}prestashop>_d95867deadfe690e40f42068d6b59df8'] = 'Kody'; // References +$_MODULE['<{creativeelements}prestashop>_6665e3761028c84e1d228de3432229ed'] = 'Indeks'; // SKU +$_MODULE['<{creativeelements}prestashop>_3ccf74d463f8895cef06727cb9709d83'] = 'Okrężnica'; // Colon +$_MODULE['<{creativeelements}prestashop>_0a045d39aea567664edf2daaa25860ff'] = 'Lista rozwijalna'; // Drop-down List +$_MODULE['<{creativeelements}prestashop>_7041d69f9024a46791714e59812fa68f'] = 'Przyciski jednokrotnego wyboru'; // Radio Buttons +$_MODULE['<{creativeelements}prestashop>_eaec849a5ffecf1b13b1ca2490cdb4e1'] = 'Kolor lub tekstura'; // Color/Texture Buttons +$_MODULE['<{creativeelements}prestashop>_c1f52fba179ff982b10e3881670b61ef'] = 'Kup Teraz'; // Buy Now +$_MODULE['<{creativeelements}prestashop>_515c06a3b32dc640a16385b52ae67c56'] = 'Produkt z kombinacjami'; // Product with Combinations +$_MODULE['<{creativeelements}prestashop>_d248b7896bffb1d7bc56d6378930affb'] = 'Zobacz pełne szczegóły'; // View Full Details +$_MODULE['<{creativeelements}prestashop>_9abdae4fa5d93330363a88ed8a5e7946'] = 'Kursor'; // Cursor +$_MODULE['<{creativeelements}prestashop>_37b6bd7fe61d651735cec3d3b0356c66'] = 'Nieparzysta'; // Odd +$_MODULE['<{creativeelements}prestashop>_35537fbc25d87ffe59e4f35fefcd34b7'] = 'Parzysta'; // Even +$_MODULE['<{creativeelements}prestashop>_689202409e48743b914713f96d93947c'] = 'Wartość'; // Value +$_MODULE['<{creativeelements}prestashop>_eec89088ee408b80387155272b113256'] = 'Sieć'; // Network +$_MODULE['<{creativeelements}prestashop>_e2d9081a3961cdb83db1d1fa7582ad04'] = 'Osłona produktu'; // Product Cover +$_MODULE['<{creativeelements}prestashop>_01b9e63c9fbfec3fe4863e79d46956fc'] = 'Personalizacja produktu'; // Product Customization +$_MODULE['<{creativeelements}prestashop>_f63e07e0b80ccecfebdc36e6fe11c876'] = 'Pakiet produktu'; // Product Pack +$_MODULE['<{creativeelements}prestashop>_3b67fc912569438cec7b2cc96eb415a9'] = 'Rabaty na produkty'; // Product Discounts +$_MODULE['<{creativeelements}prestashop>_87421dbd18a1eb6349fefd26db3a717d'] = 'Akcje produktu'; // Product Actions +$_MODULE['<{creativeelements}prestashop>_8bb5496d7ab4e19058067c0fa40d45ef'] = 'Dostępność produktu'; // Product Availability +$_MODULE['<{creativeelements}prestashop>_841368ddc1cc8ee4e5c8d010b62d3dd5'] = 'Minimalna ilość'; // Minimum Quantity +$_MODULE['<{creativeelements}prestashop>_e5c548d29f23c379b1452c40a208c445'] = 'Dodatkowe informacje'; // Additional Info +$_MODULE['<{creativeelements}prestashop>_1c2df820420d0376965fb9da04eca4df'] = 'Bezpieczeństwo klienta'; // Reassurance +$_MODULE['<{creativeelements}prestashop>_75fa820aebc10bf31b310065b38447c7'] = 'Karty produktu'; // Product Tabs +$_MODULE['<{creativeelements}prestashop>_b8900d8adf598b6653bb8c071bc49a1d'] = 'Szczegóły produktu'; // Product Details +$_MODULE['<{creativeelements}prestashop>_623a9a1f669b091dd76bead27c3252ed'] = 'Ilości'; // Quantities +$_MODULE['<{creativeelements}prestashop>_4594f39c6dac58760daeb19d79389576'] = 'Specyficzne kody'; // Specific References +$_MODULE['<{creativeelements}prestashop>_da1b85e60d23d8d59c77d31af402acda'] = 'Akcesoria produktu'; // Product Accessories +$_MODULE['<{creativeelements}prestashop>_9787028383eef1dfde2f09093a851373'] = 'Stopka produktu'; // Product Footer +$_MODULE['<{creativeelements}prestashop>_9909f0bb3eb94634e3f8cd0164dbacac'] = 'Jesteś w kontekście multisklepu: wszelkie zmiany będą miały wpływ na wszystkie sklepy, lub każdy sklep aktywnej grupy.'; // You are in a multistore context: any modification will impact all your shops, or each shop of the active group. diff --git a/modules/creativeelements/upgrade/index.php b/modules/creativeelements/upgrade/index.php new file mode 100644 index 00000000..0e32c6a1 --- /dev/null +++ b/modules/creativeelements/upgrade/index.php @@ -0,0 +1,16 @@ +uninstallOverrides() && $module->installOverrides(); + + CEDatabase::initConfigs(); + CEDatabase::createTables(); + CEDatabase::updateTabs(); + + foreach (CEDatabase::getHooks(false) as $hook) { + $res = $res && $module->registerHook($hook); + } + + CEMigrate::moveConfigs(); + + if ($res && CEMigrate::storeIds()) { + ob_start(function ($json) use ($module) { + $data = json_decode($json, true); + + if (!empty($data[$module->name]['status'])) { + // Upgrade + $data[$module->name]['msg'] .= CEMigrate::renderJavaScripts(); + + $json = json_encode($data); + } elseif (!empty($data['status'])) { + // Upload + $data['msg'] .= CEMigrate::renderJavaScripts(); + $data['status'] = false; + + $json = json_encode($data); + } + return $json; + }); + } + return $res; +} diff --git a/modules/creativeelements/upgrade/upgrade-1.4.10.php b/modules/creativeelements/upgrade/upgrade-1.4.10.php new file mode 100644 index 00000000..0f5ba1a1 --- /dev/null +++ b/modules/creativeelements/upgrade/upgrade-1.4.10.php @@ -0,0 +1,45 @@ +execute(" + CREATE TABLE IF NOT EXISTS `$ce_revision` ( + `id_ce_revision` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `parent` bigint(20) UNSIGNED NOT NULL, + `id_employee` int(10) UNSIGNED NOT NULL, + `title` varchar(255) NOT NULL, + `content` longtext NOT NULL, + `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_ce_revision`), + KEY `id` (`parent`), + KEY `date_add` (`date_upd`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + "); + $result &= $module->registerHook('actionObjectCERevisionDeleteAfter'); + $result &= $module->registerHook('actionProductAdd'); + $result &= $module->registerHook('CETemplate'); + + CE\Plugin::instance()->files_manager->clearCache(); + Media::clearCache(); + + return $result; +} diff --git a/modules/creativeelements/upgrade/upgrade-2.5.0.php b/modules/creativeelements/upgrade/upgrade-2.5.0.php new file mode 100644 index 00000000..718c2547 --- /dev/null +++ b/modules/creativeelements/upgrade/upgrade-2.5.0.php @@ -0,0 +1,45 @@ +execute("ALTER TABLE `$ce_revision` ADD `type` varchar(64) NOT NULL DEFAULT '' AFTER `title`"); + } catch (Exception $ex) { + // Do nothing when `type` already exists + } + + foreach (Tab::getCollectionFromModule($module->name) as $tab) { + $tab->delete(); + } + CEDatabase::updateTabs(); + + // Clear caches + CE\Plugin::instance()->files_manager->clearCache(); + Media::clearCache(); + + return $module->registerHook('actionObjectCEContentDeleteAfter') && ( + version_compare($module->version, '2.5.5', '>=') || upgrade_module_2_5_5($module) + ); +} diff --git a/modules/creativeelements/upgrade/upgrade-2.5.10.php b/modules/creativeelements/upgrade/upgrade-2.5.10.php new file mode 100644 index 00000000..9f177c72 --- /dev/null +++ b/modules/creativeelements/upgrade/upgrade-2.5.10.php @@ -0,0 +1,27 @@ +registerHook('actionFrontControllerInitAfter', null, 1); + + CEDatabase::initConfigs(); + + CE\Plugin::instance()->files_manager->clearCache(); + Media::clearCache(); + + return $result; +} diff --git a/modules/creativeelements/upgrade/upgrade-2.5.11.php b/modules/creativeelements/upgrade/upgrade-2.5.11.php new file mode 100644 index 00000000..24bb2f7e --- /dev/null +++ b/modules/creativeelements/upgrade/upgrade-2.5.11.php @@ -0,0 +1,21 @@ +registerHook('actionFrontControllerAfterInit', null, 1); +} diff --git a/modules/creativeelements/upgrade/upgrade-2.5.2.php b/modules/creativeelements/upgrade/upgrade-2.5.2.php new file mode 100644 index 00000000..ad87834e --- /dev/null +++ b/modules/creativeelements/upgrade/upgrade-2.5.2.php @@ -0,0 +1,84 @@ +execute(" + CREATE TABLE IF NOT EXISTS `$ce_theme` ( + `id_ce_theme` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `id_employee` int(10) UNSIGNED NOT NULL, + `type` varchar(64) NOT NULL DEFAULT '', + `position` int(10) UNSIGNED NOT NULL DEFAULT 0, + `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_ce_theme`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `{$ce_theme}_shop` ( + `id_ce_theme` int(10) UNSIGNED NOT NULL, + `id_shop` int(10) UNSIGNED NOT NULL, + `position` int(10) UNSIGNED NOT NULL DEFAULT 0, + `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_ce_theme`,`id_shop`), + KEY `id_shop` (`id_shop`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + ") && $db->execute(" + CREATE TABLE IF NOT EXISTS `{$ce_theme}_lang` ( + `id_ce_theme` int(10) UNSIGNED NOT NULL, + `id_lang` int(10) UNSIGNED NOT NULL, + `id_shop` int(10) UNSIGNED NOT NULL DEFAULT 1, + `title` varchar(128) NOT NULL DEFAULT '', + `content` text, + PRIMARY KEY (`id_ce_theme`,`id_shop`,`id_lang`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + "); + try { + // Add `type` to ce_revision table + $db->execute(" + ALTER TABLE `$ce_revision` + ADD `type` varchar(64) NOT NULL DEFAULT '' AFTER `title` + "); + } catch (Exception $ex) { + // Do nothing when `type` already exists + } + + foreach (Tab::getCollectionFromModule($module->name) as $tab) { + $tab->delete(); + } + CEDatabase::updateTabs(); + + $result &= $module->registerHook('actionObjectCEContentDeleteAfter'); + + // Clear caches + foreach (glob(_CE_PATH_ . 'views/css/ce/global-*.css') as $css_file) { + Tools::deleteFile($css_file); + } + CE\Plugin::instance()->files_manager->clearCache(); + Media::clearCache(); + + return $result; +} diff --git a/modules/creativeelements/upgrade/upgrade-2.5.5.php b/modules/creativeelements/upgrade/upgrade-2.5.5.php new file mode 100644 index 00000000..5dc3da6a --- /dev/null +++ b/modules/creativeelements/upgrade/upgrade-2.5.5.php @@ -0,0 +1,73 @@ +executeS(" + SELECT `id`, `value` FROM `$table` + WHERE `name` = '_elementor_data' AND `value` LIKE '%\"widgetType\":\"video\"%' + "); + + if ($rows) { + foreach ($rows as &$row) { + $do_update = false; + $data = json_decode($row['value'], true); + + if (empty($data)) { + continue; + } + + $data = CE\Plugin::instance()->db->iterateData($data, function ($element) use (&$do_update) { + if (empty($element['widgetType']) || 'video' !== $element['widgetType']) { + return $element; + } + + $replacements = []; + + if (empty($element['settings']['video_type']) || 'youtube' === $element['settings']['video_type']) { + $replacements = [ + 'yt_autoplay' => 'autoplay', + 'yt_controls' => 'controls', + 'yt_mute' => 'mute', + 'yt_rel' => 'rel', + 'link' => 'youtube_url', + ]; + } elseif ('vimeo' === $element['settings']['video_type']) { + $replacements = [ + 'vimeo_autoplay' => 'autoplay', + 'vimeo_loop' => 'loop', + 'vimeo_color' => 'color', + 'vimeo_link' => 'vimeo_url', + ]; + } + + // cleanup old unused settings. + unset($element['settings']['yt_rel_videos']); + + foreach ($replacements as $old => $new) { + if (!empty($element['settings'][$old])) { + $element['settings'][$new] = $element['settings'][$old]; + $do_update = true; + } + } + + return $element; + }); + + if ($do_update) { + CE\update_post_meta($row['id'], '_elementor_data', $data); + } + } + } + + return true; +} diff --git a/modules/creativeelements/upgrade/upgrade-2.5.7.php b/modules/creativeelements/upgrade/upgrade-2.5.7.php new file mode 100644 index 00000000..1dea6716 --- /dev/null +++ b/modules/creativeelements/upgrade/upgrade-2.5.7.php @@ -0,0 +1,40 @@ +execute(" + CREATE TABLE IF NOT EXISTS `$ce_font` ( + `id_ce_font` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `family` varchar(128) NOT NULL DEFAULT '', + `files` text, + PRIMARY KEY (`id_ce_font`) + ) ENGINE=$engine DEFAULT CHARSET=utf8; + "); + + // Register delete action for ThemeVolty Blog post + $result &= $module->registerHook('actionObjectTvcmsBlogPostsClassDeleteAfter'); + + // Clear caches + CE\Plugin::instance()->files_manager->clearCache(); + Media::clearCache(); + + return $result; +} diff --git a/modules/creativeelements/upgrade/upgrade-2.5.8.php b/modules/creativeelements/upgrade/upgrade-2.5.8.php new file mode 100644 index 00000000..11dd9839 --- /dev/null +++ b/modules/creativeelements/upgrade/upgrade-2.5.8.php @@ -0,0 +1,20 @@ +files_manager->clearCache(); + Media::clearCache(); + + return true; +} diff --git a/modules/creativeelements/upgrade/upgrade-2.5.9.php b/modules/creativeelements/upgrade/upgrade-2.5.9.php new file mode 100644 index 00000000..c81e2a44 --- /dev/null +++ b/modules/creativeelements/upgrade/upgrade-2.5.9.php @@ -0,0 +1,28 @@ +context->cookie->ceViewedProducts)) { + $products = explode(',', $module->context->cookie->ceViewedProducts); + $products = array_slice($products, 0, CreativeElements::VIEWED_PRODUCTS_LIMIT); + + $module->context->cookie->ceViewedProducts = implode(',', $products); + $module->context->cookie->write(); + } + + CE\Plugin::instance()->files_manager->clearCache(); + Media::clearCache(); + + return true; +} diff --git a/modules/creativeelements/views/css/admin.css b/modules/creativeelements/views/css/admin.css new file mode 100644 index 00000000..7d43aa35 --- /dev/null +++ b/modules/creativeelements/views/css/admin.css @@ -0,0 +1,146 @@ +.row .btn-edit-with-ce, +.form-group .btn-edit-with-ce { + margin: 5px 0; + padding: 12px 15px 12px 13px; + background: #D32A5B !important; + color: #fff !important; + -webkit-transition: all 0.5s; + transition: all 0.5s; +} + +.ce-edit.pull-right { + margin: 0 3px; +} +.ce-edit .btn i.icon-AdminParentCEContent { + font-size: 11px; +} +.btn-group-action { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; +} +.ce-edit a.dropdown-toggle { + padding: 5px; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; +} +.ce-edit:not(.pull-right) + .btn-group > a { + padding-top: 8px; +} +.ce-edit a.dropdown-toggle:after, +.admincetemplates .btn-back-to-ps, +.admincethemes .btn-back-to-ps, +.admincecontent .btn-back-to-ps { + display: none; +} +.btn.btn-back-to-ps { + margin: 5px 0; +} +.admincetemplates textarea, +.admincecontent textarea { + color: transparent; +} + +.ce_template td:last-child { + width: 120px; +} +.admincetemplates td.ce-shortcode { + width: 230px; +} +.admincetemplates .ce-shortcode input { + font-family: monospace !important; +} + +.adminproducts #description.panel .btn-edit-with-ce { + margin: 10px; +} +.adminproducts #description.panel .btn-edit-with-ce ~ .mce-tinymce { + margin: 0 10px 10px; +} +.adminproducts #description.panel .wrapper-edit-with-ce { + border: none; + border-top: 1px solid #dfdfdf; + border-radius: 0; +} +.ce-product-hook::first-letter { + text-transform: uppercase; +} +.row .btn-edit-with-ce:hover, +.form-group .btn-edit-with-ce:hover { + opacity: 0.85; + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} +.row .btn-edit-with-ce:active, +.form-group .btn-edit-with-ce:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.1); +} +.row .btn-edit-with-ce .material-icons, +.form-group .btn-edit-with-ce .material-icons { + vertical-align: -2px; + border-color: #fff; + line-height: 1em; +} +.admincecontent .select2-container { + margin: 4px 0; +} +/* PS 1.7.8+ */ +td.column-active ~ td.text-right .ce-edit button.btn { + padding: 9px 6px 7px 8px; +} +td.column-active ~ td.text-right .ce-edit i.icon-AdminParentCEContent { + font-size: 14px; +} +form[id^=ce_][id$=_form] .form-wrapper { + max-width: 100%; +} +#ce_theme_fieldset_theme_settings .form-wrapper { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + max-width: 100%; +} +#ce_theme_fieldset_theme_settings .form-group { + width: 33.33%; +} +@media (max-width: 767px) { + #ce_theme_fieldset_theme_settings .form-group { + width: 100%; + } +} +@media (max-width: 1200px) { + #ce_theme_fieldset_theme_settings label.control-label { + text-align: left; + text-align: start; + } +} +.btn-back-to-ps i.material-icons { + vertical-align: middle; +} +.wrapper-edit-with-ce { + background: #f5f8f9; + border: 1px solid #c7d6db; + border-radius: 3px; + padding: 30px; + text-align: center; + cursor: pointer; + transition: background 0.05s; +} +.wrapper-edit-with-ce:hover { + background: rgba(245, 248, 249, 0.2); +} +.btn-edit-with-ce ~ .mce-tinymce { + border: 1px solid #dfdfdf !important; +} +.btn-edit-with-ce ~ .mce-tinymce > .mce-container-body { + border: none !important; +} \ No newline at end of file diff --git a/modules/creativeelements/views/css/backoffice.css b/modules/creativeelements/views/css/backoffice.css new file mode 100644 index 00000000..240d9ebe --- /dev/null +++ b/modules/creativeelements/views/css/backoffice.css @@ -0,0 +1,97 @@ +.elementor-button { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-weight: 500; + text-transform: uppercase; + outline: none; + border: none; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition-property: background, color, opacity, -webkit-box-shadow; + transition-property: background, color, opacity, -webkit-box-shadow; + -o-transition-property: background, color, box-shadow, opacity; + transition-property: background, color, box-shadow, opacity; + transition-property: background, color, box-shadow, opacity, -webkit-box-shadow; + -webkit-transition-duration: .3s; + -o-transition-duration: .3s; + transition-duration: .3s; } + .elementor-button:hover { + border: none; } + .elementor-button:not([disabled]) { + cursor: pointer; } + .elementor-button:not(.elementor-button-state) .elementor-state-icon { + display: none; } + .elementor-button.elementor-button-success { + color: #fff; } + .elementor-button.elementor-button-success[disabled] { + background-color: #c2cbd2; } + .elementor-button.elementor-button-success:not([disabled]) { + background-color: #39b54a; } + .elementor-button.elementor-button-success:not([disabled]):hover { + opacity: 0.85; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-button.elementor-button-success:not([disabled]):active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-button.elementor-button-warning { + background-color: #a4afb7; + color: #fff; } + .elementor-button.elementor-button-warning[disabled] { + background-color: #c2cbd2; } + .elementor-button.elementor-button-warning:not([disabled]):hover { + background-color: #b01b1b; + opacity: 0.85; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-button.elementor-button-warning:not([disabled]):active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-button.elementor-edit-template { + display: inline-block; + margin-top: 15px; + color: #fff; } + .elementor-button.elementor-button-default { + background-color: #a4afb7; + color: #fff; + font-size: 11px; + padding: 6.5px 15px; } + .elementor-button.elementor-button-default:hover { + background-color: #6d7882; + color: #fff; + text-decoration: none; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-button.elementor-button-default:active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-button.elementor-button-default:visited { + color: #fff; } + .elementor-button.elementor-button-go-pro { + color: #fff; + background-color: #fcb92c; } + .elementor-button i { + margin-right: 10px; } + +.elementor-blank_state { + padding: 5em 0; + margin: auto; + max-width: 520px; + text-align: center; + color: #6d7882; } + .elementor-blank_state i { + font-size: 50px; + color: #a4afb7; } + .elementor-blank_state h2 { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-size: 32px; + font-weight: 300; + color: inherit; + margin: 50px 0 35px; + line-height: 1.2; } + .elementor-blank_state p { + font-size: 16px; + font-weight: normal; + color: #a4afb7; + margin-bottom: 40px; } + .elementor-blank_state .elementor-button { + display: inline-block; } \ No newline at end of file diff --git a/modules/creativeelements/views/css/ce/1-global.css b/modules/creativeelements/views/css/ce/1-global.css new file mode 100644 index 00000000..8471f9ba --- /dev/null +++ b/modules/creativeelements/views/css/ce/1-global.css @@ -0,0 +1,407 @@ +.elementor-widget-heading.elementor-widget-heading .elementor-heading-title { + color: #6ec1e4; +} + +.elementor-widget-heading .elementor-heading-title { + + font-weight: 600; +} + +.elementor-widget-image .widget-image-caption { + sans-serif; + font-weight: 400; +} + +.elementor-widget-text-editor { + sans-serif; + font-weight: 400; +} + +.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap { + background-color: #6ec1e4; +} + +.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap, +.elementor-widget-text-editor.elementor-drop-cap-view-default .elementor-drop-cap { + color: #6ec1e4; + border-color: #6ec1e4; +} + +.elementor-widget-button a.elementor-button { + + font-weight: 500; + background-color: #61ce70; +} + +.elementor-widget-divider .elementor-divider-separator { + border-top-color: #7a7a7a; +} + +.elementor-widget-image-box .elementor-image-box-content .elementor-image-box-title { + color: #6ec1e4; + + font-weight: 600; +} + +.elementor-widget-image-box .elementor-image-box-content .elementor-image-box-description { + sans-serif; + font-weight: 400; +} + +.elementor-widget-icon.elementor-view-stacked .elementor-icon { + background-color: #6ec1e4; +} + +.elementor-widget-icon.elementor-view-framed .elementor-icon, +.elementor-widget-icon.elementor-view-default .elementor-icon { + color: #6ec1e4; + border-color: #6ec1e4; +} + +.elementor-widget-icon.elementor-view-framed a.elementor-icon:not(#e), +.elementor-widget-icon.elementor-view-default a.elementor-icon:not(#e) { + color: #6ec1e4; +} + +.elementor-widget-icon-box.elementor-view-stacked .elementor-icon { + background-color: #6ec1e4; +} + +.elementor-widget-icon-box.elementor-view-framed .elementor-icon, +.elementor-widget-icon-box.elementor-view-default .elementor-icon { + color: #6ec1e4; + border-color: #6ec1e4; +} + +.elementor-widget-icon-box .elementor-icon-box-content .elementor-icon-box-title { + color: #6ec1e4; + + font-weight: 600; +} + +.elementor-widget-icon-box .elementor-icon-box-content .elementor-icon-box-description { + sans-serif; + font-weight: 400; +} + +.elementor-widget-image-gallery figcaption { + + font-weight: 500; +} + +.elementor-widget-image-carousel .elementor-image-carousel-caption { + + font-weight: 500; +} + +.elementor-widget-star-rating .elementor-star-rating__title { + sans-serif; + font-weight: 400; +} + +.elementor-widget-icon-list .elementor-icon-list-item:not(:last-child):after { + border-color: #7a7a7a; +} + +.elementor-widget-icon-list .elementor-icon-list-icon i { + color: #6ec1e4; +} + +.elementor-widget-icon-list .elementor-icon-list-text { + color: #54595f; +} + +.elementor-widget-icon-list .elementor-icon-list-item { + + font-weight: 400; +} + +.elementor-widget-counter .elementor-counter-number-wrapper { + color: #6ec1e4; + + font-weight: 600; +} + +.elementor-widget-counter .elementor-counter-title { + color: #54595f; + font-family: "Roboto Slab", sans-serif; + font-weight: 400; +} + +.elementor-widget-progress .elementor-progress-wrapper .elementor-progress-bar { + background-color: #6ec1e4; +} + +.elementor-widget-progress .elementor-title { + color: #6ec1e4; + + font-weight: 400; +} + +.elementor-widget-testimonial .elementor-testimonial-content { + sans-serif; + font-weight: 400; +} + +.elementor-widget-testimonial .elementor-testimonial-name { + color: #6ec1e4; + + font-weight: 600; +} + +.elementor-widget-testimonial .elementor-testimonial-job { + color: #54595f; + font-family: "Roboto Slab", sans-serif; + font-weight: 400; +} + +.elementor-widget-tabs .elementor-tab-title { + color: #6ec1e4; + + font-weight: 600; +} + +.elementor-widget-tabs .elementor-tab-title.elementor-active { + color: #61ce70; +} + +.elementor-widget-tabs .elementor-tab-content { + sans-serif; + font-weight: 400; +} + +.elementor-widget-accordion .elementor-accordion .elementor-tab-title { + color: #6ec1e4; + + font-weight: 600; +} + +.elementor-widget-accordion .elementor-accordion .elementor-tab-title.elementor-active { + color: #61ce70; +} + +.elementor-widget-accordion .elementor-accordion .elementor-tab-content { + sans-serif; + font-weight: 400; +} + +.elementor-widget-toggle .elementor-toggle .elementor-tab-title { + color: #6ec1e4; + + font-weight: 600; +} + +.elementor-widget-toggle .elementor-toggle .elementor-tab-title.elementor-active { + color: #61ce70; +} + +.elementor-widget-toggle .elementor-toggle .elementor-tab-content { + sans-serif; + font-weight: 400; +} + +.elementor-widget-alert .elementor-alert-title { + + font-weight: 600; +} + +.elementor-widget-alert .elementor-alert-description { + + font-weight: 400; +} + +.elementor-widget-image-hotspot.elementor-view-stacked .elementor-icon { + background-color: #6ec1e4; +} + +.elementor-widget-image-hotspot.elementor-view-framed .elementor-icon, +.elementor-widget-image-hotspot.elementor-view-default .elementor-icon { + color: #6ec1e4; + border-color: #6ec1e4; +} + +.elementor-widget-image-hotspot .elementor-image-hotspot-title { + color: #6ec1e4; + + font-weight: 600; +} + +.elementor-widget-image-hotspot .elementor-image-hotspot .elementor-image-hotspot-description { + sans-serif; + font-weight: 400; +} + +.elementor-widget-categoryfilter #search_filters .module-title { + color: #54595f; + + font-weight: 400; +} + +.elementor-widget-categoryfilter #search_filters .module-title a { + color: inherit; +} + +.elementor-widget-categorysubcategories .pk-subcategory figcaption { + + font-weight: 400; +} + +.elementor-widget-categorysubcategories .pk-subcategory-desc { + + font-weight: 400; +} + +.elementor-widget-categorytitle .category-title { + color: #54595f; +} + +.elementor-widget-pkblog .blog-headline { + color: #54595f; +} + +.elementor-widget-pkblog .blog-headline a { + color: inherit; +} + +.elementor-widget-pkblog .slpwc>p { + color: #54595f; +} + +.elementor-widget-pkblog .post-date { + color: #54595f; +} + +.elementor-widget-pkcart .user-select .current-item { + + font-weight: 400; + color: #7a7a7a; +} + +.elementor-widget-pkcart .header-item-counter { + background-color: #7a7a7a; + sans-serif; + font-weight: 400; +} + +.elementor-widget-pkcategories .widget-pklinks li:after { + border-color: #7a7a7a; +} + +.elementor-widget-pkcategories .widget-pklinks li { + color: #54595f; + + font-weight: 400; +} + +.elementor-widget-pkcategories .widget-pklinks-title a { + + font-weight: 400; +} + +.elementor-widget-pkcompare .user-select .current-item { + + font-weight: 400; + color: #7a7a7a; +} + +.elementor-widget-pkcurrencies .user-select .current-item { + + font-weight: 400; + color: #7a7a7a; +} + +.elementor-widget-pkcurrencies .user-select li { + + font-weight: 400; +} + +.elementor-widget-pkfavorites .user-select .current-item { + + font-weight: 400; + color: #7a7a7a; +} + +.elementor-widget-pkimagecarousel .pk-item-caption { + + font-weight: 500; +} + +.elementor-widget-pkimagecarousel .pk-item-text { + + font-weight: 500; +} + +.elementor-widget-pklanguages .user-select .current-item { + + font-weight: 400; + color: #7a7a7a; +} + +.elementor-widget-pklanguages .user-select li { + + font-weight: 400; +} + +.elementor-widget-pklinks .widget-pklinks li:not(:last-child):after { + border-color: #7a7a7a; +} + +.elementor-widget-pklinks .widget-pklinks li { + color: #54595f; + + font-weight: 400; +} + +.elementor-widget-pklinks .widget-pklinks-title { + + font-weight: 400; +} + +.elementor-widget-pkmenu #top-menu>li>a, +.elementor-widget-pkmenu .pk-top-menu>li>a { + + font-weight: 400; +} + +.elementor-widget-pkmyaccount .user-select .current-item { + + font-weight: 400; + color: #7a7a7a; +} + +.elementor-widget-pkmyaccount .user-select li { + + font-weight: 400; +} + +.elementor-widget-pksignin .user-select .current-item { + + font-weight: 400; + color: #7a7a7a; +} + +.elementor-widget-pktestimonials blockquote { + color: #54595f; +} + +.elementor-widget-pktestimonials .pk-author { + color: #54595f; +} + +.elementor-widget-pktestimonials .pk-occupation { + color: #54595f; +} + +.elementor-widget-pkwatchlist .user-select .current-item { + + font-weight: 400; + color: #7a7a7a; +} + +.elementor-section.elementor-section-boxed>.elementor-container { + max-width: 1140px; +} + +.elementor-widget:not(:last-child) { + margin-bottom: 20px; +} \ No newline at end of file diff --git a/modules/creativeelements/views/css/ce/index.php b/modules/creativeelements/views/css/ce/index.php new file mode 100644 index 00000000..0c8b24a8 --- /dev/null +++ b/modules/creativeelements/views/css/ce/index.php @@ -0,0 +1,8 @@ + .dialog-button { + font-family: Roboto; + width: 50%; + border: none; + background: none; + font-size: 15px; + cursor: pointer; + padding: 13px 0; + outline: 0; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:first-child { + color: #6d7882; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:hover { + background-color: #f4f6f7; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-ok { + color: #b01b1b; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-take_over { + color: #39b54a; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:active { + background-color: rgba(230, 233, 236, 0.5); } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button::-moz-focus-inner { + border: 0; } + +.dialog-close-button { + cursor: pointer; + position: absolute; + top: 30px; + left: 30px; + font-size: 15px; + line-height: 1; } + .dialog-close-button:not(:hover) { + opacity: .4; } + +.dialog-alert-widget .dialog-buttons-wrapper > button { + width: 100%; } + +.dialog-confirm-widget .dialog-button:first-child { + border-left: 1px solid #e6e9ec; } + +.dialog-prevent-scroll { + overflow: hidden; + max-height: 100vh; } + +@media (max-width: 767px) { + .dialog-close-button { + top: 15px; + right: 15px; } + body.admin-bar .dialog-close-button { + top: 40px; } } + +.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio { + padding-bottom: 42.8571%; } + +.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio { + padding-bottom: 56.25%; } + +.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio { + padding-bottom: 75%; } + +.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio { + padding-bottom: 66.6666%; } + +.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio { + padding-bottom: 100%; } + +.elementor-aspect-ratio-916 .elementor-fit-aspect-ratio { + padding-bottom: 177.8%; } + +.elementor-fit-aspect-ratio { + position: relative; + height: 0; } + .elementor-fit-aspect-ratio iframe { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + border: 0; + background-color: #000; } + .elementor-fit-aspect-ratio video { + width: 100%; } + +.flatpickr-calendar { + width: 280px; } + .flatpickr-calendar .flatpickr-current-month span.cur-month { + font-weight: 300; } + .flatpickr-calendar .dayContainer { + width: 280px; + min-width: 280px; + max-width: 280px; } + .flatpickr-calendar .flatpickr-days { + width: 280px; } + .flatpickr-calendar .flatpickr-day { + max-width: 37px; + height: 37px; + line-height: 37px; } + +.elementor-templates-modal .dialog-widget-content { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + background-color: #f1f3f5; + width: 100%; } + @media (max-width: 1439px) { + .elementor-templates-modal .dialog-widget-content { + max-width: 990px; } } + @media (min-width: 1440px) { + .elementor-templates-modal .dialog-widget-content { + max-width: 1200px; } } + +.elementor-templates-modal .dialog-header { + padding: 0; + background-color: #fff; + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + position: relative; + z-index: 1; } + +.elementor-templates-modal .dialog-buttons-wrapper { + display: none; } + +.elementor-templates-modal .dialog-message { + height: 750px; + max-height: 85vh; + overflow: auto; + padding-top: 25px; } + +.elementor-templates-modal .dialog-content { + height: 100%; } + +.elementor-templates-modal .dialog-loading { + display: none; } + +.elementor-templates-modal__header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + height: 50px; } + .elementor-templates-modal__header__logo { + line-height: 1; + text-transform: uppercase; + font-weight: bold; + cursor: pointer; } + .elementor-templates-modal__header__logo-area { + text-align: right; + padding-right: 15px; } + .elementor-templates-modal__header__logo-area > * { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-templates-modal__header__logo__icon-wrapper { + padding: 4px 7px 6px; + background-image: -webkit-linear-gradient(225deg, #f2295b, #434363); + background-image: -o-linear-gradient(225deg, #f2295b, #434363); + background-image: linear-gradient(-135deg, #f2295b, #434363); + -webkit-border-radius: 2px; + border-radius: 2px; + margin-left: 10px; } + .elementor-templates-modal__header__logo__title { + padding-top: 2px; } + .elementor-templates-modal__header__logo i { + color: #fff; + font-size: 10px; } + .elementor-templates-modal__header__items-area { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .elementor-templates-modal__header__item { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .elementor-templates-modal__header__item > i { + font-size: 20px; + -webkit-transition: color .5s; + -o-transition: color .5s; + transition: color .5s; + cursor: pointer; } + .elementor-templates-modal__header__item > i:not(:hover) { + color: #a4afb7; } + .elementor-templates-modal__header__close--normal { + width: 45px; + border-right: 1px solid #e6e9ec; } + .elementor-templates-modal__header__close--normal i { + font-size: 18px; } + .elementor-templates-modal__header__close--skip { + padding: 10px; + padding-right: 20px; + margin-left: 10px; + color: #fff; + background-color: #a4afb7; + font-size: 11px; + font-weight: normal; + line-height: 1; + text-transform: uppercase; + -webkit-border-radius: 2px; + border-radius: 2px; + cursor: pointer; } + .elementor-templates-modal__header__close--skip > i { + font-size: inherit; + padding-right: 10px; + margin-right: 15px; + border-right: 1px solid; } + .elementor-templates-modal__header__close--skip > i:not(:hover) { + color: #fff; } + +.elementor-hidden { + display: none; } + +.elementor-screen-only, +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + position: absolute; + top: -10000em; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; } + +.elementor-clearfix:after { + content: ''; + display: block; + clear: both; + width: 0; + height: 0; } + +#elementor-finder__modal { + background: none; } + #elementor-finder__modal .dialog-widget-content { + width: 650px; + max-width: 98%; + top: 18vh; + left: calc( 50% - 650px / 2); } + #elementor-finder__modal .dialog-message { + height: initial; + min-height: 0; + padding: 0; + text-align: right; } + +#elementor-finder__search { + padding: 14px 15px 14px 21px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-shadow: 0 -3px 15px 6px rgba(0, 0, 0, 0.03); + box-shadow: 0 -3px 15px 6px rgba(0, 0, 0, 0.03); } + #elementor-finder__search i { + font-size: 16px; + color: #a4afb7; + font-weight: bold; + margin-left: 15px; } + #elementor-finder__search__input { + border: none; + background: none; + outline: none; + padding: 0; + margin: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + font-size: 14px; + color: #495157; } + #elementor-finder__search__input::-webkit-input-placeholder { + color: #a4afb7; + font-style: italic; + font-weight: 300; } + #elementor-finder__search__input::-ms-input-placeholder { + color: #a4afb7; + font-style: italic; + font-weight: 300; } + #elementor-finder__search__input::placeholder { + color: #a4afb7; + font-style: italic; + font-weight: 300; } + +#elementor-finder__results { + max-height: 50vh; + overflow: auto; } + +#elementor-finder__no-results { + display: none; + padding: 20px; + color: #a4afb7; } + +.elementor-finder__results__category { + position: relative; } + .elementor-finder__results__category__title { + padding: 5px 25px; + color: #6d7882; + background-color: #e6e9ec; + font-size: 9px; + text-transform: uppercase; } + .elementor-finder__results__category--dynamic .elementor-finder__results__category__items { + min-height: 26px; } + .elementor-finder__results__category .eicon-loading { + display: none; + position: absolute; + left: 10px; + top: 30px; + color: #71d7f7; + font-size: 14px; } + +.elementor-finder__results__item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .elementor-finder__results__item a { + text-decoration: none; + -webkit-box-shadow: none; + box-shadow: none; + outline: none; } + .elementor-finder__results__item.elementor-active { + background-color: #71d7f7; + -webkit-box-shadow: none; + box-shadow: none; + outline: none; } + .elementor-finder__results__item.elementor-active * { + color: #fff; } + .elementor-finder__results__item:not(.elementor-active) .elementor-finder__results__item__actions { + display: none; } + .elementor-finder__results__item__link { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 35px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-finder__results__item__icon { + width: 60px; + text-align: center; + color: #6d7882; + font-size: 17px; } + .elementor-finder__results__item__title { + color: #6d7882; + font-size: 13px; } + .elementor-finder__results__item__description { + margin-right: 5px; + color: #a4afb7; + font-style: italic; } + .elementor-finder__results__item__actions { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .elementor-finder__results__item__action { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; + width: 35px; } + .elementor-finder__results__item__action:hover { + background-color: rgba(0, 0, 0, 0.07); } diff --git a/modules/creativeelements/views/css/common-rtl.min.css b/modules/creativeelements/views/css/common-rtl.min.css new file mode 100644 index 00000000..e7d20b74 --- /dev/null +++ b/modules/creativeelements/views/css/common-rtl.min.css @@ -0,0 +1 @@ +.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{font-size:15px;color:#495157;padding:30px 0 10px;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 30px 30px;min-height:50px}.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-header,.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button{font-family:Roboto;width:50%;border:none;background:0 0;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:hover{background-color:#f4f6f7}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;left:30px;font-size:15px;line-height:1}.dialog-close-button:not(:hover){opacity:.4}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}.dialog-confirm-widget .dialog-button:first-child{border-left:1px solid #e6e9ec}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-aspect-ratio-916 .elementor-fit-aspect-ratio{padding-bottom:177.8%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0;background-color:#000}.elementor-fit-aspect-ratio video{width:100%}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding-top:25px}.elementor-templates-modal .dialog-content{height:100%}.elementor-templates-modal .dialog-loading{display:none}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{line-height:1;text-transform:uppercase;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:right;padding-right:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#f2295b,#434363);background-image:-o-linear-gradient(225deg,#f2295b,#434363);background-image:linear-gradient(-135deg,#f2295b,#434363);-webkit-border-radius:2px;border-radius:2px;margin-left:10px}.elementor-templates-modal__header__logo__title{padding-top:2px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close--normal{width:45px;border-right:1px solid #e6e9ec}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px 20px 10px 10px;margin-left:10px;color:#fff;background-color:#a4afb7;font-size:11px;font-weight:400;line-height:1;text-transform:uppercase;-webkit-border-radius:2px;border-radius:2px;cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-right:10px;margin-right:15px;border-right:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:#fff}.elementor-hidden{display:none}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:'';display:block;clear:both;width:0;height:0}#elementor-finder__modal{background:0 0}#elementor-finder__modal .dialog-widget-content{width:650px;max-width:98%;top:18vh;left:calc(50% - 650px / 2)}#elementor-finder__modal .dialog-message{height:initial;min-height:0;padding:0;text-align:right}#elementor-finder__search{padding:14px 15px 14px 21px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-shadow:0 -3px 15px 6px rgba(0,0,0,.03);box-shadow:0 -3px 15px 6px rgba(0,0,0,.03)}#elementor-finder__search i{font-size:16px;color:#a4afb7;font-weight:700;margin-left:15px}#elementor-finder__search__input{border:none;background:0 0;outline:0;padding:0;margin:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;font-size:14px;color:#495157}#elementor-finder__search__input::-webkit-input-placeholder{color:#a4afb7;font-style:italic;font-weight:300}#elementor-finder__search__input::-ms-input-placeholder{color:#a4afb7;font-style:italic;font-weight:300}#elementor-finder__search__input::placeholder{color:#a4afb7;font-style:italic;font-weight:300}#elementor-finder__results{max-height:50vh;overflow:auto}#elementor-finder__no-results{display:none;padding:20px;color:#a4afb7}.elementor-finder__results__category{position:relative}.elementor-finder__results__category__title{padding:5px 25px;color:#6d7882;background-color:#e6e9ec;font-size:9px;text-transform:uppercase}.elementor-finder__results__category--dynamic .elementor-finder__results__category__items{min-height:26px}.elementor-finder__results__category .eicon-loading{display:none;position:absolute;left:10px;top:30px;color:#71d7f7;font-size:14px}.elementor-finder__results__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-finder__results__item a{text-decoration:none;-webkit-box-shadow:none;box-shadow:none;outline:0}.elementor-finder__results__item.elementor-active{background-color:#71d7f7;-webkit-box-shadow:none;box-shadow:none;outline:0}.elementor-finder__results__item.elementor-active *{color:#fff}.elementor-finder__results__item:not(.elementor-active) .elementor-finder__results__item__actions{display:none}.elementor-finder__results__item__link{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:35px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-finder__results__item__icon{width:60px;text-align:center;color:#6d7882;font-size:17px}.elementor-finder__results__item__title{color:#6d7882;font-size:13px}.elementor-finder__results__item__description{margin-right:5px;color:#a4afb7;font-style:italic}.elementor-finder__results__item__actions{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-finder__results__item__action{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:100%;width:35px}.elementor-finder__results__item__action:hover{background-color:rgba(0,0,0,.07)} \ No newline at end of file diff --git a/modules/creativeelements/views/css/common.css b/modules/creativeelements/views/css/common.css new file mode 100644 index 00000000..c6475bd2 --- /dev/null +++ b/modules/creativeelements/views/css/common.css @@ -0,0 +1,447 @@ +.dialog-widget-content { + background-color: #fff; + position: absolute; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); + box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); + overflow: hidden; } + +.dialog-message { + font-size: 12px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.dialog-type-lightbox { + position: fixed; + height: 100%; + width: 100%; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.8); + z-index: 9999; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .dialog-type-lightbox .dialog-widget-content { + margin: auto; + width: 375px; } + .dialog-type-lightbox .dialog-header { + font-size: 15px; + color: #495157; + padding: 30px 0 10px; + font-weight: 500; } + .dialog-type-lightbox .dialog-message { + padding: 0 30px 30px; + min-height: 50px; } + .dialog-type-lightbox:not(.elementor-popup-modal) .dialog-header, + .dialog-type-lightbox:not(.elementor-popup-modal) .dialog-message { + text-align: center; } + .dialog-type-lightbox .dialog-buttons-wrapper { + border-top: 1px solid #e6e9ec; + text-align: center; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button { + font-family: Roboto; + width: 50%; + border: none; + background: none; + font-size: 15px; + cursor: pointer; + padding: 13px 0; + outline: 0; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:first-child { + color: #6d7882; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:hover { + background-color: #f4f6f7; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-ok { + color: #b01b1b; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-take_over { + color: #39b54a; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:active { + background-color: rgba(230, 233, 236, 0.5); } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button::-moz-focus-inner { + border: 0; } + +.dialog-close-button { + cursor: pointer; + position: absolute; + top: 30px; + right: 30px; + font-size: 15px; + line-height: 1; } + .dialog-close-button:not(:hover) { + opacity: .4; } + +.dialog-alert-widget .dialog-buttons-wrapper > button { + width: 100%; } + +.dialog-confirm-widget .dialog-button:first-child { + border-right: 1px solid #e6e9ec; } + +.dialog-prevent-scroll { + overflow: hidden; + max-height: 100vh; } + +@media (max-width: 767px) { + .dialog-close-button { + top: 15px; + right: 15px; } + body.admin-bar .dialog-close-button { + top: 40px; } } + +.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio { + padding-bottom: 42.8571%; } + +.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio { + padding-bottom: 56.25%; } + +.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio { + padding-bottom: 75%; } + +.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio { + padding-bottom: 66.6666%; } + +.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio { + padding-bottom: 100%; } + +.elementor-aspect-ratio-916 .elementor-fit-aspect-ratio { + padding-bottom: 177.8%; } + +.elementor-fit-aspect-ratio { + position: relative; + height: 0; } + .elementor-fit-aspect-ratio iframe { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + border: 0; + background-color: #000; } + .elementor-fit-aspect-ratio video { + width: 100%; } + +.flatpickr-calendar { + width: 280px; } + .flatpickr-calendar .flatpickr-current-month span.cur-month { + font-weight: 300; } + .flatpickr-calendar .dayContainer { + width: 280px; + min-width: 280px; + max-width: 280px; } + .flatpickr-calendar .flatpickr-days { + width: 280px; } + .flatpickr-calendar .flatpickr-day { + max-width: 37px; + height: 37px; + line-height: 37px; } + +.elementor-templates-modal .dialog-widget-content { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + background-color: #f1f3f5; + width: 100%; } + @media (max-width: 1439px) { + .elementor-templates-modal .dialog-widget-content { + max-width: 990px; } } + @media (min-width: 1440px) { + .elementor-templates-modal .dialog-widget-content { + max-width: 1200px; } } + +.elementor-templates-modal .dialog-header { + padding: 0; + background-color: #fff; + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + position: relative; + z-index: 1; } + +.elementor-templates-modal .dialog-buttons-wrapper { + display: none; } + +.elementor-templates-modal .dialog-message { + height: 750px; + max-height: 85vh; + overflow: auto; + padding-top: 25px; } + +.elementor-templates-modal .dialog-content { + height: 100%; } + +.elementor-templates-modal .dialog-loading { + display: none; } + +.elementor-templates-modal__header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + height: 50px; } + .elementor-templates-modal__header__logo { + line-height: 1; + text-transform: uppercase; + font-weight: bold; + cursor: pointer; } + .elementor-templates-modal__header__logo-area { + text-align: left; + padding-left: 15px; } + .elementor-templates-modal__header__logo-area > * { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-templates-modal__header__logo__icon-wrapper { + padding: 4px 7px 6px; + background-image: -webkit-linear-gradient(225deg, #f2295b, #434363); + background-image: -o-linear-gradient(225deg, #f2295b, #434363); + background-image: linear-gradient(-135deg, #f2295b, #434363); + -webkit-border-radius: 2px; + border-radius: 2px; + margin-right: 10px; } + .elementor-templates-modal__header__logo__title { + padding-top: 2px; } + .elementor-templates-modal__header__logo i { + color: #fff; + font-size: 10px; } + .elementor-templates-modal__header__items-area { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .elementor-templates-modal__header__item { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + .elementor-templates-modal__header__item > i { + font-size: 20px; + -webkit-transition: color .5s; + -o-transition: color .5s; + transition: color .5s; + cursor: pointer; } + .elementor-templates-modal__header__item > i:not(:hover) { + color: #a4afb7; } + .elementor-templates-modal__header__close--normal { + width: 45px; + border-left: 1px solid #e6e9ec; } + .elementor-templates-modal__header__close--normal i { + font-size: 18px; } + .elementor-templates-modal__header__close--skip { + padding: 10px; + padding-left: 20px; + margin-right: 10px; + color: #fff; + background-color: #a4afb7; + font-size: 11px; + font-weight: normal; + line-height: 1; + text-transform: uppercase; + -webkit-border-radius: 2px; + border-radius: 2px; + cursor: pointer; } + .elementor-templates-modal__header__close--skip > i { + font-size: inherit; + padding-left: 10px; + margin-left: 15px; + border-left: 1px solid; } + .elementor-templates-modal__header__close--skip > i:not(:hover) { + color: #fff; } + +.elementor-hidden { + display: none; } + +.elementor-screen-only, +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + position: absolute; + top: -10000em; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; } + +.elementor-clearfix:after { + content: ''; + display: block; + clear: both; + width: 0; + height: 0; } + +#elementor-finder__modal { + background: none; } + #elementor-finder__modal .dialog-widget-content { + width: 650px; + max-width: 98%; + top: 18vh; + left: calc( 50% - 650px / 2); } + #elementor-finder__modal .dialog-message { + height: initial; + min-height: 0; + padding: 0; + text-align: left; } + +#elementor-finder__search { + padding: 14px 15px 14px 21px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-shadow: 0 -3px 15px 6px rgba(0, 0, 0, 0.03); + box-shadow: 0 -3px 15px 6px rgba(0, 0, 0, 0.03); } + #elementor-finder__search i { + font-size: 16px; + color: #a4afb7; + font-weight: bold; + margin-right: 15px; } + #elementor-finder__search__input { + border: none; + background: none; + outline: none; + padding: 0; + margin: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + font-size: 14px; + color: #495157; } + #elementor-finder__search__input::-webkit-input-placeholder { + color: #a4afb7; + font-style: italic; + font-weight: 300; } + #elementor-finder__search__input::-ms-input-placeholder { + color: #a4afb7; + font-style: italic; + font-weight: 300; } + #elementor-finder__search__input::placeholder { + color: #a4afb7; + font-style: italic; + font-weight: 300; } + +#elementor-finder__results { + max-height: 50vh; + overflow: auto; } + +#elementor-finder__no-results { + display: none; + padding: 20px; + color: #a4afb7; } + +.elementor-finder__results__category { + position: relative; } + .elementor-finder__results__category__title { + padding: 5px 25px; + color: #6d7882; + background-color: #e6e9ec; + font-size: 9px; + text-transform: uppercase; } + .elementor-finder__results__category--dynamic .elementor-finder__results__category__items { + min-height: 26px; } + .elementor-finder__results__category .eicon-loading { + display: none; + position: absolute; + right: 10px; + top: 30px; + color: #71d7f7; + font-size: 14px; } + +.elementor-finder__results__item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .elementor-finder__results__item a { + text-decoration: none; + -webkit-box-shadow: none; + box-shadow: none; + outline: none; } + .elementor-finder__results__item.elementor-active { + background-color: #71d7f7; + -webkit-box-shadow: none; + box-shadow: none; + outline: none; } + .elementor-finder__results__item.elementor-active * { + color: #fff; } + .elementor-finder__results__item:not(.elementor-active) .elementor-finder__results__item__actions { + display: none; } + .elementor-finder__results__item__link { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 35px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-finder__results__item__icon { + width: 60px; + text-align: center; + color: #6d7882; + font-size: 17px; } + .elementor-finder__results__item__title { + color: #6d7882; + font-size: 13px; } + .elementor-finder__results__item__description { + margin-left: 5px; + color: #a4afb7; + font-style: italic; } + .elementor-finder__results__item__actions { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .elementor-finder__results__item__action { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; + width: 35px; } + .elementor-finder__results__item__action:hover { + background-color: rgba(0, 0, 0, 0.07); } diff --git a/modules/creativeelements/views/css/common.min.css b/modules/creativeelements/views/css/common.min.css new file mode 100644 index 00000000..ec3958cb --- /dev/null +++ b/modules/creativeelements/views/css/common.min.css @@ -0,0 +1 @@ +.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{font-size:15px;color:#495157;padding:30px 0 10px;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 30px 30px;min-height:50px}.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-header,.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button{font-family:Roboto;width:50%;border:none;background:0 0;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:hover{background-color:#f4f6f7}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px;line-height:1}.dialog-close-button:not(:hover){opacity:.4}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}.dialog-confirm-widget .dialog-button:first-child{border-right:1px solid #e6e9ec}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-aspect-ratio-916 .elementor-fit-aspect-ratio{padding-bottom:177.8%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0;background-color:#000}.elementor-fit-aspect-ratio video{width:100%}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding-top:25px}.elementor-templates-modal .dialog-content{height:100%}.elementor-templates-modal .dialog-loading{display:none}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{line-height:1;text-transform:uppercase;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:left;padding-left:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#f2295b,#434363);background-image:-o-linear-gradient(225deg,#f2295b,#434363);background-image:linear-gradient(-135deg,#f2295b,#434363);-webkit-border-radius:2px;border-radius:2px;margin-right:10px}.elementor-templates-modal__header__logo__title{padding-top:2px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close--normal{width:45px;border-left:1px solid #e6e9ec}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px 10px 10px 20px;margin-right:10px;color:#fff;background-color:#a4afb7;font-size:11px;font-weight:400;line-height:1;text-transform:uppercase;-webkit-border-radius:2px;border-radius:2px;cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-left:10px;margin-left:15px;border-left:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:#fff}.elementor-hidden{display:none}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:'';display:block;clear:both;width:0;height:0}#elementor-finder__modal{background:0 0}#elementor-finder__modal .dialog-widget-content{width:650px;max-width:98%;top:18vh;left:calc(50% - 650px / 2)}#elementor-finder__modal .dialog-message{height:initial;min-height:0;padding:0;text-align:left}#elementor-finder__search{padding:14px 15px 14px 21px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-shadow:0 -3px 15px 6px rgba(0,0,0,.03);box-shadow:0 -3px 15px 6px rgba(0,0,0,.03)}#elementor-finder__search i{font-size:16px;color:#a4afb7;font-weight:700;margin-right:15px}#elementor-finder__search__input{border:none;background:0 0;outline:0;padding:0;margin:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;font-size:14px;color:#495157}#elementor-finder__search__input::-webkit-input-placeholder{color:#a4afb7;font-style:italic;font-weight:300}#elementor-finder__search__input::-ms-input-placeholder{color:#a4afb7;font-style:italic;font-weight:300}#elementor-finder__search__input::placeholder{color:#a4afb7;font-style:italic;font-weight:300}#elementor-finder__results{max-height:50vh;overflow:auto}#elementor-finder__no-results{display:none;padding:20px;color:#a4afb7}.elementor-finder__results__category{position:relative}.elementor-finder__results__category__title{padding:5px 25px;color:#6d7882;background-color:#e6e9ec;font-size:9px;text-transform:uppercase}.elementor-finder__results__category--dynamic .elementor-finder__results__category__items{min-height:26px}.elementor-finder__results__category .eicon-loading{display:none;position:absolute;right:10px;top:30px;color:#71d7f7;font-size:14px}.elementor-finder__results__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-finder__results__item a{text-decoration:none;-webkit-box-shadow:none;box-shadow:none;outline:0}.elementor-finder__results__item.elementor-active{background-color:#71d7f7;-webkit-box-shadow:none;box-shadow:none;outline:0}.elementor-finder__results__item.elementor-active *{color:#fff}.elementor-finder__results__item:not(.elementor-active) .elementor-finder__results__item__actions{display:none}.elementor-finder__results__item__link{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:35px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-finder__results__item__icon{width:60px;text-align:center;color:#6d7882;font-size:17px}.elementor-finder__results__item__title{color:#6d7882;font-size:13px}.elementor-finder__results__item__description{margin-left:5px;color:#a4afb7;font-style:italic}.elementor-finder__results__item__actions{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-finder__results__item__action{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:100%;width:35px}.elementor-finder__results__item__action:hover{background-color:rgba(0,0,0,.07)} \ No newline at end of file diff --git a/modules/creativeelements/views/css/custom-fonts.css b/modules/creativeelements/views/css/custom-fonts.css new file mode 100644 index 00000000..d69b5faf --- /dev/null +++ b/modules/creativeelements/views/css/custom-fonts.css @@ -0,0 +1,245 @@ +#ce_font_form .form-wrapper { + max-width: 100%; } +.ce-hidden { + display: none; } +.elementor-metabox-content .repeater-block { + background: #ffffff; + color: #6d7882; + padding: 20px; + border: 1px solid #eee; + margin-bottom: 2px; } + .elementor-metabox-content .repeater-block span.elementor-repeater-tool-btn.close-repeater-row { + display: none; } + .elementor-metabox-content .repeater-block.block-visible { + padding-bottom: 0; + margin-bottom: 0; } + .elementor-metabox-content .repeater-block.block-visible span.elementor-repeater-tool-btn.toggle-repeater-row { + display: none; } + .elementor-metabox-content .repeater-block.block-visible span.elementor-repeater-tool-btn.close-repeater-row { + display: inline-block; } + .elementor-metabox-content .repeater-block:not(.block-visible) .close-repeater-row { + display: none; } + .elementor-metabox-content .repeater-block .repeater-title { + cursor: pointer; } + .elementor-metabox-content .repeater-block + .elementor-button { + margin-top: 20px; } + +.elementor-metabox-content .row-font-label { + padding: 0; + margin: 0; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + list-style-type: none; + text-transform: capitalize; } + .elementor-metabox-content .row-font-label li { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + width: 100%; + margin: 0; } + .elementor-metabox-content .row-font-label li span.label { + color: #6d7882; + font-weight: 600; + padding-right: 10px; } + .elementor-metabox-content .row-font-label li.row-font-weight, .elementor-metabox-content .row-font-label li.row-font-style { + max-width: 180px; } + .elementor-metabox-content .row-font-label li.row-font-actions { + max-width: 200px; + text-align: right; } + +.elementor-metabox-content .repeater-content { + margin: 0; } + .elementor-metabox-content .repeater-content .repeater-content-top { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 20px; + line-height: 28px; } + .elementor-metabox-content .repeater-content .repeater-content-top > div { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-metabox-content .repeater-content .repeater-content-top p { + margin: 0; + display: inline-block; } + .elementor-metabox-content .repeater-content .repeater-content-top p label { + font-weight: 500; + padding-right: 10px; } + .elementor-metabox-content .repeater-content .repeater-content-top .elementor-field-select { + max-width: 180px; } + .elementor-metabox-content .repeater-content .repeater-content-top .elementor-field-select select { + display: inline-block; + background: none; + width: auto; } + .elementor-metabox-content .repeater-content .repeater-content-top .elementor-field-toolbar { + max-width: 200px; + text-align: right; } + .elementor-metabox-content .repeater-content .repeater-content-bottom { + background-color: #f7f7f7; + padding: 20px 40px; + margin: 0 -20px; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-align: center; + align-items: center; + background-color: #ffffff; + padding: 10px 20px; + margin-bottom: 10px; + -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.05); + box-shadow: 0 3px 5px rgba(0, 0, 0, 0.05); } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field:last-child { + margin-bottom: 0; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field p, + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field input { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + width: 100%; + margin: 0; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field p.elementor-field-label { + font-weight: 500; + max-width: 120px; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field .elementor-field-input { + padding: 5px 8px; + margin: 0 15px; + border-radius: 3px; + font-size: 12px; + width: 100%; + background: none; + -webkit-box-shadow: none; + box-shadow: none; + color: #495157; + border: 1px solid; + outline: none; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field .elementor-field-input:not(:focus) { + border-color: #d5dadf; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field .elementor-field-input:focus { + border-color: #a4afb7; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field .elementor-field-input[readonly] { + cursor: default; + background-color: #f7f7f7; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field .elementor-upload-btn, + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field .elementor-upload-clear-btn { + max-width: 100px; + font-size: 11px; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field .elementor-upload-clear-btn { + background-color: #eceeef; + color: #a4afb7; } + .elementor-metabox-content .repeater-content .repeater-content-bottom .elementor-field .elementor-upload-clear-btn:hover { + background-color: #b01b1b; + color: white; } + +.elementor-metabox-content .elementor-button { + background-color: #a4afb7; + color: #fff; + line-height: 1; + text-transform: uppercase; + height: auto; + padding: 10px 20px; + outline: none; + border: none; + border-radius: 3px; + -webkit-transition-property: background, color, opacity, -webkit-box-shadow; + transition-property: background, color, box-shadow, opacity; + -webkit-transition-duration: .3s; + transition-duration: .3s; } + .elementor-metabox-content .elementor-button:hover, .elementor-metabox-content .elementor-button:focus, .elementor-metabox-content .elementor-button:visited { + color: #fff; } + .elementor-metabox-content .elementor-button:focus, .elementor-metabox-content .elementor-button:visited { + background-color: #a4afb7; } + .elementor-metabox-content .elementor-button:hover { + background-color: #6d7882; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + border: none; } + .elementor-metabox-content .elementor-button:active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-metabox-content .elementor-button:not([disabled]) { + cursor: pointer; } + .elementor-metabox-content .elementor-button.elementor-size-xs { + font-size: 11px; + padding: 10px 20px; + border-radius: 2px; } + .elementor-metabox-content .elementor-button.elementor-size-sm { + font-size: 13px; + padding: 12px 24px; + border-radius: 3px; } + .elementor-metabox-content .elementor-button.elementor-size-md { + font-size: 14px; + padding: 15px 30px; + border-radius: 4px; } + .elementor-metabox-content .elementor-button.elementor-size-lg { + font-size: 15px; + padding: 20px 40px; + border-radius: 5px; } + .elementor-metabox-content .elementor-button.elementor-size-xl { + font-size: 18px; + padding: 25px 50px; + border-radius: 6px; } + .elementor-metabox-content .elementor-button .elementor-align-icon-right { + float: right; + margin-left: 5px; } + .elementor-metabox-content .elementor-button .elementor-align-icon-left { + float: left; + margin-right: 5px; } + +.elementor-metabox-content input.button.add-repeater-row { + margin-top: 18px; + border: none; + -webkit-box-shadow: none; + box-shadow: none; } + +.elementor-metabox-content .elementor-repeater-tool-btn { + color: #a4afb7; + cursor: pointer; + padding: 0 10px; + font-size: 12px; + -webkit-transition: all 0.5s; + -o-transition: all 0.5s; + transition: all 0.5s; } + .elementor-metabox-content .elementor-repeater-tool-btn i { + padding-right: 5px; } + .elementor-metabox-content .elementor-repeater-tool-btn:hover { + color: #6d7882; } + .elementor-metabox-content .elementor-repeater-tool-btn.remove-repeater-row:hover { + color: #b01b1b; } + +.elementor-metabox-content .row-font-preview, +.elementor-metabox-content .inline-preview { + font-size: 16px; + text-transform: capitalize; } + +.column-font_preview { + width: 65%; } + +.widefat td.column-font_preview { + font-size: 16px; } diff --git a/modules/creativeelements/views/css/editor-ce.css b/modules/creativeelements/views/css/editor-ce.css new file mode 100644 index 00000000..7ccc6d31 --- /dev/null +++ b/modules/creativeelements/views/css/editor-ce.css @@ -0,0 +1,273 @@ +/* Loading */ +div.elementor-loader { + padding: 0; + box-shadow: none; + background-color: transparent; + overflow: hidden; + border-radius: 32px; } +div.elementor-loader-box { + background-color: rgba(164, 175, 183, .65); } +.elementor-loader div.elementor-loader-box:nth-of-type(1) { + left: 0; + top: calc(19/54 * 100%); + width: 30%; + height: calc(35/54 * 100%); } +.elementor-loader div.elementor-loader-box:nth-of-type(2) { + left: 0; + top: 0; + width: 100%; + height: 30%; } +.elementor-loader div.elementor-loader-box:nth-of-type(3) { + right: 0; + top: calc(19/54 * 100%); + width: calc(35/54 * 100%); + height: 30%; } +.elementor-loader div.elementor-loader-box:nth-of-type(4) { + right: 0; + bottom: 0; + width: calc(35/54 * 100%); + height: 30%; } + +/* Hide */ +.elementor-control-loading ~ .elementor-repeater-fields-wrapper .elementor-repeater-row-controls, +.elementor-control-tab_title.elementor-hidden-control ~ .elementor-control-_title, +.elementor-control-tab_title:not(.elementor-hidden-control) ~ .elementor-control-_inline_size, +.elementor-editor-product-miniature .elementor-control-_element_id, +.elementor-editor-product-miniature .elementor-control-_section_visibility, +.elementor-editor-product-miniature .elementor-group-control-background .elementor-control-dynamic-switcher-wrapper, +.elementor-control-heading_buttons.elementor-hidden-control ~ .elementor-control-plus, +.elementor-control-heading_buttons.elementor-hidden-control ~ .elementor-control-minus, +.elementor-control-title:empty, +#elementor-panel-elements-navigation-all, +#elementor-panel-elements-navigation-global, +#elementor-panel-get-pro-elements, +.ce-hide-link-options .elementor-control-url-more { + display: none !important; } + +/* URL Control */ +.ce-hide-link-options .elementor-input { + padding: 5px 8px !important; } + +/* Dynamic */ +.elementor-dynamic-cover__settings i.fa-wrench { + color: #6d7882; } +.elementor-dynamic-cover__title.ce-active { + margin: 0 8px; + padding: 0; + cursor: pointer; } +.elementor-dynamic-cover__title.ce-inactive { + cursor: default; } + +/* Update */ +.elementor-panel div#elementor-panel-footer-saver-publish { + width: 68px; } + +/* File Manager */ +#ce-file-manager-modal .dialog-widget-content { + width: 100%; + background: #ECECEC; } + @media (max-width: 1439px) { + #ce-file-manager-modal .dialog-widget-content { + max-width: 990px; } } + @media (min-width: 1440px) { + #ce-file-manager-modal .dialog-widget-content { + max-width: 1125px; } } +#ce-file-manager { + position: relative; + max-height: calc(85vh - 50px); } +#ce-file-manager-modal .dialog-header { + background: #fff; + padding: 18px 17px; + text-align: left; } +#ce-file-manager-modal .dialog-close-button { + top: 17px; + right: 18px; + color: #495157; } +#ce-file-manager-modal .dialog-close-button:not(:hover) { + color: #6d7882; + opacity: 1; } +#ce-file-manager-modal .dialog-close-button-icon { + font-family: eicons; + font-style: normal; + font-size: 18px; } +#ce-file-manager-modal .dialog-close-button-icon:before { + content: '\e909'; } +#ce-file-manager-modal .dialog-message { + padding: 0; } + +/* Media buttons */ +.elementor-panel .elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-btn { + bottom: -30px; } +.elementor-panel .elementor-control-type-media .elementor-control-media-btn { + position: absolute; + left: 0; + right: auto; + bottom: 0; + width: 100%; + text-align: center; + padding: 9.5px 0; + font-size: 11px; + color: #fff; + background-color: #a4afb7; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + text-transform: uppercase; } +.elementor-panel .elementor-control-type-media .elementor-control-media-btn:hover { + box-shadow: inset 0 0 3px 3px rgba(0, 0, 0, 0.1); } +.elementor-panel .elementor-control-media-seo div.elementor-control-media-btn { + width: 33.3%; } +.elementor-panel .elementor-control-media-seo div.elementor-control-media-title { + left: 33.3%; + border-left: 1px solid #d5dadf; } +.elementor-panel .elementor-control-media-seo div.elementor-control-media-delete { + left: 66.6%; + background-color: #b01b1b; + border-left: 1px solid #d5dadf; } + +.elementor-control-type-media .elementor-control-field { + column-gap: 5px; } +.elementor-control-media-url i { + padding: 0 5px; } +.elementor-control-dynamic-value .elementor-control-media-url { + display: none; } +.elementor-control-type-media .elementor-control-dynamic-switcher-wrapper { + flex-grow: 0; + order: 2; } +.elementor-control-type-media .elementor-units-choices { + order: 1; } +.elementor-control-type-media .elementor-control-input-wrapper { + order: 3; } + +/* Repeater thumbnail */ +.ce-repeater-thumb { + margin: 0 10px 0 -10px; + width: 38px; + height: 38px !important; + vertical-align: middle; + object-fit: cover; } +.elementor-repeater-row-item-title .ce-repeater-thumb { + cursor: grab; } +.select2-results .ce-repeater-thumb { + margin: 0 6px 0 0; } + +/* Picker */ +.elementor-panel .wp-picker-container.wp-picker-active { + right: -8px; } +.elementor-panel .wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 17px; } +.elementor-panel .wp-picker-container .wp-color-result { + cursor: pointer; } +.elementor-panel .wp-picker-container input[type="text"].wp-color-picker { + min-width: 132px; } + +/* Multiselect placeholder fix */ +.select2-selection--multiple .select2-search__field[placeholder]:not([placeholder='']) { + width: 100% !important; } + +/* Language switcher */ +.elementor-panel #elementor-panel-footer-lang > i { + display: block; + height: 100%; + line-height: 40px; } +#ce-context-wrapper { + position: relative; } +#ce-context-wrapper:after { + content: '\f0d7'; + position: absolute; + top: 11px; + right: 13px; + font: 15px/15px 'FontAwesome'; + color: #d5dadf; + pointer-events: none; } +select#ce-context { + height: 38px; + margin: 0 0 10px; + border: none; + border-radius: 5px; + padding: 12px; + background: #495157; + cursor: pointer; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } +select#ce-context:hover { + background: #444d53; } +select#ce-context:focus { + background: #3b4349; } +select#ce-context, +select#ce-context option { + font-family: Roboto, sans-serif; + font-size: 13px; + color: #d5dadf; } +select#ce-context option { + background: #495157; } +#ce-langs .ce-lang.active { + cursor: default; } +#ce-langs .elementor-description { + text-align: center; } +#ce-langs .elementor-button { + padding: 4px 8px; + font-size: 11px; + text-transform: uppercase; } + +/* Revision fixes */ +.elementor-revision-item__gravatar { + min-width: 22px; + min-height: 22px; } +.elementor-revision-item:not(:hover) i.elementor-revision-item__tools-delete { + display: block; + visibility: hidden; } +.elementor-panel .elementor-panel-scheme-reset button.elementor-button, +.elementor-panel .elementor-panel-scheme-discard button.elementor-button { + color: #6d7882; } +.elementor-panel .elementor-panel-scheme-discard button.elementor-button:disabled { + color: #a4afb7; } + +/* Fix for local template list */ +#elementor-template-library-templates[data-template-source] { + padding-bottom: 45px; } +#elementor-template-library-templates[data-template-source=local] div#elementor-template-library-templates-container { + margin-bottom: 0; } +.elementor-template-library-menu-item { + vertical-align: middle; } + +/* Creative Slider controls */ +.elementor-control-ls-new button, +.elementor-control-ls-edit button { + min-width: 100%; } +.elementor-control-ls-new .elementor-control-field-description { + position: absolute; + left: 50%; + padding: 0 5px; + background: #fff; + -webkit-transform: translate(-50%, 35px); + transform: translate(-50%, 35px); + z-index: 1; } + +/* Custom CSS hint */ +pre.ce-custom-css-hint { + font-family: monospace; + font-size: 10.5px !important; + font-style: normal; } + +/* Color Picker fix */ +.iris-picker .iris-square-value { + border: 0 !important; + width: 0 !important; + height: 0 !important; } + +.ce-disabled { + pointer-events: none; } + +/* Premium */ +html[lang=fr] .elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before { + content: 'PRIME'; } +html[lang=es] .elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before { + content: 'PRIMA'; } +/* Fix for update button */ +html[lang=fr] .elementor-panel #elementor-panel-saver-button-publish, +html[lang=fr] .elementor-panel #elementor-panel-saver-button-save-options { + height: 30px; + margin-left: 4px; } \ No newline at end of file diff --git a/modules/creativeelements/views/css/editor-preview-rtl.css b/modules/creativeelements/views/css/editor-preview-rtl.css new file mode 100644 index 00000000..fc66cdc2 --- /dev/null +++ b/modules/creativeelements/views/css/editor-preview-rtl.css @@ -0,0 +1,2547 @@ +@charset "UTF-8"; +.ui-resizable-n { + top: -5px; } + +.ui-resizable-e { + right: -5px; } + +.ui-resizable-s { + bottom: -5px; } + +.ui-resizable-w { + left: -5px; } + +.ui-resizable-ne { + top: -5px; + right: -5px; } + +.ui-resizable-nw { + top: -5px; + left: -5px; } + +.ui-resizable-se { + bottom: -5px; + right: -5px; } + +.ui-resizable-sw { + bottom: -5px; + left: -5px; } + +.ui-resizable-n, .ui-resizable-s { + left: 0; + height: 10px; + width: 100%; + cursor: ns-resize; } + +.ui-resizable-e, .ui-resizable-w { + top: 0; + height: 100%; + width: 10px; + cursor: ew-resize; } + +.ui-resizable-ne, .ui-resizable-nw, .ui-resizable-se, .ui-resizable-sw { + height: 15px; + width: 15px; } + +.ui-resizable-nw, .ui-resizable-se { + cursor: nwse-resize; } + +.ui-resizable-ne, .ui-resizable-sw { + cursor: nesw-resize; } + +.ui-resizable-handle { + position: absolute; } + +.ui-resizable-resizing { + pointer-events: none; } + +.elementor-panel-box { + margin-top: 10px; + background-color: #fff; } + +.elementor-panel-box-content { + padding: 20px 20px 10px; } + +.elementor-button { + display: inline-block; } + +.elementor-panel-alert { + padding: 15px; + border-left: 5px solid transparent; + position: relative; + font-size: 12px; + line-height: 1.5; + text-align: right; } + .elementor-panel-alert a { + color: inherit; } + .elementor-panel-alert.elementor-panel-alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bcdff1; } + .elementor-panel-alert.elementor-panel-alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #cae6be; } + .elementor-panel-alert.elementor-panel-alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #f9f0c3; } + .elementor-panel-alert.elementor-panel-alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #e8c4c4; } + +.elementor-label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + -webkit-border-radius: .25em; + border-radius: .25em; + text-transform: capitalize; } + .elementor-label.elementor-label-default { + background-color: #a4afb7; } + .elementor-label.elementor-label-info { + background-color: #5bc0de; } + .elementor-label.elementor-label-success { + background-color: #5cb85c; } + .elementor-label.elementor-label-warning { + background-color: #f0ad4e; } + .elementor-label.elementor-label-danger { + background-color: #d9534f; } + +.elementor-descriptor, .elementor-control-field-description { + font-size: 11px; + font-style: italic; + line-height: 1.4; + color: #a4afb7; } + +.elementor-controls-popover { + display: none; + position: absolute; + -webkit-box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); + box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); + -webkit-border-radius: 3px; + border-radius: 3px; + left: 0; + right: 0; + margin: -4px auto 5px; + padding-top: 15px; + width: 90%; + z-index: 10000; + background-color: #fff; } + .elementor-controls-popover:before { + content: ''; + position: absolute; + top: -16px; + left: 22px; + border: 8px solid transparent; + border-bottom-color: #fff; } + .elementor-controls-popover div.elementor-control { + background-color: transparent; } + .elementor-controls-popover div.elementor-control:before { + content: none; } + +#elementor-panel-get-pro-elements .elementor-nerd-box-message { + text-transform: uppercase; } + +.select2-container { + width: 100% !important; } + +#elementor-controls .pojo-widget-button-collapse { + display: none; } + +.elementor-control { + background-color: #fff; + position: relative; + padding: 0 20px 15px; } + .elementor-control a { + font-weight: 500; + text-decoration: none; + border-bottom: 1px dotted transparent; + -webkit-transition: all ease-in-out .3s; + -o-transition: all ease-in-out .3s; + transition: all ease-in-out .3s; } + .elementor-control a:hover { + border-bottom-color: inherit; } + .elementor-control .elementor-control-content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + .elementor-control .elementor-control-title { + font-size: 12px; + line-height: 1; + margin-left: 5px; } + .elementor-control .elementor-control-spinner { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-control.elementor-control-type-divider { + padding: 0; + background-color: transparent; } + .elementor-control.elementor-control-type-divider .elementor-control-content { + border-width: 0; + border-color: #e6e9ec; + border-style: solid; + border-top-width: 1px; + background-color: #ffffff; + height: 15px; } + .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp { + margin-top: 15px; } + .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before { + content: ''; + height: 1px; + display: block; + margin-bottom: 15px; + background-color: transparent; } + .elementor-control.elementor-control-separator-before { + padding-top: 15px; } + .elementor-control.elementor-control-separator-before:before { + content: ''; + position: absolute; + height: 1px; + width: 100%; + top: 0; + left: 0; + background-color: #e6e9ec; } + .elementor-control.elementor-control-separator-after:after { + content: ''; + position: absolute; + height: 1px; + width: 100%; + bottom: 0; + left: 0; + background-color: #e6e9ec; } + .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs, + .elementor-control.elementor-control-separator-after + .elementor-control-separator-default { + padding-top: 15px; } + .elementor-control.elementor-control-deprecated { + color: #b01b1b; } + .elementor-control.elementor-control-deprecated .elementor-control-field-description { + color: #b01b1b; } + .elementor-control.elementor-control-hidden-label > * > .elementor-control-title, .elementor-control.elementor-control-hidden-label > * > * > .elementor-control-title { + display: none; } + .elementor-control.elementor-hidden-control { + display: none; } + .elementor-control.elementor-control-type-heading .elementor-control-title { + font-weight: bold; + margin: 0; } + body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop { + display: none; } + body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet { + display: none; } + body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile { + display: none; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper { + position: relative; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper select { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + color: #495157; + font-size: 12px; + font-family: inherit; + font-weight: inherit; + font-style: inherit; + text-transform: inherit; + letter-spacing: inherit; + line-height: inherit; + -webkit-flex-basis: 100%; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + padding-right: 5px; + padding-left: 20px; + cursor: pointer; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after { + font-family: eicons; + content: '\e955'; + font-size: 12px; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + left: 5px; + pointer-events: none; } + .elementor-control .select2-container { + width: 100% !important; + outline: none; } + .elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear { + display: none; } + .elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice { + line-height: 1.5; + font-size: 0.9em; + border: none; + -webkit-border-radius: 0; + border-radius: 0; } + .elementor-control .select2-container.select2-container--default .select2-selection__rendered { + line-height: 27px; } + .elementor-control .select2-selection { + outline: none; } + .elementor-control .select2-selection--single { + height: 27px; } + .elementor-control .select2-selection__rendered { + line-height: 27px; } + .elementor-control .select2-selection__arrow { + height: 27px; + top: 0; } + +.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before, +.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before { + content: '\f0d7'; } + +.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before, +.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before { + content: ""; } + +.elementor-panel-heading { + display: table; + table-layout: fixed; + height: 40px; + padding: 0 20px; + width: 100%; + border-bottom: 1px solid #e6e9ec; + cursor: pointer; } + .elementor-panel-heading > * { + display: table-cell; + vertical-align: middle; } + .elementor-panel-heading-toggle { + width: 20px; + color: #495157; } + .elementor-panel-heading-title { + color: #495157; + font-weight: bold; } + +.elementor-control-wp { + line-height: 1.5; } + .elementor-control-wp p { + margin: 15px 0; } + +.elementor-control-field { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-label-block > .elementor-control-content > .elementor-control-field { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + width: 100%; + margin-top: 10px; } + +.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic) > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + margin-top: 0; } + +.elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-title { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; } + +.elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + width: 55%; + -webkit-flex-shrink: 1; + -ms-flex-negative: 1; + flex-shrink: 1; + margin-right: auto; } + +.elementor-control-field-description { + margin-top: 10px; } + +.elementor-group-control-attachment_alert .elementor-control-field-description { + margin-top: 0; } + +.elementor-required { + color: #b01b1b; } + +.elementor-choices { + display: table; + width: 100%; + height: 27px; + background-color: #a4afb7; + text-align: center; + border-spacing: 1px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-choices input { + display: none; } + .elementor-choices input:checked + .elementor-choices-label { + color: #fff; } + .elementor-choices input:not(:checked) + .elementor-choices-label { + background-color: #fff; + color: #a4afb7; } + .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + .elementor-choices input:not(:checked) + .elementor-choices-label:last-child { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-choices .elementor-choices-label { + display: table-cell; + vertical-align: middle; + font-size: 12px; + -webkit-transition: all .5s; + -o-transition: all .5s; + transition: all .5s; + cursor: pointer; } + +.elementor-units-choices { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: left; } + .elementor-units-choices input { + display: none; } + .elementor-units-choices input:not(:checked) + label { + color: #c2cbd2; } + .elementor-units-choices input:checked + label { + text-decoration: underline; } + .elementor-units-choices label { + cursor: pointer; + padding: 0 2px; + text-transform: uppercase; + font-size: 9px; } + +.elementor-control-start-end .eicon-h-align-left, .elementor-control-start-end .eicon-h-align-right { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.elementor-control-responsive-switchers { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin-left: 5px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher { + display: inline-block; + -webkit-border-radius: 50%; + border-radius: 50%; + height: 18px; + width: 18px; + background-color: #a4afb7; + cursor: pointer; + position: relative; + color: #fff; + font-size: 8px; + text-align: center; + -webkit-transition: background-color .5s; + -o-transition: background-color .5s; + transition: background-color .5s; } + .elementor-control-responsive-switchers .elementor-responsive-switcher:not(:first-child) { + margin-right: 5px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher:hover { + background-color: #c2cbd2; } + .elementor-control-responsive-switchers .elementor-responsive-switcher i { + position: relative; + display: block; + line-height: 18px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher i:before { + height: 18px; + width: 18px; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + +.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher { + background: #c2cbd2; } + .elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop) { + display: none; } + +.elementor-device-mobile .elementor-responsive-switcher-mobile { + background-color: #71d7f7; } + +.elementor-device-tablet .elementor-responsive-switcher-tablet { + background-color: #71d7f7; } + +.elementor-update-preview { + margin: 15px 15px 0; + background-color: #e6e9ec; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-update-preview-button-wrapper { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: left; } + +.elementor-update-preview-button { + padding: 8px 15px; + text-transform: uppercase; } + +.lang-rtl .elementor-control-text_align .elementor-choices, +.lang-rtl .elementor-control-align .elementor-choices, +.lang-rtl .elementor-control-position .elementor-choices { + direction: ltr; } + .lang-rtl .elementor-control-text_align .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2), + .lang-rtl .elementor-control-align .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2), + .lang-rtl .elementor-control-position .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .lang-rtl .elementor-control-text_align .elementor-choices input:not(:checked) + .elementor-choices-label:last-child, + .lang-rtl .elementor-control-align .elementor-choices input:not(:checked) + .elementor-choices-label:last-child, + .lang-rtl .elementor-control-position .elementor-choices input:not(:checked) + .elementor-choices-label:last-child { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + +.elementor-control-direction-ltr { + direction: ltr; } + +.elementor-control-direction-rtl { + direction: rtl; } + +.elementor-control-type-box_shadow .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-box_shadow .elementor-shadow-slider { + margin-top: 10px; } + +.elementor-control-type-button .elementor-control-input-wrapper { + text-align: left; } + +.elementor-control-type-button .elementor-button { + width: auto; + height: 26px; } + +.elementor-control-type-code { + padding: 0 10px 15px; } + +.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-title { + width: 70%; } + +.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + height: 27px; + width: 30%; } + +.elementor-group-control-css-filter .elementor-slider { + height: 6px; + -webkit-box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); } + +.elementor-group-control-css-filter .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + margin-top: 0; + margin-bottom: 5px; } + +.elementor-group-control-blur .elementor-slider { + background: url("../images/blur.png"); + -webkit-background-size: cover; + background-size: cover; + background-position: center; } + +.elementor-group-control-contrast .elementor-slider { + background: url("../images/contrast.png"); + -webkit-background-size: 100% 100%; + background-size: 100% 100%; } + +.elementor-group-control-hue .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(red), color-stop(orange), color-stop(yellow), color-stop(greenyellow), color-stop(limegreen), color-stop(deepskyblue), color-stop(blue), color-stop(95%, darkviolet)); + background-image: -webkit-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); + background-image: -o-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); + background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); } + +.elementor-group-control-saturate .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(gray), to(red)); + background-image: -webkit-linear-gradient(left, gray, red); + background-image: -o-linear-gradient(left, gray, red); + background-image: linear-gradient(to right, gray, red); } + +.elementor-group-control-brightness .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(black), to(white)); + background-image: -webkit-linear-gradient(left, black, white); + background-image: -o-linear-gradient(left, black, white); + background-image: linear-gradient(to right, black, white); } + +.elementor-control-type-dimensions .elementor-control-dimensions { + overflow: hidden; } + +.elementor-control-type-dimensions li { + float: left; + width: 20%; } + .elementor-control-type-dimensions li input, + .elementor-control-type-dimensions li .elementor-link-dimensions { + display: block; + text-align: center; + width: 100%; + border-color: #a4afb7; + height: 27px; } + .elementor-control-type-dimensions li input { + border-left: none; + -webkit-border-radius: 0; + border-radius: 0; + padding: 4px 0; } + .elementor-control-type-dimensions li input:focus + .elementor-control-dimension-label { + color: #a4afb7; } + .elementor-control-type-dimensions li .elementor-link-dimensions { + border: 1px solid #a4afb7; + border-left: none; + background-color: #fff; + padding: 0; + outline: none; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + cursor: pointer; } + .elementor-control-type-dimensions li:first-child input { + border-left: 1px solid #a4afb7; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + +.elementor-control-type-dimensions .elementor-control-dimension-label { + display: block; + text-align: center; + color: #d5dadf; + font-size: 9px; + text-transform: uppercase; + padding-top: 5px; } + +.elementor-control-type-dimensions .elementor-link-dimensions.unlinked { + background-color: #fff; } + .elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked { + display: none; } + +.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) { + background-color: #a4afb7; } + .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked { + display: none; } + +.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked { + color: #fff; } + +.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails { + display: none; } + +.elementor-control-type-gallery .elementor-control-gallery-thumbnails { + overflow: hidden; + margin-top: 20px; + cursor: pointer; } + +.elementor-control-type-gallery .elementor-control-gallery-thumbnail { + width: 40px; + height: 40px; + -webkit-background-size: cover; + background-size: cover; + background-position: 50% 50%; + float: right; + margin-bottom: 10px; } + .elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)) { + margin-left: 10px; } + +.elementor-control-type-gallery .elementor-control-gallery-add { + width: 100%; + height: 30px; + color: #fff; + background-color: #a4afb7; + margin-top: 10px; + text-transform: uppercase; } + +.elementor-control-type-gallery .elementor-control-gallery-clear { + color: #b01b1b; + cursor: pointer; } + +.elementor-control-type-hidden { + display: none !important; } + +.elementor-control-type-icon .select2-selection__rendered .fa { + margin-right: 3px; } + +.elementor-control-type-image_dimensions .elementor-control-field-description { + margin: 0 0 15px; + line-height: 1.4; } + +.elementor-control-type-image_dimensions .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-field { + width: 65px; + float: right; } + .elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus + .elementor-image-dimensions-field-description { + color: #a4afb7; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-separator { + width: 20px; + text-align: center; + float: right; + padding-top: 4px; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description { + display: block; + text-transform: uppercase; + margin-top: 5px; + color: #d5dadf; + font-size: 9px; + text-align: center; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button { + float: left; + height: 27px; + width: 65px; } + +.elementor-control-type-media .elementor-control-input-wrapper { + padding: 7px; + border: 1px solid; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; } + .elementor-control-type-media .elementor-control-input-wrapper:not(:hover) { + border-color: #d5dadf; } + .elementor-control-type-media .elementor-control-input-wrapper:not(:hover) .elementor-control-media-upload-button { + background-color: #d5dadf; } + .elementor-control-type-media .elementor-control-input-wrapper:hover { + border-color: #a4afb7; } + .elementor-control-type-media .elementor-control-input-wrapper:hover .elementor-control-media-upload-button { + background-color: #a4afb7; } + +.elementor-control-type-media .elementor-control-media { + cursor: pointer; } + .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area { + display: none; } + .elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button { + display: none; } + +.elementor-control-type-media .fa-plus-circle { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + color: #fff; + font-size: 20px; } + +.elementor-control-type-media .elementor-control-media-area { + background-image: -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + background-image: -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + background-image: linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + -webkit-background-size: 16px 16px; + background-size: 16px 16px; + background-position: 0 0, 8px 8px; + background-color: #f6f6f6; + overflow: hidden; } + .elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete { + -webkit-box-shadow: none; + box-shadow: none; + bottom: -30px; } + .elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image { + opacity: .9; } + .elementor-control-type-media .elementor-control-media-area i { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + color: rgba(255, 255, 255, 0.7); + font-size: 21px; } + +.elementor-control-type-media .elementor-control-media-delete { + position: absolute; + bottom: 0; + left: 0; + right: 0; + text-align: center; + padding: 9.5px; + font-size: 11px; + color: #fff; + background-color: #a4afb7; + text-transform: uppercase; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + -webkit-box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); } + +.elementor-control-type-media .elementor-control-media-image { + height: 100%; + -webkit-background-size: cover; + background-size: cover; + background-position: center; } + +.elementor-control-type-number .elementor-control-input-wrapper { + max-width: 80px; } + +.elementor-control-type-order .elementor-control-oreder-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +.elementor-control-type-order input { + display: none; } + .elementor-control-type-order input:checked + .elementor-control-order-label { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.elementor-control-type-order select { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-control-type-order select:not(:focus) ~ .elementor-control-order-label { + border-color: #d5dadf; } + .elementor-control-type-order select:focus ~ .elementor-control-order-label { + border-color: #a4afb7; } + +.elementor-control-type-order .elementor-control-order-label { + position: relative; + padding: 0; + width: 40px; + border: 1px solid; + font-size: 10px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin-left: -3px; + background-color: #fff; + cursor: pointer; } + .elementor-control-type-order .elementor-control-order-label i { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + +.elementor-control-type-popover_toggle input { + display: none; } + +.elementor-control-type-popover_toggle label { + cursor: pointer; } + +.elementor-control-type-popover_toggle .elementor-control-input-wrapper { + direction: ltr; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked + .elementor-control-popover-toggle-toggle-label { + color: #71d7f7; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked) ~ .elementor-control-popover-toggle-reset-label { + display: none; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label { + color: #c2cbd2; + padding-left: 5px; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label { + width: 50px; + height: 27px; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; } + +.elementor-control-type-repeater, +.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab) { + padding-right: 10px; + padding-left: 10px; + padding-bottom: 15px; } + +.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove { + display: none; } + +.elementor-control-type-repeater .elementor-repeater-fields { + margin: 10px 0; } + +.elementor-control-type-repeater .elementor-repeater-row-controls { + border: 1px solid #d5dadf; + border-top-width: 0; + padding-top: 15px; } + .elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable) { + display: none; } + .elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active { + -webkit-transform: translateY(0); + transform: translateY(0); + border-width: 0; } + +.elementor-control-type-repeater .elementor-repeater-row-tools { + display: table; + table-layout: fixed; + width: 100%; + color: #556068; + background-color: #d5dadf; + height: 40px; + border-spacing: 1px; + -webkit-transition: all .5s; + -o-transition: all .5s; + transition: all .5s; } + .elementor-control-type-repeater .elementor-repeater-row-tools:hover { + background-color: #a4afb7; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div { + display: table-cell; + text-align: center; + vertical-align: middle; + cursor: pointer; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div:not(.elementor-repeater-row-handle-sortable) { + background-color: #fff; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div:hover { + opacity: .95; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title { + text-align: right; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa { + margin-left: 5px; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool { + width: 40px; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable { + cursor: move; + width: 10px; + color: #fff; } + +.elementor-control-type-repeater .elementor-button-wrapper { + text-align: center; + padding: 10px; } + +.elementor-control-type-section { + margin-top: 10px; + padding: 0; } + .elementor-control-type-section.elementor-open { + padding-bottom: 15px; } + .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before { + display: none; } + +.elementor-control-type-slider--multiple { + margin-bottom: 14px; } + .elementor-control-type-slider--multiple .elementor-slider { + margin-top: 12px; + width: 98%; } + +.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle { + -webkit-border-radius: 0; + border-radius: 0; + width: 10px; + -webkit-transform: translateY(calc(50% - 14px)) translateX(-4px); + transform: translateY(calc(50% - 14px)) translateX(-4px); } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle:after { + content: ''; + position: absolute; + top: 2px; + height: 12px; + width: 11px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + background-color: #fff; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after { + left: 5px; + -webkit-box-shadow: 2px -2px 3px 0px rgba(0, 0, 0, 0.1); + box-shadow: 2px -2px 3px 0px rgba(0, 0, 0, 0.1); } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-upper:after { + right: 5px; + -webkit-box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); + box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); } + +.elementor-control-type-slider:not(.elementor-control-type-slider--multiple) .elementor-slider { + display: inline-block; + width: 70%; } + +.elementor-slider { + margin: 10px auto; + height: 4px; + background-color: #d5dadf; + -webkit-border-radius: 5px; + border-radius: 5px; + position: relative; + cursor: pointer; } + .elementor-slider-input { + width: 30%; + float: left; } + .elementor-slider-input input { + max-width: 80%; + float: left; + padding: 5px 5px; } + .elementor-slider__extra { + position: relative; } + .elementor-slider__labels { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-slider__label { + font-size: 9px; + color: #c2cbd2; } + .elementor-slider__scales { + position: absolute; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: space-evenly; + -webkit-justify-content: space-evenly; + -ms-flex-pack: space-evenly; + justify-content: space-evenly; + width: 100%; + margin-top: 4px; } + .elementor-slider__scale { + width: 1px; + height: 21px; + background-color: #a4afb7; } + .elementor-slider .noUi-handle { + height: 16px; + width: 16px; + background-color: #fff; + left: 0; + -webkit-transform: translateY(calc(50% - 14px)) translateX(-8px); + transform: translateY(calc(50% - 14px)) translateX(-8px); + position: absolute; + -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + -webkit-border-radius: 50%; + border-radius: 50%; } + .elementor-slider .noUi-connects { + position: absolute; + width: 100%; + height: 5px; } + .elementor-slider .noUi-connect { + position: absolute; + z-index: 0; + top: 0; + left: 0; + height: 100%; + width: 100%; + will-change: transform; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + background-color: #a4afb7; } + .elementor-slider .noUi-tooltip { + position: absolute; + top: calc(100% + 5px); + left: calc(50% - 4px); + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + font-size: 10px; } + +.elementor-control-type-structure .elementor-control-structure-preset { + border: 1px solid #e6e9ec; + padding: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) { + display: inline-block; + cursor: pointer; + height: 50px; } + .elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg { + height: 100%; } + .elementor-control-type-structure .elementor-control-structure-preset path { + fill: #e6e9ec; } + +.elementor-control-type-structure .elementor-control-structure-current-preset { + margin-top: 15px; } + .elementor-control-type-structure .elementor-control-structure-current-preset svg { + display: block; + width: 100%; } + +.elementor-control-type-structure .elementor-control-structure-reset { + padding: 10px 0 0 2px; + font-size: 11px; + cursor: pointer; + color: #a4afb7; } + .elementor-control-type-structure .elementor-control-structure-reset i { + margin-left: 8px; } + +.elementor-control-type-structure .elementor-control-structure-title, .elementor-control-type-structure .elementor-control-structure-more-presets-title { + color: #495157; + font-weight: bold; + padding: 13.5px 20px; + position: relative; } + .elementor-control-type-structure .elementor-control-structure-title:before, .elementor-control-type-structure .elementor-control-structure-title:after, .elementor-control-type-structure .elementor-control-structure-more-presets-title:before, .elementor-control-type-structure .elementor-control-structure-more-presets-title:after { + content: ''; + position: absolute; + left: 0; + right: 0; } + .elementor-control-type-structure .elementor-control-structure-title:before, .elementor-control-type-structure .elementor-control-structure-more-presets-title:before { + top: 0; + background-color: #e6e9ec; + -webkit-transform: translateY(-100%); + transform: translateY(-100%); } + .elementor-control-type-structure .elementor-control-structure-title:after, .elementor-control-type-structure .elementor-control-structure-more-presets-title:after { + bottom: 0; + height: 1px; + background-color: #e6e9ec; } + +.elementor-control-type-structure .elementor-control-structure-title { + margin: 10px -20px 0; } + .elementor-control-type-structure .elementor-control-structure-title:before { + height: 10px; + -webkit-box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); + box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); } + +.elementor-control-type-structure .elementor-control-structure-more-presets-title { + margin: 15px -20px 0; } + .elementor-control-type-structure .elementor-control-structure-more-presets-title:before { + height: 3px; } + +.elementor-control-type-structure .elementor-control-structure-more-presets { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-control-type-structure .elementor-control-structure-more-presets input { + display: none; } + .elementor-control-type-structure .elementor-control-structure-more-presets input:checked + .elementor-control-structure-preset { + border: 1px solid #a4afb7; } + .elementor-control-type-structure .elementor-control-structure-more-presets input:checked + .elementor-control-structure-preset path { + fill: #a4afb7; } + +.elementor-control-type-structure .elementor-control-structure-preset-wrapper { + margin-top: 15px; } + +.elementor-control-type-structure .elementor-control-structure-preset-title { + text-align: center; + padding-top: 5px; + font-style: italic; + font-size: 11px; + color: #a4afb7; } + +.elementor-control-type-switcher.elementor-label-inline > .elementor-control-content .elementor-control-field .elementor-control-title { + width: 70%; } + +.elementor-control-type-switcher.elementor-label-inline > .elementor-control-content .elementor-control-field .elementor-control-input-wrapper { + width: 30%; } + +.elementor-control-type-switcher .elementor-control-input-wrapper { + text-align: left; } + +.elementor-control-type-switcher .elementor-switch { + position: relative; + display: inline-block; + vertical-align: top; + width: 49px; + height: 20px; + background-color: white; + -webkit-border-radius: 18px; + border-radius: 18px; + cursor: pointer; } + +.elementor-control-type-switcher .elementor-switch-input { + display: none; } + +.elementor-control-type-switcher .elementor-switch-label { + position: relative; + display: block; + height: inherit; + font-size: 7px; + text-transform: uppercase; + background: #eceeef; + -webkit-border-radius: inherit; + border-radius: inherit; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15); + -webkit-transition: 0.15s ease-out; + -o-transition: 0.15s ease-out; + transition: 0.15s ease-out; + -webkit-transition-property: opacity, background; + -o-transition-property: opacity, background; + transition-property: opacity, background; } + +.elementor-control-type-switcher .elementor-switch-label:before, .elementor-control-type-switcher .elementor-switch-label:after { + position: absolute; + top: 0; + width: 50%; + text-align: center; + line-height: 20px; + -webkit-transition: inherit; + -o-transition: inherit; + transition: inherit; } + +.elementor-control-type-switcher .elementor-switch-label:before { + content: attr(data-off); + right: 3px; + color: #a4afb7; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); } + +.elementor-control-type-switcher .elementor-switch-label:after { + content: attr(data-on); + left: 3px; + color: white; + text-shadow: 0 1px rgba(0, 0, 0, 0.2); + opacity: 0; } + +.elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label { + background: #71d7f7; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), inset 0 0 3px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), inset 0 0 3px rgba(0, 0, 0, 0.2); } + .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label:before { + opacity: 0; } + .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label:after { + opacity: 1; } + +.elementor-control-type-switcher .elementor-switch-handle { + position: absolute; + top: 1px; + left: 1px; + width: 18px; + height: 18px; + background: white; + -webkit-border-radius: 10px; + border-radius: 10px; + -webkit-transition: left 0.15s ease-out; + -o-transition: left 0.15s ease-out; + transition: left 0.15s ease-out; } + +.elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-handle { + left: 30px; + -webkit-box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.2); + box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.2); } + +.elementor-control-type-tabs { + font-size: 0.8em; + color: #a4afb7; + text-transform: uppercase; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +.elementor-control-type-tab { + text-align: center; + width: 100%; + padding: 0; + line-height: 27px; + border-top: 1px solid #a4afb7; + border-bottom: 1px solid #a4afb7; + border-left: 1px solid #a4afb7; + cursor: pointer; } + .elementor-control-type-tab:first-child { + border-right: 1px solid #a4afb7; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; } + .elementor-control-type-tab:last-child { + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; } + .elementor-control-type-tab.elementor-tab-active { + background-color: #a4afb7; + color: #ffffff; } + +.elementor-tab-close { + display: none !important; } + +.elementor-control-type-text_shadow .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-text_shadow .elementor-shadow-slider { + margin-top: 10px; } + +.elementor-control-type-textarea textarea { + display: block; } + +.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more { + display: none; } + +.elementor-control-type-url .elementor-control-url-external-show .elementor-input, +.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style { + padding-right: 46px; + height: 26px; } + +.elementor-control-type-url .elementor-control-input-wrapper { + position: relative; } + +.elementor-control-type-url .elementor-control-url-more { + position: absolute; + top: 0; + right: 0; + height: 26px; + width: 40px; + border-left: 1px solid #d5dadf; + cursor: pointer; + font-size: 10px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + .elementor-control-type-url .elementor-control-url-more i { + font-size: 13px; } + .elementor-control-type-url .elementor-control-url-more-input { + display: none; } + .elementor-control-type-url .elementor-control-url-more-input:not(:checked) + .elementor-control-url-more-options { + display: none; } + .elementor-control-type-url .elementor-control-url-more-options { + padding-top: 10px; } + +.elementor-control-type-url .elementor-control-url-option { + padding: 5px; + font-size: 12px; } + +.elementor-control-type-url .elementor-control-url-autocomplete-spinner { + display: none; + position: absolute; + width: 12px; + height: 12px; + top: 7px; + left: 13px; + z-index: 1; + background: #fff; } + +.elementor-control-type-url .elementor-input { + direction: ltr; } + .elementor-control-type-url .elementor-input:not(:focus) + .elementor-control-url-more { + border-color: #d5dadf; } + .elementor-control-type-url .elementor-input:focus + .elementor-control-url-more { + border-color: #a4afb7; } + +.elementor-autocomplete-menu { + position: absolute; + background: #fff; + color: #495157; + border: 1px solid #a4afb7; + margin: 0; + list-style: none; + padding: 4px 0; + height: auto; + width: 100%; + min-width: 260px; + max-width: 300px; + max-height: 200px; + overflow-y: auto; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; + cursor: default; + z-index: 1; } + .elementor-autocomplete-menu .ui-menu-item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-align-self: baseline; + -ms-flex-item-align: baseline; + align-self: baseline; + padding: 5px 8px; + font-size: 12px; + width: 100%; + line-height: 1.2; + cursor: pointer; } + .elementor-autocomplete-menu .ui-menu-item.ui-state-hover, .elementor-autocomplete-menu .ui-menu-item.ui-state-active, .elementor-autocomplete-menu .ui-menu-item.ui-state-focus { + background: #e6e9ec; } + .elementor-autocomplete-menu .elementor-autocomplete-item-info { + font-size: 10px; + padding-top: 2px; } + +.elementor-control-type-wp_widget .widget-inside { + display: block; } + +.elementor-control-type-wp_widget .quicktags-toolbar input { + width: auto; } + +.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container { + margin-top: 10px; } + +.elementor-control-type-wysiwyg * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.elementor-control-type-wysiwyg .wp-editor-container { + border: 1px solid #e6e9ec; + -webkit-border-radius: 3px; + border-radius: 3px; } + +.elementor-control-type-wysiwyg #insert-media-button { + height: initial; + line-height: 24px; + font-size: 10px; + background-color: #e6e9ec; } + +.elementor-control-type-wysiwyg .ed_button { + height: 22px; + width: initial; } + +.elementor-control-type-wysiwyg .wp-media-buttons-icon { + height: 14px; + margin: 0; } + .elementor-control-type-wysiwyg .wp-media-buttons-icon:before { + font-size: 14px; } + +.elementor-control-type-wysiwyg .wp-switch-editor { + border: none; + color: #6d7882; + font-size: 10px; + padding: 3px 9px 4px; + -webkit-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; } + +.elementor-control-type-wysiwyg .html-active .switch-tmce { + background-color: transparent; } + +.elementor-control-type-wysiwyg .html-active .switch-html { + background-color: #e6e9ec; } + +.elementor-control-type-wysiwyg .tmce-active .switch-tmce { + background-color: #e6e9ec; } + +.elementor-control-type-wysiwyg .tmce-active .switch-html { + background-color: transparent; } + +.elementor-control-type-wysiwyg .mce-toolbar-grp, .elementor-control-type-wysiwyg .quicktags-toolbar { + background-color: #e6e9ec; } + +.elementor-control-type-wysiwyg .mce-toolbar-grp > div { + padding: 0 3px; } + +.elementor-control-type-wysiwyg .elementor-wp-editor { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.elementor-control-type-wysiwyg .mce-ico { + color: #6d7882; + font-size: 16px; } + +.elementor-control-type-wysiwyg .mce-btn { + margin-right: 0; + margin-left: 0; } + .elementor-control-type-wysiwyg .mce-btn:hover, .elementor-control-type-wysiwyg .mce-btn:active, .elementor-control-type-wysiwyg .mce-btn.mce-active { + border-color: #d5dadf; } + +.elementor-control-type-wysiwyg .mce-path { + padding: 5px 10px; } + +.elementor-control-type-wysiwyg .mce-path-item { + font-size: 12px; + color: #6d7882; } + +.wp-picker-container.wp-picker-active { + position: absolute; + z-index: 10000; + top: -9px; + left: 7px; + background-color: #fff; + border: solid #fff; + border-width: 0 10px 0 5px; + padding-top: 10px; + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); } + .wp-picker-container.wp-picker-active .wp-color-result { + float: right; } + .wp-picker-container.wp-picker-active .wp-picker-input-wrap { + padding-left: 10px; + float: left; } + +.wp-picker-container * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.wp-picker-container .color-alpha { + width: calc( 100% - 2px * 2); + height: calc( 100% - 2px * 2); + margin: 2px; + position: absolute; + top: 0; + left: 0; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.wp-picker-container .iris-picker { + border: none; } + .wp-picker-container .iris-picker .iris-picker-inner { + width: 100%; } + +.wp-picker-container:not(.wp-picker-active) { + float: left; } + .wp-picker-container:not(.wp-picker-active) .wp-color-result { + margin: 0; } + +[class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active, +[class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active { + padding-top: 9px; } + +.wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 3px; } + +.wp-picker-container input[type="text"].wp-color-picker { + float: left; + width: 120px; + max-width: 136px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + font-size: 11px; + line-height: 12px; + padding: 7px 3px; } + +.wp-color-result { + margin: 0; + width: 48px; + height: 25px; + -webkit-transition: border .5s; + -o-transition: border .5s; + transition: border .5s; + padding: 0; + background-color: #fafafa; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; } + .wp-color-result, .wp-color-result:focus { + -webkit-box-shadow: inset 0 0 0 3px white; + box-shadow: inset 0 0 0 3px white; } + .wp-color-result:after, .wp-color-result.wp-picker-open:after { + content: none; } + .wp-color-result:hover { + border: 1px solid #a4afb7; } + .wp-color-result:focus, .wp-color-result:active { + outline: 0; } + +.wp-picker-default.button, +.wp-picker-clear.button { + height: 26px; + width: 48px; + padding: 0; + background-color: #d5dadf; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; + margin: 0; } + +.wp-picker-holder * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.wp-picker-holder .iris-square-value { + -webkit-transition: none; + -o-transition: none; + transition: none; } + +.wp-picker-open ~ .wp-picker-holder { + clear: both; + margin-bottom: 15px; } + +.pen { + position: relative; + outline: none; } + .pen:not([data-elementor-inline-editing-toolbar="advanced"]) { + white-space: pre-wrap; } + .pen-menu { + -webkit-box-shadow: 1px 2px 3px -2px #222; + box-shadow: 1px 2px 3px -2px #222; + background-color: #6d7882; + position: fixed; + overflow: hidden; + -webkit-border-radius: 3px; + border-radius: 3px; + z-index: 9999; } + .pen-menu:after { + top: 100%; + content: ''; + position: absolute; + border: 6px solid transparent; + border-top-color: #6d7882; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + .pen-menu-below:after { + top: 0; + -webkit-transform: translateX(-50%) translateY(-100%) rotate(180deg); + transform: translateX(-50%) translateY(-100%) rotate(180deg); } + .pen-icon { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + height: 35px; + padding: 0 10px; + font-size: 21px; + color: #d5dadf; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .pen-icon:hover { + background: #556068; } + .pen-icon[data-group], .pen-icon[data-action="closeGroup"] { + display: none; } + .pen-icon[data-action="close"]:before { + content: ''; + position: absolute; + right: 0; + height: 60%; + width: 1px; + background-color: #556068; } + .pen-icon.active { + background-color: #556068; + -webkit-box-shadow: inset 2px 2px 4px #556068; + box-shadow: inset 2px 2px 4px #556068; } + .pen-group-icon:after { + font-family: FontAwesome; + font-size: 12px; + content: '\f0d7'; + padding-left: 4px; + color: #71d7f7; } + .pen-input-wrapper { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .pen-input-wrapper .pen-url-input { + font-size: 12px; + line-height: 1.5; + padding: 0; + padding-right: 10px; + padding-left: 10px; + width: 250px; + direction: ltr; } + .pen-input-wrapper .pen-url-input, .pen-input-wrapper .pen-url-input:focus { + background-color: transparent; + border: none; + outline: none; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; } + .pen-input-wrapper .pen-url-input::-webkit-input-placeholder { + color: #d5dadf; } + .pen-input-wrapper .pen-url-input::-ms-input-placeholder { + color: #d5dadf; } + .pen-input-wrapper .pen-url-input::placeholder { + color: #d5dadf; } + .pen-input-label { + margin: 0; + margin-left: -1px; } + .pen-placeholder:before { + content: attr(data-pen-placeholder); + position: absolute; + font-weight: normal; + color: #757575; + opacity: 0.6; } + .pen-external-url-checkbox { + display: none; } + .pen-external-url-checkbox:checked + i { + color: #fff; } + +.elementor-inline-editing i:not([class]) { + font-style: italic; } + +.elementor-inline-editing b { + font-weight: bold; } + +.elementor-inline-editing u { + text-decoration: underline; } + +.elementor-tags-list { + display: none; + position: absolute; + width: 260px; + max-height: 300px; + overflow: auto; + padding-bottom: 5px; + background-color: #fff; + border: 1px solid #a4afb7; + -webkit-border-radius: 3px; + border-radius: 3px; + z-index: 1; } + .elementor-tags-list__group-title { + color: #495157; + font-weight: bold; + font-size: 12px; + padding: 10px 15px; } + .elementor-tags-list__item { + font-size: 10px; + padding: 6px 15px; + cursor: pointer; } + .elementor-tags-list__item:before { + content: '>'; + font-size: 8px; + padding-left: 5px; } + .elementor-tags-list__item:hover { + background-color: #e6e9ec; } + +.elementor-dynamic-cover { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + width: 100%; + height: 27px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .elementor-dynamic-cover__settings i { + color: #d5dadf; } + .elementor-dynamic-cover__settings i.fa-wrench { + cursor: pointer; } + .elementor-dynamic-cover__title { + padding: 0 8px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; } + .elementor-dynamic-cover__remove { + color: #c2cbd2; + cursor: pointer; } + .elementor-control-type-wysiwyg .elementor-dynamic-cover { + margin-top: 10px; } + +.elementor-tag-settings-popup { + position: absolute; + width: 260px; + background-color: #e6e9ec; + -webkit-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); + box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); + z-index: 1; } + .elementor-tag-settings-popup:before { + content: ''; + position: absolute; + top: -20px; + right: 5px; + border: 10px solid transparent; + border-bottom-color: #fff; } + .elementor-tag-settings-popup .elementor-control-type-section:first-child { + margin: 0; } + +.elementor-tag-controls-stack-empty { + background-color: #fff; + padding: 10px; + font-size: 13px; + text-align: center; } + +.elementor-control-dynamic.elementor-label-inline .elementor-control-field { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + +.elementor-control-dynamic-switcher { + cursor: pointer; + font-size: 9px; } + .elementor-control-dynamic-switcher i { + padding-right: 5px; } + .elementor-control-dynamic-switcher-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-dynamic-switcher-wrapper { + width: 100%; + padding-bottom: 10px; } + +.elementor-control-dynamic-value .elementor-control-tag-area { + display: none; } + +.elementor-control-dynamic-value .elementor-control-dynamic-switcher { + color: #71d7f7; } + +@-webkit-keyframes placeholder-section { + 0% { + height: 0; + opacity: 0; } + 100% { + height: 40px; + opacity: .9; } } + +@keyframes placeholder-section { + 0% { + height: 0; + opacity: 0; } + 100% { + height: 40px; + opacity: .9; } } + +@-webkit-keyframes placeholder-column { + 0% { + width: 0; + opacity: 0; } + 100% { + width: 10px; + opacity: .9; } } + +@keyframes placeholder-column { + 0% { + width: 0; + opacity: 0; } + 100% { + width: 10px; + opacity: .9; } } + +@-webkit-keyframes placeholder-widget { + 0% { + height: 0; + opacity: 0; } + 100% { + height: 10px; + opacity: .9; } } + +@keyframes placeholder-widget { + 0% { + height: 0; + opacity: 0; } + 100% { + height: 10px; + opacity: .9; } } + +@-webkit-keyframes section-outline { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } + +@keyframes section-outline { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } + +body.elementor-editor-active .elementor.elementor-edit-mode.layout-section .entry-content { + overflow: visible; } + +body.elementor-editor-active .elementor.elementor-edit-mode .article { + overflow: visible; } + +body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-overlay .elementor-editor-element-settings { + clear: unset; } + +body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section { + overflow: visible; } + +#elementor .animated { + -webkit-animation-fill-mode: none !important; + animation-fill-mode: none !important; } + +#elementor ul.elementor-editor-element-settings { + word-break: normal; + padding: 0; } + +#elementor .gallery { + opacity: 1; } + +html.elementor-html { + margin-top: 0 !important; } + +#elementor { + position: relative; } + +.elementor-editor-active .elementor.elementor-edit-area-active .elementor-top-section > .elementor-container > .elementor-row { + min-height: 40px; } + +.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section:first-child { + margin-top: 15px; } + +.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section > .elementor-container > .elementor-row { + min-height: 40px; } + +.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap { + min-height: 30px; } + @media (min-width: 768px) { + .elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap { + margin: 10px; } } + +.elementor-editor-active .elementor-column { + min-width: 25px; } + +.elementor-editor-active .elementor-widget.elementor-loading { + opacity: .3; } + +.elementor-editor-active .elementor-widget.elementor-element-editable, .elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover { + -webkit-box-shadow: 0 0 0 1px #71d7f7; + box-shadow: 0 0 0 1px #71d7f7; } + +.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings { + display: none; } + +.elementor-editor-active .elementor-widget.ui-draggable-dragging { + pointer-events: none; } + +.elementor-editor-active .elementor-editor-element-setting { + cursor: pointer; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 0; + margin: 0; + font-size: 11px; + color: #fff; + width: 25px; + -webkit-transition: margin .3s, width .3s, font .3s; + -o-transition: margin .3s, width .3s, font .3s; + transition: margin .3s, width .3s, font .3s; } + +.elementor-editor-active .handle { + display: none; } + +.elementor-editor-active .elementor-inline-editing { + min-height: 15px; } + +.elementor-editor-active .elementor-edit-hidden { + display: none; } + +.elementor-element > .elementor-element-overlay { + position: absolute; + top: 0; + left: 0; + letter-spacing: 0; + z-index: 9998; + pointer-events: none; } + +.elementor-element-empty .elementor-sortable-placeholder { + display: none; } + +.elementor-element.elementor-widget-empty { + background-color: rgba(213, 218, 223, 0.8); } + .elementor-element.elementor-widget-empty .elementor-widget-empty-icon { + color: #c2cbd2; + font-size: 22px; + display: block; + text-align: center; + padding: 10px 0; } + +.elementor-element:not(:hover):not(.elementor-element-editable) > .elementor-element-overlay .elementor-editor-element-settings { + display: none; } + +.elementor-element--toggle-edit-tools > .elementor-element-overlay .elementor-editor-element-edit:not(.elementor-active) ~ * { + width: 0; + font-size: 0; } + +.elementor-element[data-side="top"]:before, .elementor-element[data-side="bottom"] + .elementor-element:before { + content: ''; + background-color: #71d7f7; + -webkit-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + opacity: .9; + height: 10px; + -webkit-animation: placeholder-widget 500ms; + animation: placeholder-widget 500ms; + display: block; } + +.elementor-element[data-side="bottom"]:last-child:after { + content: ''; + background-color: #71d7f7; + -webkit-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + opacity: .9; + height: 10px; + -webkit-animation: placeholder-widget 500ms; + animation: placeholder-widget 500ms; + display: block; } + +.elementor-element.elementor-absolute, .elementor-element.elementor-fixed { + cursor: -webkit-grab; + cursor: grab; } + .elementor-element.elementor-absolute:active, .elementor-element.elementor-fixed:active { + cursor: -webkit-grabbing; + cursor: grabbing; } + .elementor-element.elementor-absolute .eicon-edit:before, .elementor-element.elementor-fixed .eicon-edit:before { + content: '\e1040'; } + +.elementor-section > .elementor-element-overlay { + right: 0; + bottom: 0; } + .elementor-section > .elementor-element-overlay:after { + position: absolute; + left: 2px; + right: 2px; + top: 2px; + bottom: 2px; + outline: 2px solid #71d7f7; + -webkit-animation: section-outline .75s; + animation: section-outline .75s; } + +.elementor-section:hover > .elementor-element-overlay:after, .elementor-section.elementor-element-editable > .elementor-element-overlay:after { + content: ''; } + +.elementor-section-filled .elementor-sortable-placeholder.elementor-column { + display: none; } + +.elementor-section-filled .elementor-row.elementor-draggable-over { + border: 1px solid #f00; } + +.elementor-column > .elementor-element-overlay { + right: 0; + bottom: 0; } + .elementor-column > .elementor-element-overlay:after { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + outline: 1px dashed #6d7882; } + +.elementor-column:hover > .elementor-element-overlay, .elementor-column.elementor-element-editable > .elementor-element-overlay { + border: 1px solid #ffffff; } + .elementor-column:hover > .elementor-element-overlay:after, .elementor-column.elementor-element-editable > .elementor-element-overlay:after { + content: ''; } + +.elementor-column.elementor-dragging-on-child > .elementor-element-overlay { + border: 1px solid #71d7f7; } + .elementor-column.elementor-dragging-on-child > .elementor-element-overlay:after { + display: none; } + +.elementor-column > .ui-resizable-e, .elementor-column > .ui-resizable-w { + cursor: col-resize; + width: 7px; + position: absolute; + left: -5px; + top: 0; + height: 100%; } + +.elementor-column:last-of-type > .ui-resizable-e, .elementor-column:last-of-type > .ui-resizable-w { + display: none !important; } + +@media (max-width: 1024px) { + .elementor-column > .ui-resizable-e, .elementor-column > .ui-resizable-w { + display: none !important; } } + +.elementor-editor-element-settings { + position: absolute; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: 26px; + list-style: none; + margin: 0; + padding: 0; + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: normal; + font-style: normal; + line-height: 1; + z-index: 1; + pointer-events: all; } + +.elementor-editor-element-setting.elementor-editor-element-save { + display: none; } + +@media (min-width: 1025px) { + .elementor-editor-element-edit { + cursor: move; } } + +.elementor-editor-section-settings { + height: 24px; + top: 1px; + right: 50%; + -webkit-transform: translateX(50%) translateY(-100%); + transform: translateX(50%) translateY(-100%); + background-color: #71d7f7; + -webkit-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; + -webkit-box-shadow: 0px -2px 8px rgba(0, 0, 0, 0.05); + box-shadow: 0px -2px 8px rgba(0, 0, 0, 0.05); } + .elementor-editor-section-settings i.eicon-handle { + font-size: 16px; } + .elementor-editor-section-settings .elementor-editor-element-setting:hover { + background-color: #10bcf2; } + .elementor-editor-section-settings .elementor-editor-element-setting:first-child { + -webkit-border-radius: 0 5px 0 0; + border-radius: 0 5px 0 0; } + .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before { + content: ''; + position: absolute; + border: solid transparent; + top: 2px; + border-left-color: #71d7f7; + border-width: 22px 0 0 12px; + left: calc(100% - 1px); } + .elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before { + border-left-color: #10bcf2; } + .elementor-editor-section-settings .elementor-editor-element-setting:last-child { + -webkit-border-radius: 5px 0 0 0; + border-radius: 5px 0 0 0; } + .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after { + content: ''; + position: absolute; + border: solid transparent; + top: 2px; + border-right-color: #71d7f7; + border-width: 22px 12px 0 0; + right: calc(100% - 1px); } + .elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after { + border-right-color: #10bcf2; } + +.elementor-section--handles-inside .elementor-editor-section-settings { + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + -webkit-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; } + .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child { + -webkit-border-radius: 0 0 5px 0; + border-radius: 0 0 5px 0; } + .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before { + top: 0; + border-width: 0 0 22px 12px; } + .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child { + -webkit-border-radius: 0 0 0 5px; + border-radius: 0 0 0 5px; } + .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after { + top: 0; + border-width: 0 12px 22px 0; } + +.elementor-editor-column-settings { + top: -1px; + right: -1px; + -webkit-border-radius: 0 0 0 3px; + border-radius: 0 0 0 3px; + overflow: hidden; } + .elementor-editor-column-settings .elementor-editor-element-setting { + background-color: #495157; } + .elementor-editor-column-settings .elementor-editor-element-setting:not(:hover) { + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d7882), to(#556068)); + background-image: -webkit-linear-gradient(top, #6d7882, #556068); + background-image: -o-linear-gradient(top, #6d7882, #556068); + background-image: linear-gradient(to bottom, #6d7882, #556068); } + +.elementor-editor-widget-settings { + z-index: 2; + top: -1px; + left: -1px; + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + -webkit-border-radius: 0 0 3px 0; + border-radius: 0 0 3px 0; + overflow: hidden; } + .elementor-editor-widget-settings .elementor-editor-element-setting { + background-color: #10bcf2; } + .elementor-editor-widget-settings .elementor-editor-element-setting:not(:hover) { + background-image: -webkit-gradient(linear, left bottom, left top, from(#41c9f4), to(#71d7f7)); + background-image: -webkit-linear-gradient(bottom, #41c9f4, #71d7f7); + background-image: -o-linear-gradient(bottom, #41c9f4, #71d7f7); + background-image: linear-gradient(to top, #41c9f4, #71d7f7); } + +.elementor-empty-view { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1; } + +.elementor-first-add { + text-align: center; + border: 1px dashed #d5dadf; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: 100%; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + .elementor-first-add .elementor-icon { + font-size: 19px; + color: #a4afb7; + cursor: pointer; } + +.elementor-sortable-helper { + position: absolute; + -webkit-border-radius: 3px; + border-radius: 3px; + background-color: #fff; + text-align: center; + color: #556068; + -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + cursor: move; } + .elementor-sortable-helper .icon { + font-size: 28px; + padding-top: 15px; + line-height: 1; } + .elementor-sortable-helper .elementor-element-title-wrapper { + display: table; + width: 100%; } + .elementor-sortable-helper .title { + font-size: 11px; + font-family: Arial, Helvetica, sans-serif; + font-weight: normal; + font-style: normal; + display: table-cell; + vertical-align: middle; + height: 40px; } + +.elementor-editor-content-only .elementor-first-add { + display: none; } + +.elementor-editor-content-only .elementor-section > .elementor-element-overlay { + display: none; } + .elementor-editor-content-only .elementor-section > .elementor-element-overlay:after { + display: none; } + +.elementor-editor-content-only .elementor-section:hover > .elementor-element-overlay:after, .elementor-editor-content-only .elementor-section.elementor-element-editable > .elementor-element-overlay:after { + display: none; } + +.elementor-editor-content-only .elementor-column > .elementor-element-overlay { + display: none; } + .elementor-editor-content-only .elementor-column > .elementor-element-overlay:after { + display: none; } + +.elementor-editor-content-only .elementor-column:hover > .elementor-element-overlay:after, .elementor-editor-content-only .elementor-column.elementor-element-editable > .elementor-element-overlay:after { + display: none; } + +@media (min-width: 1025px) { + .elementor-editor-content-only .elementor-editor-element-edit { + cursor: pointer; } } + +.elementor-sortable-placeholder:not(.elementor-column-placeholder) { + background-color: #71d7f7; + -webkit-animation-duration: 250ms; + animation-duration: 250ms; + opacity: .9; + width: 100%; + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; } + +.elementor-section-placeholder { + height: 40px; + -webkit-animation-name: placeholder-section; + animation-name: placeholder-section; } + +.elementor-column-placeholder { + position: relative; } + .elementor-column-placeholder:before, .elementor-column-placeholder:after { + content: ''; + position: absolute; + top: 10px; + bottom: 10px; + right: 10px; + left: 10px; } + .elementor-column-placeholder:before { + border: 1px solid #6d7882; } + .elementor-column-placeholder:after { + border: 1px dashed #fff; } + +.elementor-widget-placeholder { + height: 10px; + -webkit-animation-name: placeholder-widget; + animation-name: placeholder-widget; } + +.elementor-draggable-over:not([data-dragged-element="section"]):not([data-dragged-is-inner="true"]) > .elementor-empty-view > .elementor-first-add:after, +.elementor-first-add.elementor-html5dnd-current-element:after { + content: ''; + background-color: #71d7f7; + -webkit-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + opacity: .9; + height: 10px; + -webkit-animation: placeholder-widget 500ms; + animation: placeholder-widget 500ms; + width: 100%; } + +.elementor-draggable-over:not([data-dragged-element="section"]):not([data-dragged-is-inner="true"]) > .elementor-empty-view > .elementor-first-add .elementor-icon, +.elementor-first-add.elementor-html5dnd-current-element .elementor-icon { + display: none; } + +.elementor-draggable-over[data-dragged-element="section"][data-dragged-is-inner="true"] .elementor-inner-column .elementor-sortable-placeholder { + display: none; } + +.elementor-add-section { + max-width: 1160px; + position: relative; } + .elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner { + border: 2px dashed #d5dadf; + background-color: rgba(255, 255, 255, 0.5); } + .elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner { + border: 3px dashed #71d7f7; } + .elementor-add-section[data-view="choose-action"] .elementor-select-preset { + display: none; } + .elementor-add-section[data-view="select-preset"] .elementor-add-new-section { + display: none; } + +.elementor-add-section-inner { + text-align: center; + margin: 20px; + padding: 40px 0; } + +.elementor-add-new-section { + display: inline-block; } + .elementor-add-new-section .elementor-add-section-area-button { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + height: 40px; + width: 40px; + color: #fff; + font-size: 16px; + -webkit-border-radius: 50%; + border-radius: 50%; + -webkit-transition: all .3s; + -o-transition: all .3s; + transition: all .3s; + cursor: pointer; } + .elementor-add-new-section .elementor-add-section-area-button:hover { + opacity: 0.85; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-add-new-section .elementor-add-section-area-button:active { + -webkit-box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.1); + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.1); } + .elementor-add-new-section .elementor-add-section-button { + background-color: #D30C5C; } + .elementor-add-new-section .elementor-add-template-button { + background-color: #6d7882; + margin-right: 5px; } + +.elementor-add-section-drag-title { + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: normal; + font-style: italic; + line-height: 1; + color: #556068; + margin-top: 15px; } + +.elementor-add-section-close { + position: absolute; + right: 40px; + top: 20px; + font-size: 20px; + cursor: pointer; + line-height: 1; + color: #d5dadf; } + .elementor-add-section-close:hover { + color: #6d7882; } + +.elementor-select-preset-title { + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: 500; + font-style: normal; + text-transform: uppercase; + color: #556068; } + +.elementor-select-preset-list { + list-style: none; + padding: 0 25px; + margin: 20px auto 0; + overflow: hidden; + max-width: 700px; } + .elementor-select-preset-list .elementor-preset { + cursor: pointer; + margin: 0; + padding: 10px; + float: right; + max-width: 33.333%; } + .elementor-select-preset-list .elementor-preset:hover path { + fill: #6d7882; } + .elementor-select-preset-list .elementor-preset:not(:hover) path { + fill: #d5dadf; } + .elementor-select-preset-list .elementor-preset svg { + height: 50px; + width: 100%; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +#elementor-add-new-section { + margin: 60px auto; } + #elementor-add-new-section[data-view="choose-action"] .elementor-add-section-close { + display: none; } + +.elementor-add-section-inline { + margin: 10px auto; } + +.elementor-column-percents-tooltip { + position: absolute; + display: none; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + color: #fff; + font-size: 10px; + background-color: #556068; + width: 40px; + padding: 3.5px 0; + text-align: center; + z-index: 1; + line-height: 1; } + .elementor-column-percents-tooltip:after { + content: ''; + position: absolute; + width: 0; + height: 0; + border: 8.5px solid transparent; + top: 0; } + .elementor-column-percents-tooltip[data-side="left"] { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; + right: 15px; } + .elementor-column-percents-tooltip[data-side="left"]:after { + left: 100%; + border-left-color: #556068; + border-right-width: 0; } + .elementor-column-percents-tooltip[data-side="right"] { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + left: 15px; } + .elementor-column-percents-tooltip[data-side="right"]:after { + right: 100%; + border-right-color: #556068; + border-left-width: 0; } + +.elementor-editor-preview .elementor-element-overlay, +.elementor-editor-preview .elementor-empty, +.elementor-editor-preview .elementor-add-section, +.elementor-editor-preview .elementor-element-empty, +.elementor-editor-preview .elementor-widget-empty, +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-edit-hidden, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-edit-hidden, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-edit-hidden { + display: none; } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet { + display: inherit; + overflow: hidden; + background: -webkit-repeating-linear-gradient(325deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px); + background: repeating-linear-gradient(125deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px); + outline: 1px solid rgba(0,0,0,.02); } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section>.elementor-element-overlay, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-section>.elementor-element-overlay, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section>.elementor-element-overlay { + background-color: #d5dadf; + mix-blend-mode: color } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section:before, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-section:before, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section:before { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: hsla(0,0%,100%,.6); + z-index: 9997 } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-inner-section .elementor-container, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-inner-section .elementor-container, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-inner-section .elementor-container { + width: 100% } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-container, +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-wrap, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone>.elementor-widget-container, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone>.elementor-widget-wrap, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-container, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-wrap { + pointer-events: none; + -webkit-filter: opacity(.4) saturate(0); + filter: opacity(.4) saturate(0) } + +#elementor .elementor .elementor-editor-element-settings { + display: none; } +#elementor .elementor .elementor-inline-editing { + pointer-events: none; } + +[data-elementor-type$=miniature] .elementor-preset { + min-width: 33.333%; } + +[data-elementor-type$=miniature] .elementor-preset[data-structure="40"], +[data-elementor-type$=miniature] .elementor-preset[data-structure="50"], +[data-elementor-type$=miniature] .elementor-preset[data-structure="60"], +.elementor-section-tabbed > .elementor-container > .elementor-row > .elementor-column > .ui-resizable-handle { + display: none !important; } \ No newline at end of file diff --git a/modules/creativeelements/views/css/editor-preview-rtl.min.css b/modules/creativeelements/views/css/editor-preview-rtl.min.css new file mode 100644 index 00000000..1a1e5942 --- /dev/null +++ b/modules/creativeelements/views/css/editor-preview-rtl.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.ui-resizable-n{top:-5px}.ui-resizable-e{right:-5px}.ui-resizable-s{bottom:-5px}.ui-resizable-w{left:-5px}.ui-resizable-ne{top:-5px;right:-5px}.ui-resizable-nw{top:-5px;left:-5px}.ui-resizable-se{bottom:-5px;right:-5px}.ui-resizable-sw{bottom:-5px;left:-5px}.ui-resizable-n,.ui-resizable-s{left:0;height:10px;width:100%;cursor:ns-resize}.ui-resizable-e,.ui-resizable-w{top:0;height:100%;width:10px;cursor:ew-resize}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{height:15px;width:15px}.ui-resizable-nw,.ui-resizable-se{cursor:nwse-resize}.ui-resizable-ne,.ui-resizable-sw{cursor:nesw-resize}.ui-resizable-handle{position:absolute}.ui-resizable-resizing{pointer-events:none}.elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel-box-content{padding:20px 20px 10px}.elementor-button{display:inline-block}.elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:right}.elementor-panel-alert a{color:inherit}.elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-control-field-description,.elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:10000;background-color:#fff}.elementor-controls-popover:before{content:'';position:absolute;top:-16px;left:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-controls-popover div.elementor-control:before{content:none}#elementor-panel-get-pro-elements .elementor-nerd-box-message{text-transform:uppercase}.select2-container{width:100%!important}#elementor-controls .pojo-widget-button-collapse{display:none}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control .elementor-control-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.elementor-control .elementor-control-title{font-size:12px;line-height:1;margin-left:5px}.elementor-control .elementor-control-spinner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-control.elementor-control-type-divider{padding:0;background-color:transparent}.elementor-control.elementor-control-type-divider .elementor-control-content{border-width:1px 0 0;border-color:#e6e9ec;border-style:solid;background-color:#fff;height:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{content:'';height:1px;display:block;margin-bottom:15px;background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:'';position:absolute;height:1px;width:100%;top:0;left:0;background-color:#e6e9ec}.elementor-control.elementor-control-separator-after:after{content:'';position:absolute;height:1px;width:100%;bottom:0;left:0;background-color:#e6e9ec}.elementor-control.elementor-control-separator-after+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:#495157;font-size:12px;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-right:5px;padding-left:20px;cursor:pointer}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:'\e955';font-size:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:5px;pointer-events:none}.elementor-control .select2-container{width:100%!important;outline:0}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-container.select2-container--default .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection{outline:0}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before{content:'\f0d7'}.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;margin-right:auto}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s;cursor:pointer}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-start-end .eicon-h-align-left,.elementor-control-start-end .eicon-h-align-right{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-left:5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:not(:first-child){margin-right:5px}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.lang-rtl .elementor-control-align .elementor-choices,.lang-rtl .elementor-control-position .elementor-choices,.lang-rtl .elementor-control-text_align .elementor-choices{direction:ltr}.lang-rtl .elementor-control-align .elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2),.lang-rtl .elementor-control-position .elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2),.lang-rtl .elementor-control-text_align .elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.lang-rtl .elementor-control-align .elementor-choices input:not(:checked)+.elementor-choices-label:last-child,.lang-rtl .elementor-control-position .elementor-choices input:not(:checked)+.elementor-choices-label:last-child,.lang-rtl .elementor-control-text_align .elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-control-direction-ltr{direction:ltr}.elementor-control-direction-rtl{direction:rtl}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-button .elementor-control-input-wrapper{text-align:left}.elementor-control-type-button .elementor-button{width:auto;height:26px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-group-control-css-filter .elementor-slider{height:6px;-webkit-box-shadow:0 0 1px 1px inset rgba(0,0,0,.2);box-shadow:0 0 1px 1px inset rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0;margin-bottom:5px}.elementor-group-control-blur .elementor-slider{background:url("../images/blur.png") center/cover;-webkit-background-size:cover}.elementor-group-control-contrast .elementor-slider{background:url("../images/contrast.png") 0 0/100% 100%;-webkit-background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(red),color-stop(orange),color-stop(yellow),color-stop(greenyellow),color-stop(limegreen),color-stop(deepskyblue),color-stop(blue),color-stop(95%,#9400d3));background-image:-webkit-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%);background-image:-o-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%);background-image:linear-gradient(to right,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(gray),to(red));background-image:-webkit-linear-gradient(left,gray,red);background-image:-o-linear-gradient(left,gray,red);background-image:linear-gradient(to right,gray,red)}.elementor-group-control-brightness .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(black),to(white));background-image:-webkit-linear-gradient(left,#000,#fff);background-image:-o-linear-gradient(left,#000,#fff);background-image:linear-gradient(to right,#000,#fff)}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:0;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:right;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-left:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-hidden{display:none!important}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:right}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:right;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:left;height:27px;width:65px}.elementor-control-type-media .elementor-control-input-wrapper{padding:7px;border:1px solid;-webkit-transition:.2s ease-in-out;-o-transition:.2s ease-in-out;transition:.2s ease-in-out}.elementor-control-type-media .elementor-control-input-wrapper:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-input-wrapper:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-input-wrapper:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-input-wrapper:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media{cursor:pointer}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-area{background-image:-webkit-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-webkit-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);-webkit-background-size:16px 16px;background-size:16px 16px;background-position:0 0,8px 8px;background-color:#f6f6f6;overflow:hidden}.elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete{-webkit-box-shadow:none;box-shadow:none;bottom:-30px}.elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image{opacity:.9}.elementor-control-type-media .elementor-control-media-area i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:rgba(255,255,255,.7);font-size:21px}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase;-webkit-transition:.2s ease-in-out;-o-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-box-shadow:0 0 3px 3px rgba(0,0,0,.1);box-shadow:0 0 3px 3px rgba(0,0,0,.1)}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:center}.elementor-control-type-number .elementor-control-input-wrapper{max-width:80px}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:ltr}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-left:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding-right:10px;padding-left:10px;padding-bottom:15px}.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:right;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-left:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section.elementor-open{padding-bottom:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-slider--multiple{margin-bottom:14px}.elementor-control-type-slider--multiple .elementor-slider{margin-top:12px;width:98%}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle{-webkit-border-radius:0;border-radius:0;width:10px;-webkit-transform:translateY(calc(50% - 14px)) translateX(-4px);transform:translateY(calc(50% - 14px)) translateX(-4px)}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle:after{content:'';position:absolute;top:2px;height:12px;width:11px;-webkit-transform:rotate(45deg);transform:rotate(45deg);background-color:#fff;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after{left:5px;-webkit-box-shadow:2px -2px 3px 0 rgba(0,0,0,.1);box-shadow:2px -2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-upper:after{right:5px;-webkit-box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1);box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider:not(.elementor-control-type-slider--multiple) .elementor-slider{display:inline-block;width:70%}.elementor-slider{margin:10px auto;height:4px;background-color:#d5dadf;-webkit-border-radius:5px;border-radius:5px;position:relative;cursor:pointer}.elementor-slider-input{width:30%;float:left}.elementor-slider-input input{max-width:80%;float:left;padding:5px}.elementor-slider__extra{position:relative}.elementor-slider__labels{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-slider__label{font-size:9px;color:#c2cbd2}.elementor-slider__scales{position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-webkit-justify-content:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;width:100%;margin-top:4px}.elementor-slider__scale{width:1px;height:21px;background-color:#a4afb7}.elementor-slider .noUi-handle{height:16px;width:16px;background-color:#fff;left:0;-webkit-transform:translateY(calc(50% - 14px)) translateX(-8px);transform:translateY(calc(50% - 14px)) translateX(-8px);position:absolute;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.3);box-shadow:0 1px 5px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%}.elementor-slider .noUi-connects{position:absolute;width:100%;height:5px}.elementor-slider .noUi-connect{position:absolute;z-index:0;top:0;left:0;height:100%;width:100%;will-change:transform;-webkit-transform-origin:0 0;transform-origin:0 0;background-color:#a4afb7}.elementor-slider .noUi-tooltip{position:absolute;top:calc(100% + 5px);left:calc(50% - 4px);-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:10px}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-left:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:'';position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px rgba(127,127,127,.1);box-shadow:inset 0 2px 4px rgba(127,127,127,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:left}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:opacity .15s ease-out,background .15s ease-out;-o-transition:opacity .15s ease-out,background .15s ease-out;transition:opacity .15s ease-out,background .15s ease-out}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px rgba(255,255,255,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:27px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-left:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-right:1px solid #a4afb7;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;width:12px;height:12px;top:7px;left:13px;z-index:1;background:#fff}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-autocomplete-menu{position:absolute;background:#fff;color:#495157;border:1px solid #a4afb7;margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline;padding:5px 8px;font-size:12px;width:100%;line-height:1.2;cursor:pointer}.elementor-autocomplete-menu .ui-menu-item.ui-state-active,.elementor-autocomplete-menu .ui-menu-item.ui-state-focus,.elementor-autocomplete-menu .ui-menu-item.ui-state-hover{background:#e6e9ec}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-top:2px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{height:initial;line-height:24px;font-size:10px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:initial}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.wp-picker-container.wp-picker-active{position:absolute;z-index:10000;top:-9px;left:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container .iris-picker .iris-picker-inner{width:100%}.wp-picker-container:not(.wp-picker-active){float:left}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:120px;max-width:136px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}.pen{position:relative;outline:0}.pen:not([data-elementor-inline-editing-toolbar=advanced]){white-space:pre-wrap}.pen-menu{-webkit-box-shadow:1px 2px 3px -2px #222;box-shadow:1px 2px 3px -2px #222;background-color:#6d7882;position:fixed;overflow:hidden;-webkit-border-radius:3px;border-radius:3px;z-index:9999}.pen-menu:after{top:100%;content:'';position:absolute;border:6px solid transparent;border-top-color:#6d7882;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.pen-menu-below:after{top:0;-webkit-transform:translateX(-50%) translateY(-100%) rotate(180deg);transform:translateX(-50%) translateY(-100%) rotate(180deg)}.pen-icon{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:35px;padding:0 10px;font-size:21px;color:#d5dadf;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pen-icon:hover{background:#556068}.pen-icon[data-action=closeGroup],.pen-icon[data-group]{display:none}.pen-icon[data-action=close]:before{content:'';position:absolute;right:0;height:60%;width:1px;background-color:#556068}.pen-icon.active{background-color:#556068;-webkit-box-shadow:inset 2px 2px 4px #556068;box-shadow:inset 2px 2px 4px #556068}.pen-group-icon:after{font-family:FontAwesome;font-size:12px;content:'\f0d7';padding-left:4px;color:#71d7f7}.pen-input-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.pen-input-wrapper .pen-url-input{font-size:12px;line-height:1.5;padding:0 10px;width:250px;direction:ltr}.pen-input-wrapper .pen-url-input,.pen-input-wrapper .pen-url-input:focus{background-color:transparent;border:none;outline:0;-webkit-box-shadow:none;box-shadow:none;color:#fff}.pen-input-wrapper .pen-url-input::-webkit-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::-ms-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::placeholder{color:#d5dadf}.pen-input-label{margin:0 0 0 -1px}.pen-placeholder:before{content:attr(data-pen-placeholder);position:absolute;font-weight:400;color:#757575;opacity:.6}.pen-external-url-checkbox{display:none}.pen-external-url-checkbox:checked+i{color:#fff}.elementor-inline-editing i:not([class]){font-style:italic}.elementor-inline-editing b{font-weight:700}.elementor-inline-editing u{text-decoration:underline}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px;z-index:1}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:'>';font-size:8px;padding-left:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3);z-index:1}.elementor-tag-settings-popup:before{content:'';position:absolute;top:-20px;right:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-right:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}@-webkit-keyframes placeholder-section{0%{height:0;opacity:0}100%{height:40px;opacity:.9}}@keyframes placeholder-section{0%{height:0;opacity:0}100%{height:40px;opacity:.9}}@-webkit-keyframes placeholder-column{0%{width:0;opacity:0}100%{width:10px;opacity:.9}}@keyframes placeholder-column{0%{width:0;opacity:0}100%{width:10px;opacity:.9}}@-webkit-keyframes placeholder-widget{0%{height:0;opacity:0}100%{height:10px;opacity:.9}}@keyframes placeholder-widget{0%{height:0;opacity:0}100%{height:10px;opacity:.9}}@-webkit-keyframes section-outline{0%{opacity:0}100%{opacity:1}}@keyframes section-outline{0%{opacity:0}100%{opacity:1}}body.elementor-editor-active .elementor.elementor-edit-mode .article,body.elementor-editor-active .elementor.elementor-edit-mode.layout-section .entry-content{overflow:visible}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-overlay .elementor-editor-element-settings{clear:unset}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section{overflow:visible}#elementor .animated{-webkit-animation-fill-mode:none!important;animation-fill-mode:none!important}#elementor ul.elementor-editor-element-settings{word-break:normal;padding:0}#elementor .gallery{opacity:1}html.elementor-html{margin-top:0!important}#elementor{position:relative}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-top-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section:first-child{margin-top:15px}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{min-height:30px}@media (min-width:768px){.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{margin:10px}}.elementor-editor-active .elementor-column{min-width:25px}.elementor-editor-active .elementor-widget.elementor-loading{opacity:.3}.elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover,.elementor-editor-active .elementor-widget.elementor-element-editable{-webkit-box-shadow:0 0 0 1px #71d7f7;box-shadow:0 0 0 1px #71d7f7}.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings{display:none}.elementor-editor-active .elementor-widget.ui-draggable-dragging{pointer-events:none}.elementor-editor-active .elementor-editor-element-setting{cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:0;margin:0;font-size:11px;color:#fff;width:25px;-webkit-transition:margin .3s,width .3s,font .3s;-o-transition:margin .3s,width .3s,font .3s;transition:margin .3s,width .3s,font .3s}.elementor-editor-active .handle{display:none}.elementor-editor-active .elementor-inline-editing{min-height:15px}.elementor-editor-active .elementor-edit-hidden{display:none}.elementor-element>.elementor-element-overlay{position:absolute;top:0;left:0;letter-spacing:0;z-index:9998;pointer-events:none}.elementor-element-empty .elementor-sortable-placeholder{display:none}.elementor-element.elementor-widget-empty{background-color:rgba(213,218,223,.8)}.elementor-element.elementor-widget-empty .elementor-widget-empty-icon{color:#c2cbd2;font-size:22px;display:block;text-align:center;padding:10px 0}.elementor-element:not(:hover):not(.elementor-element-editable)>.elementor-element-overlay .elementor-editor-element-settings{display:none}.elementor-element--toggle-edit-tools>.elementor-element-overlay .elementor-editor-element-edit:not(.elementor-active)~*{width:0;font-size:0}.elementor-element[data-side=bottom]+.elementor-element:before,.elementor-element[data-side=bottom]:last-child:after,.elementor-element[data-side=top]:before{content:'';background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:.5s placeholder-widget;animation:.5s placeholder-widget;display:block}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{cursor:-webkit-grab;cursor:grab}.elementor-element.elementor-absolute:active,.elementor-element.elementor-fixed:active{cursor:-webkit-grabbing;cursor:grabbing}.elementor-element.elementor-absolute .eicon-edit:before,.elementor-element.elementor-fixed .eicon-edit:before{content:'\e1040'}.elementor-section>.elementor-element-overlay{right:0;bottom:0}.elementor-section>.elementor-element-overlay:after{position:absolute;left:2px;right:2px;top:2px;bottom:2px;outline:#71d7f7 solid 2px;-webkit-animation:.75s section-outline;animation:.75s section-outline}.elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-section:hover>.elementor-element-overlay:after{content:''}.elementor-section-filled .elementor-sortable-placeholder.elementor-column{display:none}.elementor-section-filled .elementor-row.elementor-draggable-over{border:1px solid red}.elementor-column>.elementor-element-overlay{right:0;bottom:0}.elementor-column>.elementor-element-overlay:after{position:absolute;left:0;right:0;top:0;bottom:0;outline:#6d7882 dashed 1px}.elementor-column.elementor-element-editable>.elementor-element-overlay,.elementor-column:hover>.elementor-element-overlay{border:1px solid #fff}.elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-column:hover>.elementor-element-overlay:after{content:''}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay{border:1px solid #71d7f7}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay:after{display:none}.elementor-column>.ui-resizable-e,.elementor-column>.ui-resizable-w{cursor:col-resize;width:7px;position:absolute;left:-5px;top:0;height:100%}.elementor-column:last-of-type>.ui-resizable-e,.elementor-column:last-of-type>.ui-resizable-w{display:none!important}@media (max-width:1024px){.elementor-column>.ui-resizable-e,.elementor-column>.ui-resizable-w{display:none!important}}.elementor-editor-element-settings{position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:26px;list-style:none;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:normal;line-height:1;z-index:1;pointer-events:all}.elementor-editor-element-setting.elementor-editor-element-save{display:none}.elementor-editor-section-settings{height:24px;top:1px;right:50%;-webkit-transform:translateX(50%) translateY(-100%);transform:translateX(50%) translateY(-100%);background-color:#71d7f7;-webkit-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;-webkit-box-shadow:0 -2px 8px rgba(0,0,0,.05);box-shadow:0 -2px 8px rgba(0,0,0,.05)}.elementor-editor-section-settings i.eicon-handle{font-size:16px}.elementor-editor-section-settings .elementor-editor-element-setting:hover{background-color:#10bcf2}.elementor-editor-section-settings .elementor-editor-element-setting:first-child{-webkit-border-radius:0 5px 0 0;border-radius:0 5px 0 0}.elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{content:'';position:absolute;border:solid transparent;top:2px;border-left-color:#71d7f7;border-width:22px 0 0 12px;left:calc(100% - 1px)}.elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before{border-left-color:#10bcf2}.elementor-editor-section-settings .elementor-editor-element-setting:last-child{-webkit-border-radius:5px 0 0 0;border-radius:5px 0 0}.elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{content:'';position:absolute;border:solid transparent;top:2px;border-right-color:#71d7f7;border-width:22px 12px 0 0;right:calc(100% - 1px)}.elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after{border-right-color:#10bcf2}.elementor-section--handles-inside .elementor-editor-section-settings{-webkit-transform:translateX(-50%);transform:translateX(-50%);-webkit-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child{-webkit-border-radius:0 0 5px 0;border-radius:0 0 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{top:0;border-width:0 0 22px 12px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child{-webkit-border-radius:0 0 0 5px;border-radius:0 0 0 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{top:0;border-width:0 12px 22px 0}.elementor-editor-column-settings{top:-1px;right:-1px;-webkit-border-radius:0 0 0 3px;border-radius:0 0 0 3px;overflow:hidden}.elementor-editor-column-settings .elementor-editor-element-setting{background-color:#495157}.elementor-editor-column-settings .elementor-editor-element-setting:not(:hover){background-image:-webkit-gradient(linear,left top,left bottom,from(#6d7882),to(#556068));background-image:-webkit-linear-gradient(top,#6d7882,#556068);background-image:-o-linear-gradient(top,#6d7882,#556068);background-image:linear-gradient(to bottom,#6d7882,#556068)}.elementor-editor-widget-settings{z-index:2;top:-1px;left:-1px;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-border-radius:0 0 3px 0;border-radius:0 0 3px;overflow:hidden}.elementor-editor-widget-settings .elementor-editor-element-setting{background-color:#10bcf2}.elementor-editor-widget-settings .elementor-editor-element-setting:not(:hover){background-image:-webkit-gradient(linear,left bottom,left top,from(#41c9f4),to(#71d7f7));background-image:-webkit-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:-o-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:linear-gradient(to top,#41c9f4,#71d7f7)}.elementor-empty-view{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1}.elementor-first-add{text-align:center;border:1px dashed #d5dadf;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-first-add .elementor-icon{font-size:19px;color:#a4afb7;cursor:pointer}.elementor-sortable-helper{position:absolute;-webkit-border-radius:3px;border-radius:3px;background-color:#fff;text-align:center;color:#556068;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2);cursor:move}.elementor-sortable-helper .icon{font-size:28px;padding-top:15px;line-height:1}.elementor-sortable-helper .elementor-element-title-wrapper{display:table;width:100%}.elementor-sortable-helper .title{font-size:11px;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-style:normal;display:table-cell;vertical-align:middle;height:40px}.elementor-editor-content-only .elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-column:hover>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-column>.elementor-element-overlay,.elementor-editor-content-only .elementor-column>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-first-add,.elementor-editor-content-only .elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-section:hover>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-section>.elementor-element-overlay,.elementor-editor-content-only .elementor-section>.elementor-element-overlay:after{display:none}@media (min-width:1025px){.elementor-editor-element-edit{cursor:move}.elementor-editor-content-only .elementor-editor-element-edit{cursor:pointer}}.elementor-sortable-placeholder:not(.elementor-column-placeholder){background-color:#71d7f7;-webkit-animation-duration:250ms;animation-duration:250ms;opacity:.9;width:100%;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.elementor-section-placeholder{height:40px;-webkit-animation-name:placeholder-section;animation-name:placeholder-section}.elementor-column-placeholder{position:relative}.elementor-column-placeholder:after,.elementor-column-placeholder:before{content:'';position:absolute;top:10px;bottom:10px;right:10px;left:10px}.elementor-column-placeholder:before{border:1px solid #6d7882}.elementor-column-placeholder:after{border:1px dashed #fff}.elementor-widget-placeholder{height:10px;-webkit-animation-name:placeholder-widget;animation-name:placeholder-widget}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add:after,.elementor-first-add.elementor-html5dnd-current-element:after{content:'';background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:.5s placeholder-widget;animation:.5s placeholder-widget;width:100%}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add .elementor-icon,.elementor-draggable-over[data-dragged-element=section][data-dragged-is-inner=true] .elementor-inner-column .elementor-sortable-placeholder,.elementor-first-add.elementor-html5dnd-current-element .elementor-icon{display:none}.elementor-add-section{max-width:1160px;position:relative}.elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner{border:2px dashed #d5dadf;background-color:rgba(255,255,255,.5)}.elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner{border:3px dashed #71d7f7}.elementor-add-section[data-view=choose-action] .elementor-select-preset,.elementor-add-section[data-view=select-preset] .elementor-add-new-section{display:none}.elementor-add-section-inner{text-align:center;margin:20px;padding:40px 0}.elementor-add-new-section{display:inline-block}.elementor-add-new-section .elementor-add-section-area-button{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:40px;width:40px;color:#fff;font-size:16px;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;cursor:pointer}.elementor-add-new-section .elementor-add-section-area-button:hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-add-new-section .elementor-add-section-area-button:active{-webkit-box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1);box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1)}.elementor-add-new-section .elementor-add-section-button{background-color:#d30c5c}.elementor-add-new-section .elementor-add-template-button{background-color:#6d7882;margin-right:5px}.elementor-add-section-drag-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:italic;line-height:1;color:#556068;margin-top:15px}.elementor-add-section-close{position:absolute;right:40px;top:20px;font-size:20px;cursor:pointer;line-height:1;color:#d5dadf}.elementor-add-section-close:hover{color:#6d7882}.elementor-select-preset-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:500;font-style:normal;text-transform:uppercase;color:#556068}.elementor-select-preset-list{list-style:none;padding:0 25px;margin:20px auto 0;overflow:hidden;max-width:700px}.elementor-select-preset-list .elementor-preset{cursor:pointer;margin:0;padding:10px;float:right;max-width:33.333%}.elementor-select-preset-list .elementor-preset:hover path{fill:#6d7882}.elementor-select-preset-list .elementor-preset:not(:hover) path{fill:#d5dadf}.elementor-select-preset-list .elementor-preset svg{height:50px;width:100%;-webkit-transform:rotate(180deg);transform:rotate(180deg)}#elementor-add-new-section{margin:60px auto}#elementor-add-new-section[data-view=choose-action] .elementor-add-section-close{display:none}.elementor-add-section-inline{margin:10px auto}.elementor-column-percents-tooltip{position:absolute;display:none;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#fff;font-size:10px;background-color:#556068;width:40px;padding:3.5px 0;text-align:center;z-index:1;line-height:1}.elementor-column-percents-tooltip:after{content:'';position:absolute;width:0;height:0;border:8.5px solid transparent;top:0}.elementor-column-percents-tooltip[data-side=left]{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;right:15px}.elementor-column-percents-tooltip[data-side=left]:after{left:100%;border-left-color:#556068;border-right-width:0}.elementor-column-percents-tooltip[data-side=right]{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;left:15px}.elementor-column-percents-tooltip[data-side=right]:after{right:100%;border-right-color:#556068;border-left-width:0}.elementor-editor-preview .elementor-add-section,.elementor-editor-preview .elementor-element-empty,.elementor-editor-preview .elementor-element-overlay,.elementor-editor-preview .elementor-empty,.elementor-editor-preview .elementor-widget-empty,[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-edit-hidden,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-edit-hidden,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-edit-hidden{display:none}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet{display:inherit;overflow:hidden;background:-webkit-repeating-linear-gradient(325deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px);background:repeating-linear-gradient(125deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px);outline:rgba(0,0,0,.02) solid 1px}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section>.elementor-element-overlay,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-section>.elementor-element-overlay,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section>.elementor-element-overlay{background-color:#d5dadf;mix-blend-mode:color}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section:before,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-section:before,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section:before{content:'';display:block;position:absolute;top:0;left:0;width:100%;height:100%;background-color:hsla(0,0%,100%,.6);z-index:9997}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-inner-section .elementor-container,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-inner-section .elementor-container,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-inner-section .elementor-container{width:100%}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-container,[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-wrap,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone>.elementor-widget-container,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone>.elementor-widget-wrap,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-container,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-wrap{pointer-events:none;-webkit-filter:opacity(.4) saturate(0);filter:opacity(.4) saturate(0)}#elementor .elementor .elementor-editor-element-settings{display:none}#elementor .elementor .elementor-inline-editing{pointer-events:none}[data-elementor-type$=miniature] .elementor-preset{min-width:33.333%}.elementor-section-tabbed>.elementor-container>.elementor-row>.elementor-column>.ui-resizable-handle,[data-elementor-type$=miniature] .elementor-preset[data-structure="40"],[data-elementor-type$=miniature] .elementor-preset[data-structure="50"],[data-elementor-type$=miniature] .elementor-preset[data-structure="60"]{display:none!important} \ No newline at end of file diff --git a/modules/creativeelements/views/css/editor-preview.css b/modules/creativeelements/views/css/editor-preview.css new file mode 100644 index 00000000..dc474c68 --- /dev/null +++ b/modules/creativeelements/views/css/editor-preview.css @@ -0,0 +1,2526 @@ +@charset "UTF-8"; +.ui-resizable-n { + top: -5px; } + +.ui-resizable-e { + right: -5px; } + +.ui-resizable-s { + bottom: -5px; } + +.ui-resizable-w { + left: -5px; } + +.ui-resizable-ne { + top: -5px; + right: -5px; } + +.ui-resizable-nw { + top: -5px; + left: -5px; } + +.ui-resizable-se { + bottom: -5px; + right: -5px; } + +.ui-resizable-sw { + bottom: -5px; + left: -5px; } + +.ui-resizable-n, .ui-resizable-s { + left: 0; + height: 10px; + width: 100%; + cursor: ns-resize; } + +.ui-resizable-e, .ui-resizable-w { + top: 0; + height: 100%; + width: 10px; + cursor: ew-resize; } + +.ui-resizable-ne, .ui-resizable-nw, .ui-resizable-se, .ui-resizable-sw { + height: 15px; + width: 15px; } + +.ui-resizable-nw, .ui-resizable-se { + cursor: nwse-resize; } + +.ui-resizable-ne, .ui-resizable-sw { + cursor: nesw-resize; } + +.ui-resizable-handle { + position: absolute; } + +.ui-resizable-resizing { + pointer-events: none; } + +.elementor-panel-box { + margin-top: 10px; + background-color: #fff; } + +.elementor-panel-box-content { + padding: 20px 20px 10px; } + +.elementor-button { + display: inline-block; } + +.elementor-panel-alert { + padding: 15px; + border-left: 5px solid transparent; + position: relative; + font-size: 12px; + line-height: 1.5; + text-align: left; } + .elementor-panel-alert a { + color: inherit; } + .elementor-panel-alert.elementor-panel-alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bcdff1; } + .elementor-panel-alert.elementor-panel-alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #cae6be; } + .elementor-panel-alert.elementor-panel-alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #f9f0c3; } + .elementor-panel-alert.elementor-panel-alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #e8c4c4; } + +.elementor-label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + -webkit-border-radius: .25em; + border-radius: .25em; + text-transform: capitalize; } + .elementor-label.elementor-label-default { + background-color: #a4afb7; } + .elementor-label.elementor-label-info { + background-color: #5bc0de; } + .elementor-label.elementor-label-success { + background-color: #5cb85c; } + .elementor-label.elementor-label-warning { + background-color: #f0ad4e; } + .elementor-label.elementor-label-danger { + background-color: #d9534f; } + +.elementor-descriptor, .elementor-control-field-description { + font-size: 11px; + font-style: italic; + line-height: 1.4; + color: #a4afb7; } + +.elementor-controls-popover { + display: none; + position: absolute; + -webkit-box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); + box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); + -webkit-border-radius: 3px; + border-radius: 3px; + left: 0; + right: 0; + margin: -4px auto 5px; + padding-top: 15px; + width: 90%; + z-index: 10000; + background-color: #fff; } + .elementor-controls-popover:before { + content: ''; + position: absolute; + top: -16px; + right: 22px; + border: 8px solid transparent; + border-bottom-color: #fff; } + .elementor-controls-popover div.elementor-control { + background-color: transparent; } + .elementor-controls-popover div.elementor-control:before { + content: none; } + +#elementor-panel-get-pro-elements .elementor-nerd-box-message { + text-transform: uppercase; } + +.select2-container { + width: 100% !important; } + +#elementor-controls .pojo-widget-button-collapse { + display: none; } + +.elementor-control { + background-color: #fff; + position: relative; + padding: 0 20px 15px; } + .elementor-control a { + font-weight: 500; + text-decoration: none; + border-bottom: 1px dotted transparent; + -webkit-transition: all ease-in-out .3s; + -o-transition: all ease-in-out .3s; + transition: all ease-in-out .3s; } + .elementor-control a:hover { + border-bottom-color: inherit; } + .elementor-control .elementor-control-content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + .elementor-control .elementor-control-title { + font-size: 12px; + line-height: 1; + margin-right: 5px; } + .elementor-control .elementor-control-spinner { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-control.elementor-control-type-divider { + padding: 0; + background-color: transparent; } + .elementor-control.elementor-control-type-divider .elementor-control-content { + border-width: 0; + border-color: #e6e9ec; + border-style: solid; + border-top-width: 1px; + background-color: #ffffff; + height: 15px; } + .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp { + margin-top: 15px; } + .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before { + content: ''; + height: 1px; + display: block; + margin-bottom: 15px; + background-color: transparent; } + .elementor-control.elementor-control-separator-before { + padding-top: 15px; } + .elementor-control.elementor-control-separator-before:before { + content: ''; + position: absolute; + height: 1px; + width: 100%; + top: 0; + left: 0; + background-color: #e6e9ec; } + .elementor-control.elementor-control-separator-after:after { + content: ''; + position: absolute; + height: 1px; + width: 100%; + bottom: 0; + left: 0; + background-color: #e6e9ec; } + .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs, + .elementor-control.elementor-control-separator-after + .elementor-control-separator-default { + padding-top: 15px; } + .elementor-control.elementor-control-deprecated { + color: #b01b1b; } + .elementor-control.elementor-control-deprecated .elementor-control-field-description { + color: #b01b1b; } + .elementor-control.elementor-control-hidden-label > * > .elementor-control-title, .elementor-control.elementor-control-hidden-label > * > * > .elementor-control-title { + display: none; } + .elementor-control.elementor-hidden-control { + display: none; } + .elementor-control.elementor-control-type-heading .elementor-control-title { + font-weight: bold; + margin: 0; } + body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop { + display: none; } + body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet { + display: none; } + body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile { + display: none; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper { + position: relative; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper select { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + color: #495157; + font-size: 12px; + font-family: inherit; + font-weight: inherit; + font-style: inherit; + text-transform: inherit; + letter-spacing: inherit; + line-height: inherit; + -webkit-flex-basis: 100%; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + padding-left: 5px; + padding-right: 20px; + cursor: pointer; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after { + font-family: eicons; + content: '\e955'; + font-size: 12px; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + right: 5px; + pointer-events: none; } + .elementor-control .select2-container { + width: 100% !important; + outline: none; } + .elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear { + display: none; } + .elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice { + line-height: 1.5; + font-size: 0.9em; + border: none; + -webkit-border-radius: 0; + border-radius: 0; } + .elementor-control .select2-container.select2-container--default .select2-selection__rendered { + line-height: 27px; } + .elementor-control .select2-selection { + outline: none; } + .elementor-control .select2-selection--single { + height: 27px; } + .elementor-control .select2-selection__rendered { + line-height: 27px; } + .elementor-control .select2-selection__arrow { + height: 27px; + top: 0; } + +.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before, +.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before { + content: '\f0d7'; } + +.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before, +.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before { + content: ""; } + +.elementor-panel-heading { + display: table; + table-layout: fixed; + height: 40px; + padding: 0 20px; + width: 100%; + border-bottom: 1px solid #e6e9ec; + cursor: pointer; } + .elementor-panel-heading > * { + display: table-cell; + vertical-align: middle; } + .elementor-panel-heading-toggle { + width: 20px; + color: #495157; } + .elementor-panel-heading-title { + color: #495157; + font-weight: bold; } + +.elementor-control-wp { + line-height: 1.5; } + .elementor-control-wp p { + margin: 15px 0; } + +.elementor-control-field { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-label-block > .elementor-control-content > .elementor-control-field { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + width: 100%; + margin-top: 10px; } + +.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic) > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + margin-top: 0; } + +.elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-title { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; } + +.elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + width: 55%; + -webkit-flex-shrink: 1; + -ms-flex-negative: 1; + flex-shrink: 1; + margin-left: auto; } + +.elementor-control-field-description { + margin-top: 10px; } + +.elementor-group-control-attachment_alert .elementor-control-field-description { + margin-top: 0; } + +.elementor-required { + color: #b01b1b; } + +.elementor-choices { + display: table; + width: 100%; + height: 27px; + background-color: #a4afb7; + text-align: center; + border-spacing: 1px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-choices input { + display: none; } + .elementor-choices input:checked + .elementor-choices-label { + color: #fff; } + .elementor-choices input:not(:checked) + .elementor-choices-label { + background-color: #fff; + color: #a4afb7; } + .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-choices input:not(:checked) + .elementor-choices-label:last-child { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + .elementor-choices .elementor-choices-label { + display: table-cell; + vertical-align: middle; + font-size: 12px; + -webkit-transition: all .5s; + -o-transition: all .5s; + transition: all .5s; + cursor: pointer; } + +.elementor-units-choices { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: right; } + .elementor-units-choices input { + display: none; } + .elementor-units-choices input:not(:checked) + label { + color: #c2cbd2; } + .elementor-units-choices input:checked + label { + text-decoration: underline; } + .elementor-units-choices label { + cursor: pointer; + padding: 0 2px; + text-transform: uppercase; + font-size: 9px; } + +.elementor-control-responsive-switchers { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin-right: 5px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher { + display: inline-block; + -webkit-border-radius: 50%; + border-radius: 50%; + height: 18px; + width: 18px; + background-color: #a4afb7; + cursor: pointer; + position: relative; + color: #fff; + font-size: 8px; + text-align: center; + -webkit-transition: background-color .5s; + -o-transition: background-color .5s; + transition: background-color .5s; } + .elementor-control-responsive-switchers .elementor-responsive-switcher:not(:first-child) { + margin-left: 5px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher:hover { + background-color: #c2cbd2; } + .elementor-control-responsive-switchers .elementor-responsive-switcher i { + position: relative; + display: block; + line-height: 18px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher i:before { + height: 18px; + width: 18px; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + +.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher { + background: #c2cbd2; } + .elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop) { + display: none; } + +.elementor-device-mobile .elementor-responsive-switcher-mobile { + background-color: #71d7f7; } + +.elementor-device-tablet .elementor-responsive-switcher-tablet { + background-color: #71d7f7; } + +.elementor-update-preview { + margin: 15px 15px 0; + background-color: #e6e9ec; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-update-preview-button-wrapper { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: right; } + +.elementor-update-preview-button { + padding: 8px 15px; + text-transform: uppercase; } + +.elementor-control-direction-ltr { + direction: ltr; } + +.elementor-control-direction-rtl { + direction: rtl; } + +.elementor-control-type-box_shadow .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-box_shadow .elementor-shadow-slider { + margin-top: 10px; } + +.elementor-control-type-button .elementor-control-input-wrapper { + text-align: right; } + +.elementor-control-type-button .elementor-button { + width: auto; + height: 26px; } + +.elementor-control-type-code { + padding: 0 10px 15px; } + +.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-title { + width: 70%; } + +.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + height: 27px; + width: 30%; } + +.elementor-group-control-css-filter .elementor-slider { + height: 6px; + -webkit-box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); } + +.elementor-group-control-css-filter .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + margin-top: 0; + margin-bottom: 5px; } + +.elementor-group-control-blur .elementor-slider { + background: url("../images/blur.png"); + -webkit-background-size: cover; + background-size: cover; + background-position: center; } + +.elementor-group-control-contrast .elementor-slider { + background: url("../images/contrast.png"); + -webkit-background-size: 100% 100%; + background-size: 100% 100%; } + +.elementor-group-control-hue .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(red), color-stop(orange), color-stop(yellow), color-stop(greenyellow), color-stop(limegreen), color-stop(deepskyblue), color-stop(blue), color-stop(95%, darkviolet)); + background-image: -webkit-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); + background-image: -o-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); + background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); } + +.elementor-group-control-saturate .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(gray), to(red)); + background-image: -webkit-linear-gradient(left, gray, red); + background-image: -o-linear-gradient(left, gray, red); + background-image: linear-gradient(to right, gray, red); } + +.elementor-group-control-brightness .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(black), to(white)); + background-image: -webkit-linear-gradient(left, black, white); + background-image: -o-linear-gradient(left, black, white); + background-image: linear-gradient(to right, black, white); } + +.elementor-control-type-dimensions .elementor-control-dimensions { + overflow: hidden; } + +.elementor-control-type-dimensions li { + float: left; + width: 20%; } + .elementor-control-type-dimensions li input, + .elementor-control-type-dimensions li .elementor-link-dimensions { + display: block; + text-align: center; + width: 100%; + border-color: #a4afb7; + height: 27px; } + .elementor-control-type-dimensions li input { + border-left: none; + -webkit-border-radius: 0; + border-radius: 0; + padding: 4px 0; } + .elementor-control-type-dimensions li input:focus + .elementor-control-dimension-label { + color: #a4afb7; } + .elementor-control-type-dimensions li .elementor-link-dimensions { + border: 1px solid #a4afb7; + border-left: none; + background-color: #fff; + padding: 0; + outline: none; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + cursor: pointer; } + .elementor-control-type-dimensions li:first-child input { + border-left: 1px solid #a4afb7; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + +.elementor-control-type-dimensions .elementor-control-dimension-label { + display: block; + text-align: center; + color: #d5dadf; + font-size: 9px; + text-transform: uppercase; + padding-top: 5px; } + +.elementor-control-type-dimensions .elementor-link-dimensions.unlinked { + background-color: #fff; } + .elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked { + display: none; } + +.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) { + background-color: #a4afb7; } + .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked { + display: none; } + +.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked { + color: #fff; } + +.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails { + display: none; } + +.elementor-control-type-gallery .elementor-control-gallery-thumbnails { + overflow: hidden; + margin-top: 20px; + cursor: pointer; } + +.elementor-control-type-gallery .elementor-control-gallery-thumbnail { + width: 40px; + height: 40px; + -webkit-background-size: cover; + background-size: cover; + background-position: 50% 50%; + float: left; + margin-bottom: 10px; } + .elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)) { + margin-right: 10px; } + +.elementor-control-type-gallery .elementor-control-gallery-add { + width: 100%; + height: 30px; + color: #fff; + background-color: #a4afb7; + margin-top: 10px; + text-transform: uppercase; } + +.elementor-control-type-gallery .elementor-control-gallery-clear { + color: #b01b1b; + cursor: pointer; } + +.elementor-control-type-hidden { + display: none !important; } + +.elementor-control-type-icon .select2-selection__rendered .fa { + margin-right: 3px; } + +.elementor-control-type-image_dimensions .elementor-control-field-description { + margin: 0 0 15px; + line-height: 1.4; } + +.elementor-control-type-image_dimensions .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-field { + width: 65px; + float: left; } + .elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus + .elementor-image-dimensions-field-description { + color: #a4afb7; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-separator { + width: 20px; + text-align: center; + float: left; + padding-top: 4px; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description { + display: block; + text-transform: uppercase; + margin-top: 5px; + color: #d5dadf; + font-size: 9px; + text-align: center; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button { + float: right; + height: 27px; + width: 65px; } + +.elementor-control-type-media .elementor-control-input-wrapper { + padding: 7px; + border: 1px solid; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; } + .elementor-control-type-media .elementor-control-input-wrapper:not(:hover) { + border-color: #d5dadf; } + .elementor-control-type-media .elementor-control-input-wrapper:not(:hover) .elementor-control-media-upload-button { + background-color: #d5dadf; } + .elementor-control-type-media .elementor-control-input-wrapper:hover { + border-color: #a4afb7; } + .elementor-control-type-media .elementor-control-input-wrapper:hover .elementor-control-media-upload-button { + background-color: #a4afb7; } + +.elementor-control-type-media .elementor-control-media { + cursor: pointer; } + .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area { + display: none; } + .elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button { + display: none; } + +.elementor-control-type-media .fa-plus-circle { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + color: #fff; + font-size: 20px; } + +.elementor-control-type-media .elementor-control-media-area { + background-image: -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + background-image: -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + background-image: linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + -webkit-background-size: 16px 16px; + background-size: 16px 16px; + background-position: 0 0, 8px 8px; + background-color: #f6f6f6; + overflow: hidden; } + .elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete { + -webkit-box-shadow: none; + box-shadow: none; + bottom: -30px; } + .elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image { + opacity: .9; } + .elementor-control-type-media .elementor-control-media-area i { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + color: rgba(255, 255, 255, 0.7); + font-size: 21px; } + +.elementor-control-type-media .elementor-control-media-delete { + position: absolute; + bottom: 0; + left: 0; + right: 0; + text-align: center; + padding: 9.5px; + font-size: 11px; + color: #fff; + background-color: #a4afb7; + text-transform: uppercase; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + -webkit-box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); } + +.elementor-control-type-media .elementor-control-media-image { + height: 100%; + -webkit-background-size: cover; + background-size: cover; + background-position: center; } + +.elementor-control-type-number .elementor-control-input-wrapper { + max-width: 80px; } + +.elementor-control-type-order .elementor-control-oreder-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +.elementor-control-type-order input { + display: none; } + .elementor-control-type-order input:checked + .elementor-control-order-label { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.elementor-control-type-order select { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-control-type-order select:not(:focus) ~ .elementor-control-order-label { + border-color: #d5dadf; } + .elementor-control-type-order select:focus ~ .elementor-control-order-label { + border-color: #a4afb7; } + +.elementor-control-type-order .elementor-control-order-label { + position: relative; + padding: 0; + width: 40px; + border: 1px solid; + font-size: 10px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin-left: -3px; + background-color: #fff; + cursor: pointer; } + .elementor-control-type-order .elementor-control-order-label i { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + +.elementor-control-type-popover_toggle input { + display: none; } + +.elementor-control-type-popover_toggle label { + cursor: pointer; } + +.elementor-control-type-popover_toggle .elementor-control-input-wrapper { + direction: rtl; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked + .elementor-control-popover-toggle-toggle-label { + color: #71d7f7; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked) ~ .elementor-control-popover-toggle-reset-label { + display: none; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label { + color: #c2cbd2; + padding-right: 5px; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label { + width: 50px; + height: 27px; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; } + +.elementor-control-type-repeater, +.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab) { + padding-right: 10px; + padding-left: 10px; + padding-bottom: 15px; } + +.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove { + display: none; } + +.elementor-control-type-repeater .elementor-repeater-fields { + margin: 10px 0; } + +.elementor-control-type-repeater .elementor-repeater-row-controls { + border: 1px solid #d5dadf; + border-top-width: 0; + padding-top: 15px; } + .elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable) { + display: none; } + .elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active { + -webkit-transform: translateY(0); + transform: translateY(0); + border-width: 0; } + +.elementor-control-type-repeater .elementor-repeater-row-tools { + display: table; + table-layout: fixed; + width: 100%; + color: #556068; + background-color: #d5dadf; + height: 40px; + border-spacing: 1px; + -webkit-transition: all .5s; + -o-transition: all .5s; + transition: all .5s; } + .elementor-control-type-repeater .elementor-repeater-row-tools:hover { + background-color: #a4afb7; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div { + display: table-cell; + text-align: center; + vertical-align: middle; + cursor: pointer; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div:not(.elementor-repeater-row-handle-sortable) { + background-color: #fff; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div:hover { + opacity: .95; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title { + text-align: left; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa { + margin-right: 5px; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool { + width: 40px; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable { + cursor: move; + width: 10px; + color: #fff; } + +.elementor-control-type-repeater .elementor-button-wrapper { + text-align: center; + padding: 10px; } + +.elementor-control-type-section { + margin-top: 10px; + padding: 0; } + .elementor-control-type-section.elementor-open { + padding-bottom: 15px; } + .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before { + display: none; } + +.elementor-control-type-slider--multiple { + margin-bottom: 14px; } + .elementor-control-type-slider--multiple .elementor-slider { + margin-top: 12px; + width: 98%; } + +.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle { + -webkit-border-radius: 0; + border-radius: 0; + width: 10px; + -webkit-transform: translateY(calc(50% - 14px)) translateX(4px); + transform: translateY(calc(50% - 14px)) translateX(4px); } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle:after { + content: ''; + position: absolute; + top: 2px; + height: 12px; + width: 11px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + background-color: #fff; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after { + left: 5px; + -webkit-box-shadow: 2px -2px 3px 0px rgba(0, 0, 0, 0.1); + box-shadow: 2px -2px 3px 0px rgba(0, 0, 0, 0.1); } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-upper:after { + right: 5px; + -webkit-box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); + box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); } + +.elementor-control-type-slider:not(.elementor-control-type-slider--multiple) .elementor-slider { + display: inline-block; + width: 70%; } + +.elementor-slider { + margin: 10px auto; + height: 4px; + background-color: #d5dadf; + -webkit-border-radius: 5px; + border-radius: 5px; + position: relative; + cursor: pointer; } + .elementor-slider-input { + width: 30%; + float: right; } + .elementor-slider-input input { + max-width: 80%; + float: right; + padding: 5px 5px; } + .elementor-slider__extra { + position: relative; } + .elementor-slider__labels { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-slider__label { + font-size: 9px; + color: #c2cbd2; } + .elementor-slider__scales { + position: absolute; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: space-evenly; + -webkit-justify-content: space-evenly; + -ms-flex-pack: space-evenly; + justify-content: space-evenly; + width: 100%; + margin-top: 4px; } + .elementor-slider__scale { + width: 1px; + height: 21px; + background-color: #a4afb7; } + .elementor-slider .noUi-handle { + height: 16px; + width: 16px; + background-color: #fff; + right: 0; + -webkit-transform: translateY(calc(50% - 14px)) translateX(8px); + transform: translateY(calc(50% - 14px)) translateX(8px); + position: absolute; + -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + -webkit-border-radius: 50%; + border-radius: 50%; } + .elementor-slider .noUi-connects { + position: absolute; + width: 100%; + height: 5px; } + .elementor-slider .noUi-connect { + position: absolute; + z-index: 0; + top: 0; + left: 0; + height: 100%; + width: 100%; + will-change: transform; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + background-color: #a4afb7; } + .elementor-slider .noUi-tooltip { + position: absolute; + top: calc(100% + 5px); + left: calc(50% - 4px); + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + font-size: 10px; } + +.elementor-control-type-structure .elementor-control-structure-preset { + border: 1px solid #e6e9ec; + padding: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) { + display: inline-block; + cursor: pointer; + height: 50px; } + .elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg { + height: 100%; } + .elementor-control-type-structure .elementor-control-structure-preset path { + fill: #e6e9ec; } + +.elementor-control-type-structure .elementor-control-structure-current-preset { + margin-top: 15px; } + .elementor-control-type-structure .elementor-control-structure-current-preset svg { + display: block; + width: 100%; } + +.elementor-control-type-structure .elementor-control-structure-reset { + padding: 10px 0 0 2px; + font-size: 11px; + cursor: pointer; + color: #a4afb7; } + .elementor-control-type-structure .elementor-control-structure-reset i { + margin-right: 8px; } + +.elementor-control-type-structure .elementor-control-structure-title, .elementor-control-type-structure .elementor-control-structure-more-presets-title { + color: #495157; + font-weight: bold; + padding: 13.5px 20px; + position: relative; } + .elementor-control-type-structure .elementor-control-structure-title:before, .elementor-control-type-structure .elementor-control-structure-title:after, .elementor-control-type-structure .elementor-control-structure-more-presets-title:before, .elementor-control-type-structure .elementor-control-structure-more-presets-title:after { + content: ''; + position: absolute; + left: 0; + right: 0; } + .elementor-control-type-structure .elementor-control-structure-title:before, .elementor-control-type-structure .elementor-control-structure-more-presets-title:before { + top: 0; + background-color: #e6e9ec; + -webkit-transform: translateY(-100%); + transform: translateY(-100%); } + .elementor-control-type-structure .elementor-control-structure-title:after, .elementor-control-type-structure .elementor-control-structure-more-presets-title:after { + bottom: 0; + height: 1px; + background-color: #e6e9ec; } + +.elementor-control-type-structure .elementor-control-structure-title { + margin: 10px -20px 0; } + .elementor-control-type-structure .elementor-control-structure-title:before { + height: 10px; + -webkit-box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); + box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); } + +.elementor-control-type-structure .elementor-control-structure-more-presets-title { + margin: 15px -20px 0; } + .elementor-control-type-structure .elementor-control-structure-more-presets-title:before { + height: 3px; } + +.elementor-control-type-structure .elementor-control-structure-more-presets { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-control-type-structure .elementor-control-structure-more-presets input { + display: none; } + .elementor-control-type-structure .elementor-control-structure-more-presets input:checked + .elementor-control-structure-preset { + border: 1px solid #a4afb7; } + .elementor-control-type-structure .elementor-control-structure-more-presets input:checked + .elementor-control-structure-preset path { + fill: #a4afb7; } + +.elementor-control-type-structure .elementor-control-structure-preset-wrapper { + margin-top: 15px; } + +.elementor-control-type-structure .elementor-control-structure-preset-title { + text-align: center; + padding-top: 5px; + font-style: italic; + font-size: 11px; + color: #a4afb7; } + +.elementor-control-type-switcher.elementor-label-inline > .elementor-control-content .elementor-control-field .elementor-control-title { + width: 70%; } + +.elementor-control-type-switcher.elementor-label-inline > .elementor-control-content .elementor-control-field .elementor-control-input-wrapper { + width: 30%; } + +.elementor-control-type-switcher .elementor-control-input-wrapper { + text-align: right; } + +.elementor-control-type-switcher .elementor-switch { + position: relative; + display: inline-block; + vertical-align: top; + width: 49px; + height: 20px; + background-color: white; + -webkit-border-radius: 18px; + border-radius: 18px; + cursor: pointer; } + +.elementor-control-type-switcher .elementor-switch-input { + display: none; } + +.elementor-control-type-switcher .elementor-switch-label { + position: relative; + display: block; + height: inherit; + font-size: 7px; + text-transform: uppercase; + background: #eceeef; + -webkit-border-radius: inherit; + border-radius: inherit; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15); + -webkit-transition: 0.15s ease-out; + -o-transition: 0.15s ease-out; + transition: 0.15s ease-out; + -webkit-transition-property: opacity, background; + -o-transition-property: opacity, background; + transition-property: opacity, background; } + +.elementor-control-type-switcher .elementor-switch-label:before, .elementor-control-type-switcher .elementor-switch-label:after { + position: absolute; + top: 0; + width: 50%; + text-align: center; + line-height: 20px; + -webkit-transition: inherit; + -o-transition: inherit; + transition: inherit; } + +.elementor-control-type-switcher .elementor-switch-label:before { + content: attr(data-off); + right: 3px; + color: #a4afb7; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); } + +.elementor-control-type-switcher .elementor-switch-label:after { + content: attr(data-on); + left: 3px; + color: white; + text-shadow: 0 1px rgba(0, 0, 0, 0.2); + opacity: 0; } + +.elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label { + background: #71d7f7; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), inset 0 0 3px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), inset 0 0 3px rgba(0, 0, 0, 0.2); } + .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label:before { + opacity: 0; } + .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label:after { + opacity: 1; } + +.elementor-control-type-switcher .elementor-switch-handle { + position: absolute; + top: 1px; + left: 1px; + width: 18px; + height: 18px; + background: white; + -webkit-border-radius: 10px; + border-radius: 10px; + -webkit-transition: left 0.15s ease-out; + -o-transition: left 0.15s ease-out; + transition: left 0.15s ease-out; } + +.elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-handle { + left: 30px; + -webkit-box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.2); + box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.2); } + +.elementor-control-type-tabs { + font-size: 0.8em; + color: #a4afb7; + text-transform: uppercase; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +.elementor-control-type-tab { + text-align: center; + width: 100%; + padding: 0; + line-height: 27px; + border-top: 1px solid #a4afb7; + border-bottom: 1px solid #a4afb7; + border-right: 1px solid #a4afb7; + cursor: pointer; } + .elementor-control-type-tab:first-child { + border-left: 1px solid #a4afb7; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; } + .elementor-control-type-tab:last-child { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; } + .elementor-control-type-tab.elementor-tab-active { + background-color: #a4afb7; + color: #ffffff; } + +.elementor-tab-close { + display: none !important; } + +.elementor-control-type-text_shadow .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-text_shadow .elementor-shadow-slider { + margin-top: 10px; } + +.elementor-control-type-textarea textarea { + display: block; } + +.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more { + display: none; } + +.elementor-control-type-url .elementor-control-url-external-show .elementor-input, +.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style { + padding-right: 46px; + height: 26px; } + +.elementor-control-type-url .elementor-control-input-wrapper { + position: relative; } + +.elementor-control-type-url .elementor-control-url-more { + position: absolute; + top: 0; + right: 0; + height: 26px; + width: 40px; + border-left: 1px solid #d5dadf; + cursor: pointer; + font-size: 10px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + .elementor-control-type-url .elementor-control-url-more i { + font-size: 13px; } + .elementor-control-type-url .elementor-control-url-more-input { + display: none; } + .elementor-control-type-url .elementor-control-url-more-input:not(:checked) + .elementor-control-url-more-options { + display: none; } + .elementor-control-type-url .elementor-control-url-more-options { + padding-top: 10px; } + +.elementor-control-type-url .elementor-control-url-option { + padding: 5px; + font-size: 12px; } + +.elementor-control-type-url .elementor-control-url-autocomplete-spinner { + display: none; + position: absolute; + width: 12px; + height: 12px; + top: 7px; + right: 13px; + z-index: 1; + background: #fff; } + +.elementor-control-type-url .elementor-input { + direction: ltr; } + .elementor-control-type-url .elementor-input:not(:focus) + .elementor-control-url-more { + border-color: #d5dadf; } + .elementor-control-type-url .elementor-input:focus + .elementor-control-url-more { + border-color: #a4afb7; } + +.elementor-autocomplete-menu { + position: absolute; + background: #fff; + color: #495157; + border: 1px solid #a4afb7; + margin: 0; + list-style: none; + padding: 4px 0; + height: auto; + width: 100%; + min-width: 260px; + max-width: 300px; + max-height: 200px; + overflow-y: auto; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; + cursor: default; + z-index: 1; } + .elementor-autocomplete-menu .ui-menu-item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-align-self: baseline; + -ms-flex-item-align: baseline; + align-self: baseline; + padding: 5px 8px; + font-size: 12px; + width: 100%; + line-height: 1.2; + cursor: pointer; } + .elementor-autocomplete-menu .ui-menu-item.ui-state-hover, .elementor-autocomplete-menu .ui-menu-item.ui-state-active, .elementor-autocomplete-menu .ui-menu-item.ui-state-focus { + background: #e6e9ec; } + .elementor-autocomplete-menu .elementor-autocomplete-item-info { + font-size: 10px; + padding-top: 2px; } + +.elementor-control-type-wp_widget .widget-inside { + display: block; } + +.elementor-control-type-wp_widget .quicktags-toolbar input { + width: auto; } + +.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container { + margin-top: 10px; } + +.elementor-control-type-wysiwyg * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.elementor-control-type-wysiwyg .wp-editor-container { + border: 1px solid #e6e9ec; + -webkit-border-radius: 3px; + border-radius: 3px; } + +.elementor-control-type-wysiwyg #insert-media-button { + height: initial; + line-height: 24px; + font-size: 10px; + background-color: #e6e9ec; } + +.elementor-control-type-wysiwyg .ed_button { + height: 22px; + width: initial; } + +.elementor-control-type-wysiwyg .wp-media-buttons-icon { + height: 14px; + margin: 0; } + .elementor-control-type-wysiwyg .wp-media-buttons-icon:before { + font-size: 14px; } + +.elementor-control-type-wysiwyg .wp-switch-editor { + border: none; + color: #6d7882; + font-size: 10px; + padding: 3px 9px 4px; + -webkit-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; } + +.elementor-control-type-wysiwyg .html-active .switch-tmce { + background-color: transparent; } + +.elementor-control-type-wysiwyg .html-active .switch-html { + background-color: #e6e9ec; } + +.elementor-control-type-wysiwyg .tmce-active .switch-tmce { + background-color: #e6e9ec; } + +.elementor-control-type-wysiwyg .tmce-active .switch-html { + background-color: transparent; } + +.elementor-control-type-wysiwyg .mce-toolbar-grp, .elementor-control-type-wysiwyg .quicktags-toolbar { + background-color: #e6e9ec; } + +.elementor-control-type-wysiwyg .mce-toolbar-grp > div { + padding: 0 3px; } + +.elementor-control-type-wysiwyg .elementor-wp-editor { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.elementor-control-type-wysiwyg .mce-ico { + color: #6d7882; + font-size: 16px; } + +.elementor-control-type-wysiwyg .mce-btn { + margin-right: 0; + margin-left: 0; } + .elementor-control-type-wysiwyg .mce-btn:hover, .elementor-control-type-wysiwyg .mce-btn:active, .elementor-control-type-wysiwyg .mce-btn.mce-active { + border-color: #d5dadf; } + +.elementor-control-type-wysiwyg .mce-path { + padding: 5px 10px; } + +.elementor-control-type-wysiwyg .mce-path-item { + font-size: 12px; + color: #6d7882; } + +.wp-picker-container.wp-picker-active { + position: absolute; + z-index: 10000; + top: -9px; + right: 7px; + background-color: #fff; + border: solid #fff; + border-width: 0 10px 0 5px; + padding-top: 10px; + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); } + .wp-picker-container.wp-picker-active .wp-color-result { + float: right; } + .wp-picker-container.wp-picker-active .wp-picker-input-wrap { + padding-left: 10px; + float: left; } + +.wp-picker-container * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.wp-picker-container .color-alpha { + width: calc( 100% - 2px * 2); + height: calc( 100% - 2px * 2); + margin: 2px; + position: absolute; + top: 0; + left: 0; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.wp-picker-container .iris-picker { + border: none; } + .wp-picker-container .iris-picker .iris-picker-inner { + width: 100%; } + +.wp-picker-container:not(.wp-picker-active) { + float: right; } + .wp-picker-container:not(.wp-picker-active) .wp-color-result { + margin: 0; } + +[class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active, +[class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active { + padding-top: 9px; } + +.wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 3px; } + +.wp-picker-container input[type="text"].wp-color-picker { + float: left; + width: 120px; + max-width: 136px; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; + font-size: 11px; + line-height: 12px; + padding: 7px 3px; } + +.wp-color-result { + margin: 0; + width: 48px; + height: 25px; + -webkit-transition: border .5s; + -o-transition: border .5s; + transition: border .5s; + padding: 0; + background-color: #fafafa; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; } + .wp-color-result, .wp-color-result:focus { + -webkit-box-shadow: inset 0 0 0 3px white; + box-shadow: inset 0 0 0 3px white; } + .wp-color-result:after, .wp-color-result.wp-picker-open:after { + content: none; } + .wp-color-result:hover { + border: 1px solid #a4afb7; } + .wp-color-result:focus, .wp-color-result:active { + outline: 0; } + +.wp-picker-default.button, +.wp-picker-clear.button { + height: 26px; + width: 48px; + padding: 0; + background-color: #d5dadf; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin: 0; } + +.wp-picker-holder * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.wp-picker-holder .iris-square-value { + -webkit-transition: none; + -o-transition: none; + transition: none; } + +.wp-picker-open ~ .wp-picker-holder { + clear: both; + margin-bottom: 15px; } + +.pen { + position: relative; + outline: none; } + .pen:not([data-elementor-inline-editing-toolbar="advanced"]) { + white-space: pre-wrap; } + .pen-menu { + -webkit-box-shadow: 1px 2px 3px -2px #222; + box-shadow: 1px 2px 3px -2px #222; + background-color: #6d7882; + position: fixed; + overflow: hidden; + -webkit-border-radius: 3px; + border-radius: 3px; + z-index: 9999; } + .pen-menu:after { + top: 100%; + content: ''; + position: absolute; + border: 6px solid transparent; + border-top-color: #6d7882; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + .pen-menu-below:after { + top: 0; + -webkit-transform: translateX(-50%) translateY(-100%) rotate(180deg); + transform: translateX(-50%) translateY(-100%) rotate(180deg); } + .pen-icon { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + height: 35px; + padding: 0 10px; + font-size: 21px; + color: #d5dadf; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .pen-icon:hover { + background: #556068; } + .pen-icon[data-group], .pen-icon[data-action="closeGroup"] { + display: none; } + .pen-icon[data-action="close"]:before { + content: ''; + position: absolute; + left: 0; + height: 60%; + width: 1px; + background-color: #556068; } + .pen-icon.active { + background-color: #556068; + -webkit-box-shadow: inset 2px 2px 4px #556068; + box-shadow: inset 2px 2px 4px #556068; } + .pen-group-icon:after { + font-family: FontAwesome; + font-size: 12px; + content: '\f0d7'; + padding-left: 4px; + color: #71d7f7; } + .pen-input-wrapper { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .pen-input-wrapper .pen-url-input { + font-size: 12px; + line-height: 1.5; + padding: 0; + padding-left: 10px; + padding-right: 10px; + width: 250px; + direction: ltr; } + .pen-input-wrapper .pen-url-input, .pen-input-wrapper .pen-url-input:focus { + background-color: transparent; + border: none; + outline: none; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; } + .pen-input-wrapper .pen-url-input::-webkit-input-placeholder { + color: #d5dadf; } + .pen-input-wrapper .pen-url-input::-ms-input-placeholder { + color: #d5dadf; } + .pen-input-wrapper .pen-url-input::placeholder { + color: #d5dadf; } + .pen-input-label { + margin: 0; + margin-right: -1px; } + .pen-placeholder:before { + content: attr(data-pen-placeholder); + position: absolute; + font-weight: normal; + color: #757575; + opacity: 0.6; } + .pen-external-url-checkbox { + display: none; } + .pen-external-url-checkbox:checked + i { + color: #fff; } + +.elementor-inline-editing i:not([class]) { + font-style: italic; } + +.elementor-inline-editing b { + font-weight: bold; } + +.elementor-inline-editing u { + text-decoration: underline; } + +.elementor-tags-list { + display: none; + position: absolute; + width: 260px; + max-height: 300px; + overflow: auto; + padding-bottom: 5px; + background-color: #fff; + border: 1px solid #a4afb7; + -webkit-border-radius: 3px; + border-radius: 3px; + z-index: 1; } + .elementor-tags-list__group-title { + color: #495157; + font-weight: bold; + font-size: 12px; + padding: 10px 15px; } + .elementor-tags-list__item { + font-size: 10px; + padding: 6px 15px; + cursor: pointer; } + .elementor-tags-list__item:before { + content: '>'; + font-size: 8px; + padding-right: 5px; } + .elementor-tags-list__item:hover { + background-color: #e6e9ec; } + +.elementor-dynamic-cover { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + width: 100%; + height: 27px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .elementor-dynamic-cover__settings i { + color: #d5dadf; } + .elementor-dynamic-cover__settings i.fa-wrench { + cursor: pointer; } + .elementor-dynamic-cover__title { + padding: 0 8px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; } + .elementor-dynamic-cover__remove { + color: #c2cbd2; + cursor: pointer; } + .elementor-control-type-wysiwyg .elementor-dynamic-cover { + margin-top: 10px; } + +.elementor-tag-settings-popup { + position: absolute; + width: 260px; + background-color: #e6e9ec; + -webkit-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); + box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); + z-index: 1; } + .elementor-tag-settings-popup:before { + content: ''; + position: absolute; + top: -20px; + left: 5px; + border: 10px solid transparent; + border-bottom-color: #fff; } + .elementor-tag-settings-popup .elementor-control-type-section:first-child { + margin: 0; } + +.elementor-tag-controls-stack-empty { + background-color: #fff; + padding: 10px; + font-size: 13px; + text-align: center; } + +.elementor-control-dynamic.elementor-label-inline .elementor-control-field { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + +.elementor-control-dynamic-switcher { + cursor: pointer; + font-size: 9px; } + .elementor-control-dynamic-switcher i { + padding-left: 5px; } + .elementor-control-dynamic-switcher-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-dynamic-switcher-wrapper { + width: 100%; + padding-bottom: 10px; } + +.elementor-control-dynamic-value .elementor-control-tag-area { + display: none; } + +.elementor-control-dynamic-value .elementor-control-dynamic-switcher { + color: #71d7f7; } + +@-webkit-keyframes placeholder-section { + 0% { + height: 0; + opacity: 0; } + 100% { + height: 40px; + opacity: .9; } } + +@keyframes placeholder-section { + 0% { + height: 0; + opacity: 0; } + 100% { + height: 40px; + opacity: .9; } } + +@-webkit-keyframes placeholder-column { + 0% { + width: 0; + opacity: 0; } + 100% { + width: 10px; + opacity: .9; } } + +@keyframes placeholder-column { + 0% { + width: 0; + opacity: 0; } + 100% { + width: 10px; + opacity: .9; } } + +@-webkit-keyframes placeholder-widget { + 0% { + height: 0; + opacity: 0; } + 100% { + height: 10px; + opacity: .9; } } + +@keyframes placeholder-widget { + 0% { + height: 0; + opacity: 0; } + 100% { + height: 10px; + opacity: .9; } } + +@-webkit-keyframes section-outline { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } + +@keyframes section-outline { + 0% { + opacity: 0; } + 100% { + opacity: 1; } } + +body.elementor-editor-active .elementor.elementor-edit-mode.layout-section .entry-content { + overflow: visible; } + +body.elementor-editor-active .elementor.elementor-edit-mode .article { + overflow: visible; } + +body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-overlay .elementor-editor-element-settings { + clear: unset; } + +body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section { + overflow: visible; } + +#elementor .animated { + -webkit-animation-fill-mode: none !important; + animation-fill-mode: none !important; } + +#elementor ul.elementor-editor-element-settings { + word-break: normal; + padding: 0; } + +#elementor .gallery { + opacity: 1; } + +html.elementor-html { + margin-top: 0 !important; } + +#elementor { + position: relative; } + +.elementor-editor-active .elementor.elementor-edit-area-active .elementor-top-section > .elementor-container > .elementor-row { + min-height: 40px; } + +.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section:first-child { + margin-top: 15px; } + +.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section > .elementor-container > .elementor-row { + min-height: 40px; } + +.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap { + min-height: 30px; } + @media (min-width: 768px) { + .elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap { + margin: 10px; } } + +.elementor-editor-active .elementor-column { + min-width: 25px; } + +.elementor-editor-active .elementor-widget.elementor-loading { + opacity: .3; } + +.elementor-editor-active .elementor-widget.elementor-element-editable, .elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover { + -webkit-box-shadow: 0 0 0 1px #71d7f7; + box-shadow: 0 0 0 1px #71d7f7; } + +.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings { + display: none; } + +.elementor-editor-active .elementor-widget.ui-draggable-dragging { + pointer-events: none; } + +.elementor-editor-active .elementor-editor-element-setting { + cursor: pointer; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 0; + margin: 0; + font-size: 11px; + color: #fff; + width: 25px; + -webkit-transition: margin .3s, width .3s, font .3s; + -o-transition: margin .3s, width .3s, font .3s; + transition: margin .3s, width .3s, font .3s; } + +.elementor-editor-active .handle { + display: none; } + +.elementor-editor-active .elementor-inline-editing { + min-height: 15px; } + +.elementor-editor-active .elementor-edit-hidden { + display: none; } + +.elementor-element > .elementor-element-overlay { + position: absolute; + top: 0; + right: 0; + letter-spacing: 0; + z-index: 9998; + pointer-events: none; } + +.elementor-element-empty .elementor-sortable-placeholder { + display: none; } + +.elementor-element.elementor-widget-empty { + background-color: rgba(213, 218, 223, 0.8); } + .elementor-element.elementor-widget-empty .elementor-widget-empty-icon { + color: #c2cbd2; + font-size: 22px; + display: block; + text-align: center; + padding: 10px 0; } + +.elementor-element:not(:hover):not(.elementor-element-editable) > .elementor-element-overlay .elementor-editor-element-settings { + display: none; } + +.elementor-element--toggle-edit-tools > .elementor-element-overlay .elementor-editor-element-edit:not(.elementor-active) ~ * { + width: 0; + font-size: 0; } + +.elementor-element[data-side="top"]:before, .elementor-element[data-side="bottom"] + .elementor-element:before { + content: ''; + background-color: #71d7f7; + -webkit-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + opacity: .9; + height: 10px; + -webkit-animation: placeholder-widget 500ms; + animation: placeholder-widget 500ms; + display: block; } + +.elementor-element[data-side="bottom"]:last-child:after { + content: ''; + background-color: #71d7f7; + -webkit-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + opacity: .9; + height: 10px; + -webkit-animation: placeholder-widget 500ms; + animation: placeholder-widget 500ms; + display: block; } + +.elementor-element.elementor-absolute, .elementor-element.elementor-fixed { + cursor: -webkit-grab; + cursor: grab; } + .elementor-element.elementor-absolute:active, .elementor-element.elementor-fixed:active { + cursor: -webkit-grabbing; + cursor: grabbing; } + .elementor-element.elementor-absolute .eicon-edit:before, .elementor-element.elementor-fixed .eicon-edit:before { + content: '\e1040'; } + +.elementor-section > .elementor-element-overlay { + left: 0; + bottom: 0; } + .elementor-section > .elementor-element-overlay:after { + position: absolute; + left: 2px; + right: 2px; + top: 2px; + bottom: 2px; + outline: 2px solid #71d7f7; + -webkit-animation: section-outline .75s; + animation: section-outline .75s; } + +.elementor-section:hover > .elementor-element-overlay:after, .elementor-section.elementor-element-editable > .elementor-element-overlay:after { + content: ''; } + +.elementor-section-filled .elementor-sortable-placeholder.elementor-column { + display: none; } + +.elementor-section-filled .elementor-row.elementor-draggable-over { + border: 1px solid #f00; } + +.elementor-column > .elementor-element-overlay { + left: 0; + bottom: 0; } + .elementor-column > .elementor-element-overlay:after { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + outline: 1px dashed #6d7882; } + +.elementor-column:hover > .elementor-element-overlay, .elementor-column.elementor-element-editable > .elementor-element-overlay { + border: 1px solid #ffffff; } + .elementor-column:hover > .elementor-element-overlay:after, .elementor-column.elementor-element-editable > .elementor-element-overlay:after { + content: ''; } + +.elementor-column.elementor-dragging-on-child > .elementor-element-overlay { + border: 1px solid #71d7f7; } + .elementor-column.elementor-dragging-on-child > .elementor-element-overlay:after { + display: none; } + +.elementor-column > .ui-resizable-e, .elementor-column > .ui-resizable-w { + cursor: col-resize; + width: 7px; + position: absolute; + right: -5px; + top: 0; + height: 100%; } + +.elementor-column:last-of-type > .ui-resizable-e, .elementor-column:last-of-type > .ui-resizable-w { + display: none !important; } + +@media (max-width: 1024px) { + .elementor-column > .ui-resizable-e, .elementor-column > .ui-resizable-w { + display: none !important; } } + +.elementor-editor-element-settings { + position: absolute; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: 26px; + list-style: none; + margin: 0; + padding: 0; + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: normal; + font-style: normal; + line-height: 1; + z-index: 1; + pointer-events: all; } + +.elementor-editor-element-setting.elementor-editor-element-save { + display: none; } + +@media (min-width: 1025px) { + .elementor-editor-element-edit { + cursor: move; } } + +.elementor-editor-section-settings { + height: 24px; + top: 1px; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-100%); + transform: translateX(-50%) translateY(-100%); + background-color: #71d7f7; + -webkit-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; + -webkit-box-shadow: 0px -2px 8px rgba(0, 0, 0, 0.05); + box-shadow: 0px -2px 8px rgba(0, 0, 0, 0.05); } + .elementor-editor-section-settings i.eicon-handle { + font-size: 16px; } + .elementor-editor-section-settings .elementor-editor-element-setting:hover { + background-color: #10bcf2; } + .elementor-editor-section-settings .elementor-editor-element-setting:first-child { + -webkit-border-radius: 5px 0 0 0; + border-radius: 5px 0 0 0; } + .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before { + content: ''; + position: absolute; + border: solid transparent; + top: 2px; + border-right-color: #71d7f7; + border-width: 22px 12px 0 0; + right: calc(100% - 1px); } + .elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before { + border-right-color: #10bcf2; } + .elementor-editor-section-settings .elementor-editor-element-setting:last-child { + -webkit-border-radius: 0 5px 0 0; + border-radius: 0 5px 0 0; } + .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after { + content: ''; + position: absolute; + border: solid transparent; + top: 2px; + border-left-color: #71d7f7; + border-width: 22px 0 0 12px; + left: calc(100% - 1px); } + .elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after { + border-left-color: #10bcf2; } + +.elementor-section--handles-inside .elementor-editor-section-settings { + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + -webkit-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; } + .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child { + -webkit-border-radius: 0 0 0 5px; + border-radius: 0 0 0 5px; } + .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before { + top: 0; + border-width: 0 12px 22px 0; } + .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child { + -webkit-border-radius: 0 0 5px 0; + border-radius: 0 0 5px 0; } + .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after { + top: 0; + border-width: 0 0 22px 12px; } + +.elementor-editor-column-settings { + top: -1px; + left: -1px; + -webkit-border-radius: 0 0 3px 0; + border-radius: 0 0 3px 0; + overflow: hidden; } + .elementor-editor-column-settings .elementor-editor-element-setting { + background-color: #495157; } + .elementor-editor-column-settings .elementor-editor-element-setting:not(:hover) { + background-image: -webkit-gradient(linear, left top, left bottom, from(#6d7882), to(#556068)); + background-image: -webkit-linear-gradient(top, #6d7882, #556068); + background-image: -o-linear-gradient(top, #6d7882, #556068); + background-image: linear-gradient(to bottom, #6d7882, #556068); } + +.elementor-editor-widget-settings { + z-index: 2; + top: -1px; + right: -1px; + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + -webkit-border-radius: 0 0 0 3px; + border-radius: 0 0 0 3px; + overflow: hidden; } + .elementor-editor-widget-settings .elementor-editor-element-setting { + background-color: #10bcf2; } + .elementor-editor-widget-settings .elementor-editor-element-setting:not(:hover) { + background-image: -webkit-gradient(linear, left bottom, left top, from(#41c9f4), to(#71d7f7)); + background-image: -webkit-linear-gradient(bottom, #41c9f4, #71d7f7); + background-image: -o-linear-gradient(bottom, #41c9f4, #71d7f7); + background-image: linear-gradient(to top, #41c9f4, #71d7f7); } + +.elementor-empty-view { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1; } + +.elementor-first-add { + text-align: center; + border: 1px dashed #d5dadf; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: 100%; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + .elementor-first-add .elementor-icon { + font-size: 19px; + color: #a4afb7; + cursor: pointer; } + +.elementor-sortable-helper { + position: absolute; + -webkit-border-radius: 3px; + border-radius: 3px; + background-color: #fff; + text-align: center; + color: #556068; + -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + cursor: move; } + .elementor-sortable-helper .icon { + font-size: 28px; + padding-top: 15px; + line-height: 1; } + .elementor-sortable-helper .elementor-element-title-wrapper { + display: table; + width: 100%; } + .elementor-sortable-helper .title { + font-size: 11px; + font-family: Arial, Helvetica, sans-serif; + font-weight: normal; + font-style: normal; + display: table-cell; + vertical-align: middle; + height: 40px; } + +.elementor-editor-content-only .elementor-first-add { + display: none; } + +.elementor-editor-content-only .elementor-section > .elementor-element-overlay { + display: none; } + .elementor-editor-content-only .elementor-section > .elementor-element-overlay:after { + display: none; } + +.elementor-editor-content-only .elementor-section:hover > .elementor-element-overlay:after, .elementor-editor-content-only .elementor-section.elementor-element-editable > .elementor-element-overlay:after { + display: none; } + +.elementor-editor-content-only .elementor-column > .elementor-element-overlay { + display: none; } + .elementor-editor-content-only .elementor-column > .elementor-element-overlay:after { + display: none; } + +.elementor-editor-content-only .elementor-column:hover > .elementor-element-overlay:after, .elementor-editor-content-only .elementor-column.elementor-element-editable > .elementor-element-overlay:after { + display: none; } + +@media (min-width: 1025px) { + .elementor-editor-content-only .elementor-editor-element-edit { + cursor: pointer; } } + +.elementor-sortable-placeholder:not(.elementor-column-placeholder) { + background-color: #71d7f7; + -webkit-animation-duration: 250ms; + animation-duration: 250ms; + opacity: .9; + width: 100%; + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; } + +.elementor-section-placeholder { + height: 40px; + -webkit-animation-name: placeholder-section; + animation-name: placeholder-section; } + +.elementor-column-placeholder { + position: relative; } + .elementor-column-placeholder:before, .elementor-column-placeholder:after { + content: ''; + position: absolute; + top: 10px; + bottom: 10px; + right: 10px; + left: 10px; } + .elementor-column-placeholder:before { + border: 1px solid #6d7882; } + .elementor-column-placeholder:after { + border: 1px dashed #fff; } + +.elementor-widget-placeholder { + height: 10px; + -webkit-animation-name: placeholder-widget; + animation-name: placeholder-widget; } + +.elementor-draggable-over:not([data-dragged-element="section"]):not([data-dragged-is-inner="true"]) > .elementor-empty-view > .elementor-first-add:after, +.elementor-first-add.elementor-html5dnd-current-element:after { + content: ''; + background-color: #71d7f7; + -webkit-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + opacity: .9; + height: 10px; + -webkit-animation: placeholder-widget 500ms; + animation: placeholder-widget 500ms; + width: 100%; } + +.elementor-draggable-over:not([data-dragged-element="section"]):not([data-dragged-is-inner="true"]) > .elementor-empty-view > .elementor-first-add .elementor-icon, +.elementor-first-add.elementor-html5dnd-current-element .elementor-icon { + display: none; } + +.elementor-draggable-over[data-dragged-element="section"][data-dragged-is-inner="true"] .elementor-inner-column .elementor-sortable-placeholder { + display: none; } + +.elementor-add-section { + max-width: 1160px; + position: relative; } + .elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner { + border: 2px dashed #d5dadf; + background-color: rgba(255, 255, 255, 0.5); } + .elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner { + border: 3px dashed #71d7f7; } + .elementor-add-section[data-view="choose-action"] .elementor-select-preset { + display: none; } + .elementor-add-section[data-view="select-preset"] .elementor-add-new-section { + display: none; } + +.elementor-add-section-inner { + text-align: center; + margin: 20px; + padding: 40px 0; } + +.elementor-add-new-section { + display: inline-block; } + .elementor-add-new-section .elementor-add-section-area-button { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + height: 40px; + width: 40px; + color: #fff; + font-size: 16px; + -webkit-border-radius: 50%; + border-radius: 50%; + -webkit-transition: all .3s; + -o-transition: all .3s; + transition: all .3s; + cursor: pointer; } + .elementor-add-new-section .elementor-add-section-area-button:hover { + opacity: 0.85; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-add-new-section .elementor-add-section-area-button:active { + -webkit-box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.1); + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.1); } + .elementor-add-new-section .elementor-add-section-button { + background-color: #D30C5C; } + .elementor-add-new-section .elementor-add-template-button { + background-color: #6d7882; + margin-left: 5px; } + +.elementor-add-section-drag-title { + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: normal; + font-style: italic; + line-height: 1; + color: #556068; + margin-top: 15px; } + +.elementor-add-section-close { + position: absolute; + right: 40px; + top: 20px; + font-size: 20px; + cursor: pointer; + line-height: 1; + color: #d5dadf; } + .elementor-add-section-close:hover { + color: #6d7882; } + +.elementor-select-preset-title { + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: 500; + font-style: normal; + text-transform: uppercase; + color: #556068; } + +.elementor-select-preset-list { + list-style: none; + padding: 0 25px; + margin: 20px auto 0; + overflow: hidden; + max-width: 700px; } + .elementor-select-preset-list .elementor-preset { + cursor: pointer; + margin: 0; + padding: 10px; + float: left; + max-width: 33.333%; } + .elementor-select-preset-list .elementor-preset:hover path { + fill: #6d7882; } + .elementor-select-preset-list .elementor-preset:not(:hover) path { + fill: #d5dadf; } + .elementor-select-preset-list .elementor-preset svg { + height: 50px; + width: 100%; } + +#elementor-add-new-section { + margin: 60px auto; } + #elementor-add-new-section[data-view="choose-action"] .elementor-add-section-close { + display: none; } + +.elementor-add-section-inline { + margin: 10px auto; } + +.elementor-column-percents-tooltip { + position: absolute; + display: none; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + color: #fff; + font-size: 10px; + background-color: #556068; + width: 40px; + padding: 3.5px 0; + text-align: center; + z-index: 1; + line-height: 1; } + .elementor-column-percents-tooltip:after { + content: ''; + position: absolute; + width: 0; + height: 0; + border: 8.5px solid transparent; + top: 0; } + .elementor-column-percents-tooltip[data-side="left"] { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; + right: 15px; } + .elementor-column-percents-tooltip[data-side="left"]:after { + left: 100%; + border-left-color: #556068; + border-right-width: 0; } + .elementor-column-percents-tooltip[data-side="right"] { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + left: 15px; } + .elementor-column-percents-tooltip[data-side="right"]:after { + right: 100%; + border-right-color: #556068; + border-left-width: 0; } + +.elementor-editor-preview .elementor-element-overlay, +.elementor-editor-preview .elementor-empty, +.elementor-editor-preview .elementor-add-section, +.elementor-editor-preview .elementor-element-empty, +.elementor-editor-preview .elementor-widget-empty, +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-edit-hidden, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-edit-hidden, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-edit-hidden { + display: none; } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet { + display: inherit; + overflow: hidden; + background: -webkit-repeating-linear-gradient(325deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px); + background: repeating-linear-gradient(125deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px); + outline: 1px solid rgba(0,0,0,.02); } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section>.elementor-element-overlay, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-section>.elementor-element-overlay, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section>.elementor-element-overlay { + background-color: #d5dadf; + mix-blend-mode: color } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section:before, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-section:before, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section:before { + content: ""; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: hsla(0,0%,100%,.6); + z-index: 9997 } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-inner-section .elementor-container, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-inner-section .elementor-container, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-inner-section .elementor-container { + width: 100% } + +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-container, +[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-wrap, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone>.elementor-widget-container, +[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone>.elementor-widget-wrap, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-container, +[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-wrap { + pointer-events: none; + -webkit-filter: opacity(.4) saturate(0); + filter: opacity(.4) saturate(0) } + +#elementor .elementor .elementor-editor-element-settings { + display: none; } +#elementor .elementor .elementor-inline-editing { + pointer-events: none; } + +[data-elementor-type$=miniature] .elementor-preset { + min-width: 33.333%; } + +[data-elementor-type$=miniature] .elementor-preset[data-structure="40"], +[data-elementor-type$=miniature] .elementor-preset[data-structure="50"], +[data-elementor-type$=miniature] .elementor-preset[data-structure="60"], +.elementor-section-tabbed > .elementor-container > .elementor-row > .elementor-column > .ui-resizable-handle { + display: none !important; } \ No newline at end of file diff --git a/modules/creativeelements/views/css/editor-preview.min.css b/modules/creativeelements/views/css/editor-preview.min.css new file mode 100644 index 00000000..d5a4d8c9 --- /dev/null +++ b/modules/creativeelements/views/css/editor-preview.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.ui-resizable-n{top:-5px}.ui-resizable-e{right:-5px}.ui-resizable-s{bottom:-5px}.ui-resizable-w{left:-5px}.ui-resizable-ne{top:-5px;right:-5px}.ui-resizable-nw{top:-5px;left:-5px}.ui-resizable-se{bottom:-5px;right:-5px}.ui-resizable-sw{bottom:-5px;left:-5px}.ui-resizable-n,.ui-resizable-s{left:0;height:10px;width:100%;cursor:ns-resize}.ui-resizable-e,.ui-resizable-w{top:0;height:100%;width:10px;cursor:ew-resize}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{height:15px;width:15px}.ui-resizable-nw,.ui-resizable-se{cursor:nwse-resize}.ui-resizable-ne,.ui-resizable-sw{cursor:nesw-resize}.ui-resizable-handle{position:absolute}.ui-resizable-resizing{pointer-events:none}.elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel-box-content{padding:20px 20px 10px}.elementor-button{display:inline-block}.elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:left}.elementor-panel-alert a{color:inherit}.elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-control-field-description,.elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:10000;background-color:#fff}.elementor-controls-popover:before{content:'';position:absolute;top:-16px;right:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-controls-popover div.elementor-control:before{content:none}#elementor-panel-get-pro-elements .elementor-nerd-box-message{text-transform:uppercase}.select2-container{width:100%!important}#elementor-controls .pojo-widget-button-collapse{display:none}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control .elementor-control-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.elementor-control .elementor-control-title{font-size:12px;line-height:1;margin-right:5px}.elementor-control .elementor-control-spinner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-control.elementor-control-type-divider{padding:0;background-color:transparent}.elementor-control.elementor-control-type-divider .elementor-control-content{border-width:1px 0 0;border-color:#e6e9ec;border-style:solid;background-color:#fff;height:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{content:'';height:1px;display:block;margin-bottom:15px;background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:'';position:absolute;height:1px;width:100%;top:0;left:0;background-color:#e6e9ec}.elementor-control.elementor-control-separator-after:after{content:'';position:absolute;height:1px;width:100%;bottom:0;left:0;background-color:#e6e9ec}.elementor-control.elementor-control-separator-after+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:#495157;font-size:12px;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:5px;padding-right:20px;cursor:pointer}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:'\e955';font-size:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:5px;pointer-events:none}.elementor-control .select2-container{width:100%!important;outline:0}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-container.select2-container--default .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection{outline:0}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before{content:'\f0d7'}.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;margin-left:auto}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s;cursor:pointer}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:not(:first-child){margin-left:5px}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.elementor-control-direction-ltr{direction:ltr}.elementor-control-direction-rtl{direction:rtl}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-button .elementor-control-input-wrapper{text-align:right}.elementor-control-type-button .elementor-button{width:auto;height:26px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-group-control-css-filter .elementor-slider{height:6px;-webkit-box-shadow:0 0 1px 1px inset rgba(0,0,0,.2);box-shadow:0 0 1px 1px inset rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0;margin-bottom:5px}.elementor-group-control-blur .elementor-slider{background:url("../images/blur.png") center/cover;-webkit-background-size:cover}.elementor-group-control-contrast .elementor-slider{background:url("../images/contrast.png") 0 0/100% 100%;-webkit-background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(red),color-stop(orange),color-stop(yellow),color-stop(greenyellow),color-stop(limegreen),color-stop(deepskyblue),color-stop(blue),color-stop(95%,#9400d3));background-image:-webkit-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%);background-image:-o-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%);background-image:linear-gradient(to right,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(gray),to(red));background-image:-webkit-linear-gradient(left,gray,red);background-image:-o-linear-gradient(left,gray,red);background-image:linear-gradient(to right,gray,red)}.elementor-group-control-brightness .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(black),to(white));background-image:-webkit-linear-gradient(left,#000,#fff);background-image:-o-linear-gradient(left,#000,#fff);background-image:linear-gradient(to right,#000,#fff)}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:0;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:left;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-right:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-hidden{display:none!important}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:left}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:left;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:right;height:27px;width:65px}.elementor-control-type-media .elementor-control-input-wrapper{padding:7px;border:1px solid;-webkit-transition:.2s ease-in-out;-o-transition:.2s ease-in-out;transition:.2s ease-in-out}.elementor-control-type-media .elementor-control-input-wrapper:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-input-wrapper:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-input-wrapper:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-input-wrapper:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media{cursor:pointer}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-area{background-image:-webkit-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-webkit-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);-webkit-background-size:16px 16px;background-size:16px 16px;background-position:0 0,8px 8px;background-color:#f6f6f6;overflow:hidden}.elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete{-webkit-box-shadow:none;box-shadow:none;bottom:-30px}.elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image{opacity:.9}.elementor-control-type-media .elementor-control-media-area i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:rgba(255,255,255,.7);font-size:21px}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase;-webkit-transition:.2s ease-in-out;-o-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-box-shadow:0 0 3px 3px rgba(0,0,0,.1);box-shadow:0 0 3px 3px rgba(0,0,0,.1)}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:center}.elementor-control-type-number .elementor-control-input-wrapper{max-width:80px}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:rtl}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-right:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding-right:10px;padding-left:10px;padding-bottom:15px}.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:left;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-right:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section.elementor-open{padding-bottom:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-slider--multiple{margin-bottom:14px}.elementor-control-type-slider--multiple .elementor-slider{margin-top:12px;width:98%}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle{-webkit-border-radius:0;border-radius:0;width:10px;-webkit-transform:translateY(calc(50% - 14px)) translateX(4px);transform:translateY(calc(50% - 14px)) translateX(4px)}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle:after{content:'';position:absolute;top:2px;height:12px;width:11px;-webkit-transform:rotate(45deg);transform:rotate(45deg);background-color:#fff;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after{left:5px;-webkit-box-shadow:2px -2px 3px 0 rgba(0,0,0,.1);box-shadow:2px -2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-upper:after{right:5px;-webkit-box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1);box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider:not(.elementor-control-type-slider--multiple) .elementor-slider{display:inline-block;width:70%}.elementor-slider{margin:10px auto;height:4px;background-color:#d5dadf;-webkit-border-radius:5px;border-radius:5px;position:relative;cursor:pointer}.elementor-slider-input{width:30%;float:right}.elementor-slider-input input{max-width:80%;float:right;padding:5px}.elementor-slider__extra{position:relative}.elementor-slider__labels{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-slider__label{font-size:9px;color:#c2cbd2}.elementor-slider__scales{position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-webkit-justify-content:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;width:100%;margin-top:4px}.elementor-slider__scale{width:1px;height:21px;background-color:#a4afb7}.elementor-slider .noUi-handle{height:16px;width:16px;background-color:#fff;right:0;-webkit-transform:translateY(calc(50% - 14px)) translateX(8px);transform:translateY(calc(50% - 14px)) translateX(8px);position:absolute;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.3);box-shadow:0 1px 5px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%}.elementor-slider .noUi-connects{position:absolute;width:100%;height:5px}.elementor-slider .noUi-connect{position:absolute;z-index:0;top:0;left:0;height:100%;width:100%;will-change:transform;-webkit-transform-origin:0 0;transform-origin:0 0;background-color:#a4afb7}.elementor-slider .noUi-tooltip{position:absolute;top:calc(100% + 5px);left:calc(50% - 4px);-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:10px}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-right:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:'';position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px rgba(127,127,127,.1);box-shadow:inset 0 2px 4px rgba(127,127,127,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:right}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:opacity .15s ease-out,background .15s ease-out;-o-transition:opacity .15s ease-out,background .15s ease-out;transition:opacity .15s ease-out,background .15s ease-out}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px rgba(255,255,255,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:27px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-right:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-left:1px solid #a4afb7;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;width:12px;height:12px;top:7px;right:13px;z-index:1;background:#fff}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-autocomplete-menu{position:absolute;background:#fff;color:#495157;border:1px solid #a4afb7;margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline;padding:5px 8px;font-size:12px;width:100%;line-height:1.2;cursor:pointer}.elementor-autocomplete-menu .ui-menu-item.ui-state-active,.elementor-autocomplete-menu .ui-menu-item.ui-state-focus,.elementor-autocomplete-menu .ui-menu-item.ui-state-hover{background:#e6e9ec}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-top:2px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{height:initial;line-height:24px;font-size:10px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:initial}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.wp-picker-container.wp-picker-active{position:absolute;z-index:10000;top:-9px;right:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container .iris-picker .iris-picker-inner{width:100%}.wp-picker-container:not(.wp-picker-active){float:right}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:120px;max-width:136px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}.pen{position:relative;outline:0}.pen:not([data-elementor-inline-editing-toolbar=advanced]){white-space:pre-wrap}.pen-menu{-webkit-box-shadow:1px 2px 3px -2px #222;box-shadow:1px 2px 3px -2px #222;background-color:#6d7882;position:fixed;overflow:hidden;-webkit-border-radius:3px;border-radius:3px;z-index:9999}.pen-menu:after{top:100%;content:'';position:absolute;border:6px solid transparent;border-top-color:#6d7882;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.pen-menu-below:after{top:0;-webkit-transform:translateX(-50%) translateY(-100%) rotate(180deg);transform:translateX(-50%) translateY(-100%) rotate(180deg)}.pen-icon{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:35px;padding:0 10px;font-size:21px;color:#d5dadf;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pen-icon:hover{background:#556068}.pen-icon[data-action=closeGroup],.pen-icon[data-group]{display:none}.pen-icon[data-action=close]:before{content:'';position:absolute;left:0;height:60%;width:1px;background-color:#556068}.pen-icon.active{background-color:#556068;-webkit-box-shadow:inset 2px 2px 4px #556068;box-shadow:inset 2px 2px 4px #556068}.pen-group-icon:after{font-family:FontAwesome;font-size:12px;content:'\f0d7';padding-left:4px;color:#71d7f7}.pen-input-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.pen-input-wrapper .pen-url-input{font-size:12px;line-height:1.5;padding:0 10px;width:250px;direction:ltr}.pen-input-wrapper .pen-url-input,.pen-input-wrapper .pen-url-input:focus{background-color:transparent;border:none;outline:0;-webkit-box-shadow:none;box-shadow:none;color:#fff}.pen-input-wrapper .pen-url-input::-webkit-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::-ms-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::placeholder{color:#d5dadf}.pen-input-label{margin:0 -1px 0 0}.pen-placeholder:before{content:attr(data-pen-placeholder);position:absolute;font-weight:400;color:#757575;opacity:.6}.pen-external-url-checkbox{display:none}.pen-external-url-checkbox:checked+i{color:#fff}.elementor-inline-editing i:not([class]){font-style:italic}.elementor-inline-editing b{font-weight:700}.elementor-inline-editing u{text-decoration:underline}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px;z-index:1}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:'>';font-size:8px;padding-right:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3);z-index:1}.elementor-tag-settings-popup:before{content:'';position:absolute;top:-20px;left:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-left:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}@-webkit-keyframes placeholder-section{0%{height:0;opacity:0}100%{height:40px;opacity:.9}}@keyframes placeholder-section{0%{height:0;opacity:0}100%{height:40px;opacity:.9}}@-webkit-keyframes placeholder-column{0%{width:0;opacity:0}100%{width:10px;opacity:.9}}@keyframes placeholder-column{0%{width:0;opacity:0}100%{width:10px;opacity:.9}}@-webkit-keyframes placeholder-widget{0%{height:0;opacity:0}100%{height:10px;opacity:.9}}@keyframes placeholder-widget{0%{height:0;opacity:0}100%{height:10px;opacity:.9}}@-webkit-keyframes section-outline{0%{opacity:0}100%{opacity:1}}@keyframes section-outline{0%{opacity:0}100%{opacity:1}}body.elementor-editor-active .elementor.elementor-edit-mode .article,body.elementor-editor-active .elementor.elementor-edit-mode.layout-section .entry-content{overflow:visible}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-overlay .elementor-editor-element-settings{clear:unset}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section{overflow:visible}#elementor .animated{-webkit-animation-fill-mode:none!important;animation-fill-mode:none!important}#elementor ul.elementor-editor-element-settings{word-break:normal;padding:0}#elementor .gallery{opacity:1}html.elementor-html{margin-top:0!important}#elementor{position:relative}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-top-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section:first-child{margin-top:15px}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{min-height:30px}@media (min-width:768px){.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{margin:10px}}.elementor-editor-active .elementor-column{min-width:25px}.elementor-editor-active .elementor-widget.elementor-loading{opacity:.3}.elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover,.elementor-editor-active .elementor-widget.elementor-element-editable{-webkit-box-shadow:0 0 0 1px #71d7f7;box-shadow:0 0 0 1px #71d7f7}.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings{display:none}.elementor-editor-active .elementor-widget.ui-draggable-dragging{pointer-events:none}.elementor-editor-active .elementor-editor-element-setting{cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:0;margin:0;font-size:11px;color:#fff;width:25px;-webkit-transition:margin .3s,width .3s,font .3s;-o-transition:margin .3s,width .3s,font .3s;transition:margin .3s,width .3s,font .3s}.elementor-editor-active .handle{display:none}.elementor-editor-active .elementor-inline-editing{min-height:15px}.elementor-editor-active .elementor-edit-hidden{display:none}.elementor-element>.elementor-element-overlay{position:absolute;top:0;right:0;letter-spacing:0;z-index:9998;pointer-events:none}.elementor-element-empty .elementor-sortable-placeholder{display:none}.elementor-element.elementor-widget-empty{background-color:rgba(213,218,223,.8)}.elementor-element.elementor-widget-empty .elementor-widget-empty-icon{color:#c2cbd2;font-size:22px;display:block;text-align:center;padding:10px 0}.elementor-element:not(:hover):not(.elementor-element-editable)>.elementor-element-overlay .elementor-editor-element-settings{display:none}.elementor-element--toggle-edit-tools>.elementor-element-overlay .elementor-editor-element-edit:not(.elementor-active)~*{width:0;font-size:0}.elementor-element[data-side=bottom]+.elementor-element:before,.elementor-element[data-side=bottom]:last-child:after,.elementor-element[data-side=top]:before{content:'';background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:.5s placeholder-widget;animation:.5s placeholder-widget;display:block}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{cursor:-webkit-grab;cursor:grab}.elementor-element.elementor-absolute:active,.elementor-element.elementor-fixed:active{cursor:-webkit-grabbing;cursor:grabbing}.elementor-element.elementor-absolute .eicon-edit:before,.elementor-element.elementor-fixed .eicon-edit:before{content:'\e1040'}.elementor-section>.elementor-element-overlay{left:0;bottom:0}.elementor-section>.elementor-element-overlay:after{position:absolute;left:2px;right:2px;top:2px;bottom:2px;outline:#71d7f7 solid 2px;-webkit-animation:.75s section-outline;animation:.75s section-outline}.elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-section:hover>.elementor-element-overlay:after{content:''}.elementor-section-filled .elementor-sortable-placeholder.elementor-column{display:none}.elementor-section-filled .elementor-row.elementor-draggable-over{border:1px solid red}.elementor-column>.elementor-element-overlay{left:0;bottom:0}.elementor-column>.elementor-element-overlay:after{position:absolute;left:0;right:0;top:0;bottom:0;outline:#6d7882 dashed 1px}.elementor-column.elementor-element-editable>.elementor-element-overlay,.elementor-column:hover>.elementor-element-overlay{border:1px solid #fff}.elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-column:hover>.elementor-element-overlay:after{content:''}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay{border:1px solid #71d7f7}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay:after{display:none}.elementor-column>.ui-resizable-e,.elementor-column>.ui-resizable-w{cursor:col-resize;width:7px;position:absolute;right:-5px;top:0;height:100%}.elementor-column:last-of-type>.ui-resizable-e,.elementor-column:last-of-type>.ui-resizable-w{display:none!important}@media (max-width:1024px){.elementor-column>.ui-resizable-e,.elementor-column>.ui-resizable-w{display:none!important}}.elementor-editor-element-settings{position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:26px;list-style:none;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:normal;line-height:1;z-index:1;pointer-events:all}.elementor-editor-element-setting.elementor-editor-element-save{display:none}.elementor-editor-section-settings{height:24px;top:1px;left:50%;-webkit-transform:translateX(-50%) translateY(-100%);transform:translateX(-50%) translateY(-100%);background-color:#71d7f7;-webkit-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;-webkit-box-shadow:0 -2px 8px rgba(0,0,0,.05);box-shadow:0 -2px 8px rgba(0,0,0,.05)}.elementor-editor-section-settings i.eicon-handle{font-size:16px}.elementor-editor-section-settings .elementor-editor-element-setting:hover{background-color:#10bcf2}.elementor-editor-section-settings .elementor-editor-element-setting:first-child{-webkit-border-radius:5px 0 0 0;border-radius:5px 0 0}.elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{content:'';position:absolute;border:solid transparent;top:2px;border-right-color:#71d7f7;border-width:22px 12px 0 0;right:calc(100% - 1px)}.elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before{border-right-color:#10bcf2}.elementor-editor-section-settings .elementor-editor-element-setting:last-child{-webkit-border-radius:0 5px 0 0;border-radius:0 5px 0 0}.elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{content:'';position:absolute;border:solid transparent;top:2px;border-left-color:#71d7f7;border-width:22px 0 0 12px;left:calc(100% - 1px)}.elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after{border-left-color:#10bcf2}.elementor-section--handles-inside .elementor-editor-section-settings{-webkit-transform:translateX(-50%);transform:translateX(-50%);-webkit-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child{-webkit-border-radius:0 0 0 5px;border-radius:0 0 0 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{top:0;border-width:0 12px 22px 0}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child{-webkit-border-radius:0 0 5px 0;border-radius:0 0 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{top:0;border-width:0 0 22px 12px}.elementor-editor-column-settings{top:-1px;left:-1px;-webkit-border-radius:0 0 3px 0;border-radius:0 0 3px;overflow:hidden}.elementor-editor-column-settings .elementor-editor-element-setting{background-color:#495157}.elementor-editor-column-settings .elementor-editor-element-setting:not(:hover){background-image:-webkit-gradient(linear,left top,left bottom,from(#6d7882),to(#556068));background-image:-webkit-linear-gradient(top,#6d7882,#556068);background-image:-o-linear-gradient(top,#6d7882,#556068);background-image:linear-gradient(to bottom,#6d7882,#556068)}.elementor-editor-widget-settings{z-index:2;top:-1px;right:-1px;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-border-radius:0 0 0 3px;border-radius:0 0 0 3px;overflow:hidden}.elementor-editor-widget-settings .elementor-editor-element-setting{background-color:#10bcf2}.elementor-editor-widget-settings .elementor-editor-element-setting:not(:hover){background-image:-webkit-gradient(linear,left bottom,left top,from(#41c9f4),to(#71d7f7));background-image:-webkit-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:-o-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:linear-gradient(to top,#41c9f4,#71d7f7)}.elementor-empty-view{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1}.elementor-first-add{text-align:center;border:1px dashed #d5dadf;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-first-add .elementor-icon{font-size:19px;color:#a4afb7;cursor:pointer}.elementor-sortable-helper{position:absolute;-webkit-border-radius:3px;border-radius:3px;background-color:#fff;text-align:center;color:#556068;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2);cursor:move}.elementor-sortable-helper .icon{font-size:28px;padding-top:15px;line-height:1}.elementor-sortable-helper .elementor-element-title-wrapper{display:table;width:100%}.elementor-sortable-helper .title{font-size:11px;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-style:normal;display:table-cell;vertical-align:middle;height:40px}.elementor-editor-content-only .elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-column:hover>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-column>.elementor-element-overlay,.elementor-editor-content-only .elementor-column>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-first-add,.elementor-editor-content-only .elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-section:hover>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-section>.elementor-element-overlay,.elementor-editor-content-only .elementor-section>.elementor-element-overlay:after{display:none}@media (min-width:1025px){.elementor-editor-element-edit{cursor:move}.elementor-editor-content-only .elementor-editor-element-edit{cursor:pointer}}.elementor-sortable-placeholder:not(.elementor-column-placeholder){background-color:#71d7f7;-webkit-animation-duration:250ms;animation-duration:250ms;opacity:.9;width:100%;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.elementor-section-placeholder{height:40px;-webkit-animation-name:placeholder-section;animation-name:placeholder-section}.elementor-column-placeholder{position:relative}.elementor-column-placeholder:after,.elementor-column-placeholder:before{content:'';position:absolute;top:10px;bottom:10px;right:10px;left:10px}.elementor-column-placeholder:before{border:1px solid #6d7882}.elementor-column-placeholder:after{border:1px dashed #fff}.elementor-widget-placeholder{height:10px;-webkit-animation-name:placeholder-widget;animation-name:placeholder-widget}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add:after,.elementor-first-add.elementor-html5dnd-current-element:after{content:'';background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:.5s placeholder-widget;animation:.5s placeholder-widget;width:100%}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add .elementor-icon,.elementor-draggable-over[data-dragged-element=section][data-dragged-is-inner=true] .elementor-inner-column .elementor-sortable-placeholder,.elementor-first-add.elementor-html5dnd-current-element .elementor-icon{display:none}.elementor-add-section{max-width:1160px;position:relative}.elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner{border:2px dashed #d5dadf;background-color:rgba(255,255,255,.5)}.elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner{border:3px dashed #71d7f7}.elementor-add-section[data-view=choose-action] .elementor-select-preset,.elementor-add-section[data-view=select-preset] .elementor-add-new-section{display:none}.elementor-add-section-inner{text-align:center;margin:20px;padding:40px 0}.elementor-add-new-section{display:inline-block}.elementor-add-new-section .elementor-add-section-area-button{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:40px;width:40px;color:#fff;font-size:16px;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;cursor:pointer}.elementor-add-new-section .elementor-add-section-area-button:hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-add-new-section .elementor-add-section-area-button:active{-webkit-box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1);box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1)}.elementor-add-new-section .elementor-add-section-button{background-color:#d30c5c}.elementor-add-new-section .elementor-add-template-button{background-color:#6d7882;margin-left:5px}.elementor-add-section-drag-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:italic;line-height:1;color:#556068;margin-top:15px}.elementor-add-section-close{position:absolute;right:40px;top:20px;font-size:20px;cursor:pointer;line-height:1;color:#d5dadf}.elementor-add-section-close:hover{color:#6d7882}.elementor-select-preset-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:500;font-style:normal;text-transform:uppercase;color:#556068}.elementor-select-preset-list{list-style:none;padding:0 25px;margin:20px auto 0;overflow:hidden;max-width:700px}.elementor-select-preset-list .elementor-preset{cursor:pointer;margin:0;padding:10px;float:left;max-width:33.333%}.elementor-select-preset-list .elementor-preset:hover path{fill:#6d7882}.elementor-select-preset-list .elementor-preset:not(:hover) path{fill:#d5dadf}.elementor-select-preset-list .elementor-preset svg{height:50px;width:100%}#elementor-add-new-section{margin:60px auto}#elementor-add-new-section[data-view=choose-action] .elementor-add-section-close{display:none}.elementor-add-section-inline{margin:10px auto}.elementor-column-percents-tooltip{position:absolute;display:none;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#fff;font-size:10px;background-color:#556068;width:40px;padding:3.5px 0;text-align:center;z-index:1;line-height:1}.elementor-column-percents-tooltip:after{content:'';position:absolute;width:0;height:0;border:8.5px solid transparent;top:0}.elementor-column-percents-tooltip[data-side=left]{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;right:15px}.elementor-column-percents-tooltip[data-side=left]:after{left:100%;border-left-color:#556068;border-right-width:0}.elementor-column-percents-tooltip[data-side=right]{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;left:15px}.elementor-column-percents-tooltip[data-side=right]:after{right:100%;border-right-color:#556068;border-left-width:0}.elementor-editor-preview .elementor-add-section,.elementor-editor-preview .elementor-element-empty,.elementor-editor-preview .elementor-element-overlay,.elementor-editor-preview .elementor-empty,.elementor-editor-preview .elementor-widget-empty,[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-edit-hidden,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-edit-hidden,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-edit-hidden{display:none}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet{display:inherit;overflow:hidden;background:-webkit-repeating-linear-gradient(325deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px);background:repeating-linear-gradient(125deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 1px,transparent 2px,transparent 9px);outline:rgba(0,0,0,.02) solid 1px}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section>.elementor-element-overlay,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-section>.elementor-element-overlay,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section>.elementor-element-overlay{background-color:#d5dadf;mix-blend-mode:color}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-section:before,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-section:before,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-section:before{content:"";display:block;position:absolute;top:0;left:0;width:100%;height:100%;background-color:hsla(0,0%,100%,.6);z-index:9997}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop.elementor-inner-section .elementor-container,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone.elementor-inner-section .elementor-container,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet.elementor-inner-section .elementor-container{width:100%}[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-container,[data-elementor-device-mode=desktop] .elementor-edit-area-active .elementor-hidden-desktop>.elementor-widget-wrap,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone>.elementor-widget-container,[data-elementor-device-mode=mobile] .elementor-edit-area-active .elementor-hidden-phone>.elementor-widget-wrap,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-container,[data-elementor-device-mode=tablet] .elementor-edit-area-active .elementor-hidden-tablet>.elementor-widget-wrap{pointer-events:none;-webkit-filter:opacity(.4) saturate(0);filter:opacity(.4) saturate(0)}#elementor .elementor .elementor-editor-element-settings{display:none}#elementor .elementor .elementor-inline-editing{pointer-events:none}[data-elementor-type$=miniature] .elementor-preset{min-width:33.333%}.elementor-section-tabbed>.elementor-container>.elementor-row>.elementor-column>.ui-resizable-handle,[data-elementor-type$=miniature] .elementor-preset[data-structure="40"],[data-elementor-type$=miniature] .elementor-preset[data-structure="50"],[data-elementor-type$=miniature] .elementor-preset[data-structure="60"]{display:none!important} \ No newline at end of file diff --git a/modules/creativeelements/views/css/editor-rtl.css b/modules/creativeelements/views/css/editor-rtl.css new file mode 100644 index 00000000..0f404fb1 --- /dev/null +++ b/modules/creativeelements/views/css/editor-rtl.css @@ -0,0 +1,4145 @@ +@charset "UTF-8"; +*, :before, :after { + margin: 0; + padding: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +body, +html { + height: 100%; } + +html { + background-color: #F1F1F1; } + +iframe, +img { + border: 0 none; } + +li { + list-style: none; } + +a { + text-decoration: none; } + +body { + color: #6d7882; + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + text-decoration: none; + text-transform: none; + overflow: hidden; } + body:after { + content: ''; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 0; + background-color: #71d7f7; + -webkit-transition: width .5s; + -o-transition: width .5s; + transition: width .5s; } + body a { + color: #71d7f7; } + body a:hover { + color: #D30C5C; } + body.elementor-editor-active #elementor-preview { + left: 0; } + @media (max-width: 1439px) { + body.elementor-editor-active #elementor-preview { + right: 280px; } } + @media (min-width: 1440px) { + body.elementor-editor-active #elementor-preview { + right: 300px; } } + body.elementor-editor-active #elementor-mode-switcher-preview .fa:before { + content: ""; } + body.elementor-editor-preview #elementor-preview { + left: 0; } + body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before { + content: ""; } + body.elementor-navigator--dock-hint:after { + width: 30px; } + +#elementor-panel:not(.ui-resizable-resizing), +#elementor-preview:not(.ui-resizable-resizing) { + -webkit-transition: right 0.5s, width 0.5s; + -o-transition: right 0.5s, width 0.5s; + transition: right 0.5s, width 0.5s; } + +#elementor-loading { + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: #f1f3f5; + z-index: 9999; } + +#elementor-preview-loading { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #fff; } + #elementor-preview-loading i { + color: #d5dadf; + font-size: 50px; } + +.select2-container { + z-index: 9999; } + .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single, + .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple { + border-color: #d5dadf; } + .select2-container.select2-container--open .select2-selection--single, + .select2-container.select2-container--open .select2-selection--multiple, .select2-container.select2-container--focus .select2-selection--single, + .select2-container.select2-container--focus .select2-selection--multiple { + border-color: #a4afb7; } + +.select2-dropdown { + border-color: #a4afb7; } + .select2-dropdown .select2-search__field { + outline: none; } + +.select2-selection__placeholder { + color: #a4afb7; } + +#elementor-fatal-error-dialog button.dialog-ok { + color: #71d7f7; } + +#elementor-fatal-error-dialog .dialog-header { + color: #6d7882; } + +#elementor-flexbox-attention-dialog .dialog-cancel { + color: #39b54a; } + +#elementor-flexbox-attention-dialog .dialog-ok { + color: #6d7882; } + +.elementor-nerd-box { + padding: 30px; + text-align: center; } + .elementor-nerd-box-icon { + font-size: 52px; + color: #a4afb7; } + .elementor-nerd-box-title { + margin-top: 20px; + font-size: 16px; + font-weight: bold; + line-height: 1.4; } + .elementor-nerd-box-message { + margin-top: 20px; + line-height: 1.8; + font-size: 11px; } + .elementor-nerd-box .elementor-button.elementor-nerd-box-link { + background-color: #fcb92c; + color: #ffffff; + padding: 7px 25px; + margin-top: 20px; + -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1); + -webkit-transition: .5s; + -o-transition: .5s; + transition: .5s; } + .elementor-nerd-box .elementor-button.elementor-nerd-box-link:hover { + background-color: #fdca5e; } + +.eicon-nerd:hover:before { + content: '\e965'; } + +.eicon-nerd:active:before { + content: '\e964'; } + +.elementor-loader-wrapper { + position: absolute; + width: 300px; + left: 50%; + top: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + +.elementor-loader { + -webkit-border-radius: 7px; + border-radius: 7px; + padding: 40px; + height: 150px; + width: 150px; + background-color: rgba(255, 255, 255, 0.9); + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); + box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); } + +.elementor-loader-boxes { + height: 100%; + width: 100%; + position: relative; } + +.elementor-loader-box { + position: absolute; + background-color: #d5dadf; + -webkit-animation: load 1.8s linear infinite; + animation: load 1.8s linear infinite; } + .elementor-loader-box:nth-of-type(1) { + width: 20%; + height: 100%; + left: 0; + top: 0; } + .elementor-loader-box:not(:nth-of-type(1)) { + right: 0; + height: 20%; + width: 60%; } + .elementor-loader-box:nth-of-type(2) { + top: 0; + -webkit-animation-delay: -0.45s; + animation-delay: -0.45s; } + .elementor-loader-box:nth-of-type(3) { + top: 40%; + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; } + .elementor-loader-box:nth-of-type(4) { + bottom: 0; + -webkit-animation-delay: -1.35s; + animation-delay: -1.35s; } + +@-webkit-keyframes load { + 0% { + opacity: .3; } + 50% { + opacity: 1; } + 100% { + opacity: .3; } } + +@keyframes load { + 0% { + opacity: .3; } + 50% { + opacity: 1; } + 100% { + opacity: .3; } } + +.elementor-loading-title { + color: #a4afb7; + text-align: center; + text-transform: uppercase; + margin-top: 30px; + letter-spacing: 7px; + text-indent: 7px; + font-size: 10px; + width: 100%; } + +.elementor-button { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-weight: 500; + text-transform: uppercase; + outline: none; + border: none; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition-property: background, color, opacity, -webkit-box-shadow; + transition-property: background, color, opacity, -webkit-box-shadow; + -o-transition-property: background, color, box-shadow, opacity; + transition-property: background, color, box-shadow, opacity; + transition-property: background, color, box-shadow, opacity, -webkit-box-shadow; + -webkit-transition-duration: .3s; + -o-transition-duration: .3s; + transition-duration: .3s; } + .elementor-button:hover { + border: none; } + .elementor-button:not([disabled]) { + cursor: pointer; } + .elementor-button:not(.elementor-button-state) .elementor-state-icon { + display: none; } + .elementor-button.elementor-button-success { + color: #fff; } + .elementor-button.elementor-button-success[disabled] { + background-color: #c2cbd2; } + .elementor-button.elementor-button-success:not([disabled]) { + background-color: #39b54a; } + .elementor-button.elementor-button-success:not([disabled]):hover { + opacity: 0.85; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-button.elementor-button-success:not([disabled]):active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-button.elementor-button-warning { + background-color: #a4afb7; + color: #fff; } + .elementor-button.elementor-button-warning[disabled] { + background-color: #c2cbd2; } + .elementor-button.elementor-button-warning:not([disabled]):hover { + background-color: #b01b1b; + opacity: 0.85; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-button.elementor-button-warning:not([disabled]):active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-button.elementor-edit-template { + display: inline-block; + margin-top: 15px; + color: #fff; } + .elementor-button.elementor-button-default { + background-color: #a4afb7; + color: #fff; + font-size: 11px; + padding: 6.5px 15px; } + .elementor-button.elementor-button-default:hover { + background-color: #6d7882; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-button.elementor-button-default:active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-button.elementor-button-default:visited { + color: #fff; } + .elementor-button.elementor-button-go-pro { + color: #fff; + background-color: #fcb92c; } + .elementor-button i { + margin-left: 10px; } + +input, select, textarea, .elementor-input-style { + -webkit-border-radius: 3px; + border-radius: 3px; + font-size: 12px; + width: 100%; + background: none; + -webkit-box-shadow: none; + box-shadow: none; + color: #495157; + border: 1px solid; + outline: none; } + input:not(:focus), select:not(:focus), textarea:not(:focus), .elementor-input-style:not(:focus) { + border-color: #d5dadf; } + input:focus, select:focus, textarea:focus, .elementor-input-style:focus { + border-color: #a4afb7; } + input::-webkit-input-placeholder, select::-webkit-input-placeholder, textarea::-webkit-input-placeholder, .elementor-input-style::-webkit-input-placeholder { + color: #a4afb7; } + input::-ms-input-placeholder, select::-ms-input-placeholder, textarea::-ms-input-placeholder, .elementor-input-style::-ms-input-placeholder { + color: #a4afb7; } + input::placeholder, select::placeholder, textarea::placeholder, .elementor-input-style::placeholder { + color: #a4afb7; } + +.elementor-error input, .elementor-error select, .elementor-error textarea { + border-color: #b01b1b; } + +input, textarea, .elementor-input-style { + padding: 5px 8px; } + +textarea, .elementor-input-style { + resize: vertical; } + +input[type="checkbox"], +input[type="radio"] { + border: 1px solid #d5dadf; + background: #fff; + color: #555; + clear: none; + cursor: pointer; + display: inline-block; + line-height: 0; + height: 16px; + margin: -4px 4px 0 0; + outline: 0; + text-align: center; + vertical-align: middle; + width: 16px; + min-width: 16px; + -webkit-transition: .05s border-color ease-in-out; + -o-transition: .05s border-color ease-in-out; + transition: .05s border-color ease-in-out; } + input[type="checkbox"]:focus, + input[type="radio"]:focus { + border-color: #a4afb7; } + +input[disabled] { + background-color: #e6e9ec; + cursor: not-allowed; + opacity: 1; } + +select { + height: 27px; } + +/* + * Container style + */ +.ps { + overflow: hidden !important; + overflow-anchor: none; + -ms-touch-action: auto; + touch-action: auto; } + +/* + * Scrollbar rail styles + */ +.ps__rail-y { + display: none; + opacity: 0; + -webkit-transition: background-color .2s linear, opacity .2s linear; + -o-transition: background-color .2s linear, opacity .2s linear; + transition: background-color .2s linear, opacity .2s linear; + width: 15px; + /* there must be 'right' or 'left' for ps__rail-y */ + right: 0; + left: initial !important; + /* please don't change 'position' */ + position: absolute; } + +.ps--active-y > .ps__rail-y { + display: block; + background-color: transparent; } + +.ps:hover > .ps__rail-y, +.ps--focus > .ps__rail-y, +.ps--scrolling-y > .ps__rail-y { + opacity: 0.6; } + +.ps .ps__rail-y:hover, +.ps .ps__rail-y:focus, +.ps .ps__rail-y.ps--clicking { + background-color: #eee; + opacity: 0.9; } + +.ps__thumb-y { + background-color: #aaa; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-transition: background-color .2s linear, width .2s ease-in-out; + -o-transition: background-color .2s linear, width .2s ease-in-out; + transition: background-color .2s linear, width .2s ease-in-out; + width: 6px; + /* there must be 'right' for ps__thumb-y */ + right: 2px; + /* please don't change 'position' */ + position: absolute; } + +.ps__rail-y:hover > .ps__thumb-y, +.ps__rail-y:focus > .ps__thumb-y, +.ps__rail-y.ps--clicking .ps__thumb-y { + background-color: #999; + width: 11px; } + +/* Make clicks pass-through */ +#nprogress { + pointer-events: none; } + +#nprogress .bar { + background: #39b54a; + position: fixed; + z-index: 1031; + top: 0; + left: 0; + width: 100%; + height: 2px; } + +/* Fancy blur effect */ +#nprogress .peg { + display: block; + position: absolute; + right: 0; + width: 100px; + height: 100%; + -webkit-box-shadow: 0 0 10px #39b54a, 0 0 5px #39b54a; + box-shadow: 0 0 10px #39b54a, 0 0 5px #39b54a; + opacity: 1.0; + -webkit-transform: rotate(3deg) translate(0px, -4px); + transform: rotate(3deg) translate(0px, -4px); } + +/* Remove these to get rid of the spinner */ +#nprogress .spinner { + display: none; + position: fixed; + z-index: 1031; + top: 15px; + right: 15px; } + +#nprogress .spinner-icon { + width: 18px; + height: 18px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: solid 2px transparent; + border-top-color: #39b54a; + border-left-color: #39b54a; + -webkit-border-radius: 50%; + border-radius: 50%; + -webkit-animation: nprogress-spinner 400ms linear infinite; + animation: nprogress-spinner 400ms linear infinite; } + +.nprogress-custom-parent { + overflow: hidden; + position: relative; } + +.nprogress-custom-parent #nprogress .spinner, +.nprogress-custom-parent #nprogress .bar { + position: absolute; } + +@-webkit-keyframes nprogress-spinner { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes nprogress-spinner { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +#nprogress .bar, +#nprogress .spinner { + z-index: 100000; } + +.elementor-panel { + position: fixed; + height: 100%; + top: 0; + bottom: 0; + overflow: visible; + background-color: #e6e9ec; + z-index: 1; + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-size: 13px; } + .elementor-editor-active .elementor-panel { + right: 0; } + @media (max-width: 1439px) { + .elementor-editor-preview .elementor-panel { + right: -280px; } } + @media (min-width: 1440px) { + .elementor-editor-preview .elementor-panel { + right: -300px; } } + .elementor-editor-preview .elementor-panel > .ui-resizable-e, .elementor-editor-preview .elementor-panel > .ui-resizable-w { + display: none; } + @media (max-width: 1439px) { + .elementor-panel { + width: 280px; } } + @media (min-width: 1440px) { + .elementor-panel { + width: 300px; } } + .elementor-panel .ps-scrollbar-y-rail { + z-index: 2; } + .elementor-panel ::-moz-selection { + background: #5bc0de; + color: #ffffff; } + .elementor-panel ::selection { + background: #5bc0de; + color: #ffffff; } + .elementor-panel a { + color: #D30C5C; } + .elementor-panel h1, + .elementor-panel h2, + .elementor-panel h3, + .elementor-panel h4, + .elementor-panel h5, + .elementor-panel h6 { + font-size: 100%; + font-weight: normal; } + .elementor-panel abbr, + .elementor-panel acronym { + border: 0; + font-variant: normal; } + .elementor-panel sup { + vertical-align: text-top; } + .elementor-panel sub { + vertical-align: text-bottom; } + .elementor-panel img { + max-width: 100%; + height: auto; + border: 0; } + .elementor-panel ::-moz-focus-inner { + padding: 0; + border: 0; } + .elementor-panel :focus { + outline: 0; } + .elementor-panel .elementor-panel-box { + margin-top: 10px; + background-color: #fff; } + .elementor-panel .elementor-panel-box-content { + padding: 20px 20px 10px; } + .elementor-panel .elementor-button { + display: inline-block; } + .elementor-panel .elementor-panel-alert { + padding: 15px; + border-left: 5px solid transparent; + position: relative; + font-size: 12px; + line-height: 1.5; + text-align: right; } + .elementor-panel .elementor-panel-alert a { + color: inherit; } + .elementor-panel .elementor-panel-alert.elementor-panel-alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bcdff1; } + .elementor-panel .elementor-panel-alert.elementor-panel-alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #cae6be; } + .elementor-panel .elementor-panel-alert.elementor-panel-alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #f9f0c3; } + .elementor-panel .elementor-panel-alert.elementor-panel-alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #e8c4c4; } + .elementor-panel .elementor-label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + -webkit-border-radius: .25em; + border-radius: .25em; + text-transform: capitalize; } + .elementor-panel .elementor-label.elementor-label-default { + background-color: #a4afb7; } + .elementor-panel .elementor-label.elementor-label-info { + background-color: #5bc0de; } + .elementor-panel .elementor-label.elementor-label-success { + background-color: #5cb85c; } + .elementor-panel .elementor-label.elementor-label-warning { + background-color: #f0ad4e; } + .elementor-panel .elementor-label.elementor-label-danger { + background-color: #d9534f; } + .elementor-panel .elementor-descriptor, .elementor-panel .elementor-control-field-description { + font-size: 11px; + font-style: italic; + line-height: 1.4; + color: #a4afb7; } + .elementor-panel .elementor-controls-popover { + display: none; + position: absolute; + -webkit-box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); + box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); + -webkit-border-radius: 3px; + border-radius: 3px; + left: 0; + right: 0; + margin: -4px auto 5px; + padding-top: 15px; + width: 90%; + z-index: 10000; + background-color: #fff; } + .elementor-panel .elementor-controls-popover:before { + content: ''; + position: absolute; + top: -16px; + left: 22px; + border: 8px solid transparent; + border-bottom-color: #fff; } + .elementor-panel .elementor-controls-popover div.elementor-control { + background-color: transparent; } + .elementor-panel .elementor-controls-popover div.elementor-control:before { + content: none; } + .elementor-panel #elementor-panel-get-pro-elements .elementor-nerd-box-message { + text-transform: uppercase; } + .elementor-panel .select2-container { + width: 100% !important; } + .elementor-panel #elementor-controls .pojo-widget-button-collapse { + display: none; } + .elementor-panel #elementor-panel-header { + display: table; + height: 40px; + width: 100%; + background-color: #D30C5C; + color: #fff; } + .elementor-panel #elementor-panel-header > * { + display: table-cell; + vertical-align: middle; + text-align: center; } + .elementor-panel .elementor-header-button { + width: 40px; } + .elementor-panel .elementor-header-button .elementor-icon { + cursor: pointer; + display: block; + font-size: 19px; + height: 40px; + line-height: 40px; + -webkit-transition: all 0.5s; + -o-transition: all 0.5s; + transition: all 0.5s; } + .elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar { + font-size: 18px; } + .elementor-panel .elementor-header-button .elementor-icon:hover { + color: #d5dadf; } + .elementor-panel #elementor-panel-header-title { + font-size: 15px; } + .elementor-panel #elementor-panel-header-title img { + width: 66px; } + body:not(.elementor-controls-ready) .elementor-panel #elementor-panel-page-elements { + height: 100%; + overflow: hidden; } + .elementor-panel #elementor-panel-elements-navigation .elementor-panel-navigation-tab { + text-align: center; + padding: 10px 0; + font-size: 11px; + text-transform: uppercase; + cursor: pointer; } + .elementor-panel #elementor-panel-elements { + overflow: hidden; + padding: 0 5px; } + .elementor-panel #elementor-panel-elements-loading { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + background-color: rgba(255, 255, 255, 0.5); + z-index: 1; } + body.elementor-controls-ready .elementor-panel #elementor-panel-elements-loading { + display: none; } + .elementor-panel #elementor-panel-elements-loading .eicon-loading { + font-size: 25px; + color: #71d7f7; } + .elementor-panel .elementor-element-wrapper { + float: right; + width: 50%; + padding: 5px; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .elementor-panel .elementor-element { + -webkit-border-radius: 3px; + border-radius: 3px; + background-color: #fff; + cursor: move; } + .elementor-panel .elementor-element:hover { + -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); } + .elementor-panel .elementor-element:hover .icon, .elementor-panel .elementor-element:hover .title { + color: #D30C5C; } + .elementor-panel .elementor-element .icon { + font-size: 28px; + padding-top: 15px; + color: #556068; } + .elementor-panel .elementor-element .elementor-element-title-wrapper { + display: table; + width: 100%; } + .elementor-panel .elementor-element .title { + font-size: 11px; + color: #556068; + display: table-cell; + vertical-align: middle; + height: 40px; } + .elementor-panel #elementor-panel-elements-search-wrapper { + position: relative; + margin: 10px 10px 5px; } + .elementor-panel #elementor-panel-elements-search-wrapper i { + position: absolute; + left: 0; + top: 50%; + color: #a4afb7; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + -webkit-transition: left 1s; + -o-transition: left 1s; + transition: left 1s; } + .elementor-panel #elementor-panel-elements-search-input { + background-color: rgba(255, 255, 255, 0.7); + font-size: 11px; + padding: 10px 10px 10px 27px; + font-style: italic; + color: #a4afb7; + border: none; + -webkit-transition: all 1s; + -o-transition: all 1s; + transition: all 1s; + -webkit-border-radius: 3px; + border-radius: 3px; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; } + .elementor-panel #elementor-panel-elements-search-input + i { + left: 10px; } + .elementor-panel #elementor-panel-elements-search-input:focus { + background-color: white; + padding-right: 15px; } + .elementor-panel #elementor-panel-elements-search-input:focus + i { + left: 15px; } + .elementor-panel .elementor-panel-category { + position: relative; } + .elementor-panel .elementor-panel-category:first-child .elementor-panel-category-title { + padding-top: 14px; } + .elementor-panel .elementor-panel-category.elementor-active .elementor-panel-category-title:before { + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); } + .elementor-panel .elementor-panel-category:not(.elementor-active):after { + content: ''; + position: absolute; + left: 15px; + right: 15px; + bottom: 0; + height: 8px; + background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.03)), to(transparent)); + background: -webkit-linear-gradient(rgba(0, 0, 0, 0.03), transparent); + background: -o-linear-gradient(rgba(0, 0, 0, 0.03), transparent); + background: linear-gradient(rgba(0, 0, 0, 0.03), transparent); + -webkit-transform: translateY(100%); + transform: translateY(100%); } + .elementor-panel .elementor-panel-category-title { + margin: 0 15px; + padding: 20px 0; + position: relative; + text-transform: uppercase; + font-size: 11px; + cursor: pointer; } + .elementor-panel .elementor-panel-category-title:before { + content: ""; + font-family: eicons; + position: absolute; + left: 0; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + -o-transition: transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; } + .elementor-panel .elementor-panel-category-items { + overflow: hidden; + padding: 0 5px; + display: none; } + .elementor-panel .elementor-panel-scheme-title { + padding: 10px 20px; + margin-top: 10px; } + .elementor-panel .elementor-panel-scheme-description { + padding: 20px 20px 0; } + .elementor-panel .elementor-panel-scheme-buttons { + padding: 0 20px; + display: table; + table-layout: fixed; + width: 100%; + height: 40px; + background-color: #fff; + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); } + .elementor-panel .elementor-panel-scheme-buttons .elementor-button { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-size: 11px; + font-weight: 400; } + .elementor-panel .elementor-panel-scheme-button-wrapper { + display: table-cell; + vertical-align: middle; + text-align: center; } + .elementor-panel .elementor-panel-scheme-button-wrapper:first-child { + text-align: right; } + .elementor-panel .elementor-panel-scheme-button-wrapper:last-child { + text-align: left; } + .elementor-panel .elementor-panel-scheme-save .elementor-button { + padding: 6px 18px; } + .elementor-panel .elementor-panel-scheme-reset .elementor-button, .elementor-panel .elementor-panel-scheme-discard .elementor-button { + color: #a4afb7; + background: none; } + .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-items { + position: relative; + display: grid; + grid-template-columns: repeat(4, 50px); + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active) { + float: none; } + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active { + top: 10px; } + @media (max-width: 1439px) { + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active { + border-width: 0 4px 0 5px; } } + @media (min-width: 1440px) { + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active { + border-width: 0 7px 0 5px; } } + @media (max-width: 1439px) { + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 4px; } } + @media (min-width: 1440px) { + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 6px; } } + @media (max-width: 1439px) { + [class*="wp-version-4-9"] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result, [class*="wp-version-5"] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 10px; } } + @media (min-width: 1440px) { + [class*="wp-version-4-9"] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result, [class*="wp-version-5"] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 9px; } } + .elementor-panel .elementor-panel-scheme-color-title { + text-align: center; + text-transform: uppercase; + margin: 10px 0; + color: #c2cbd2; + font-size: 8px; } + .elementor-panel .elementor-panel-scheme-typography-item { + display: table; + table-layout: fixed; + width: 100%; + margin-bottom: 15px; } + .elementor-panel .elementor-panel-scheme-typography-item > * { + display: table-cell; + vertical-align: middle; } + .elementor-panel .elementor-panel-scheme-typography-item-value select, .elementor-panel .elementor-panel-scheme-typography-item-value input { + width: 100%; } + .elementor-panel .elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-scheme-typography-items { + display: none; } + .elementor-panel .elementor-panel-scheme-color-system-scheme { + margin-bottom: 10px; } + .elementor-panel .elementor-panel-scheme-color-system-scheme .elementor-title { + font-size: 11px; + color: #a4afb7; + font-style: italic; + margin-top: 5px; } + .elementor-panel .elementor-panel-scheme-color-system-items { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-transition: border .5s; + -o-transition: border .5s; + transition: border .5s; + overflow: hidden; + padding: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; + cursor: pointer; } + .elementor-panel .elementor-panel-scheme-color-system-items:hover { + border: 1px solid #a4afb7; } + .elementor-panel .elementor-panel-scheme-color-system-item { + height: 20px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-panel #elementor-panel-schemes-disabled a:hover { + text-decoration: underline; } + .elementor-panel #elementor-panel-page-menu { + padding: 25px 15px; } + .elementor-panel .elementor-panel-menu-group-title { + text-transform: uppercase; + font-size: 11px; } + .elementor-panel .elementor-panel-menu-items { + margin: 15px 0 25px; + -webkit-border-radius: 5px; + border-radius: 5px; + overflow: hidden; } + .elementor-panel .elementor-panel-menu-item { + display: table; + width: 100%; + height: 40px; + cursor: pointer; + margin-bottom: 1px; + background-color: #fff; } + .elementor-panel .elementor-panel-menu-item:hover { + background-color: rgba(255, 255, 255, 0.8); } + .elementor-panel .elementor-panel-menu-item > * { + display: table-cell; + vertical-align: middle; } + .elementor-panel .elementor-panel-menu-item-icon { + text-align: center; + width: 50px; + color: #a4afb7; } + .elementor-panel .elementor-panel-menu-item-title { + font-weight: 500; } + .elementor-panel .elementor-panel-menu-item-title > span { + color: #39b54a; } + .elementor-panel .elementor-panel-menu-item a { + color: #6d7882; } + .elementor-panel .elementor-panel-menu-item-exit-to-dashboard { + background-color: #0085ba; + color: #fff; + text-transform: uppercase; + font-size: 12px; } + .elementor-panel .elementor-panel-menu-item-exit-to-dashboard:hover { + background-color: #0073a1; } + .elementor-panel .elementor-panel-menu-item-exit-to-dashboard .elementor-panel-menu-item-title, + .elementor-panel .elementor-panel-menu-item-exit-to-dashboard .elementor-panel-menu-item-icon { + color: #fff; } + .elementor-panel .elementor-control.elementor-control-clear_page { + background-color: transparent; } + .elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-panel .elementor-panel-navigation { + background-color: #ffffff; + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + display: table; + table-layout: fixed; + width: 100%; } + .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab { + display: table-cell; } + .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #fff); + background-image: -o-linear-gradient(top, #f3f3f3, #fff); + background-image: linear-gradient(to bottom, #f3f3f3, #fff); + border-bottom: 3px solid #D30C5C; } + .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a { + display: block; + text-align: center; + padding: 12px 0 8px; + font-size: 10px; + color: #6d7882; } + .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a:before { + font-family: FontAwesome; + font-size: 16px; + display: block; + margin-bottom: 6px; } + .elementor-panel .elementor-tab-control-content a:before { + content: '\f040'; } + .elementor-panel .elementor-tab-control-style a:before { + content: '\f042'; } + .elementor-panel .elementor-tab-control-advanced a:before, .elementor-panel .elementor-tab-control-settings a:before, .elementor-panel .elementor-tab-control-general_style a:before { + content: '\f013'; } + .elementor-panel .elementor-tab-control-responsive a:before { + content: '\f10a'; } + .elementor-panel .elementor-tab-control-layout a:before, .elementor-panel .elementor-tab-control-column a:before { + content: '\f0db'; } + .elementor-panel .elementor-tab-control-lightbox a:before { + content: '\f2d2'; } + .elementor-panel #elementor-panel-footer { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 40px; + background-color: #495157; } + .elementor-panel #elementor-panel-footer-tools { + display: table; + table-layout: fixed; + width: 100%; + height: 100%; } + .elementor-panel .elementor-panel-footer-tool { + display: table-cell; + vertical-align: middle; + text-align: center; + cursor: pointer; + color: #a4afb7; + -webkit-transition: all 0.5s; + -o-transition: all 0.5s; + transition: all 0.5s; } + .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update { + border-left: 1px solid #2d8739; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update i { + margin-left: 5px; } + .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options { + float: right; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i { + margin: auto; } + .elementor-panel .elementor-panel-footer-tool.elementor-open { + color: #fff; } + .elementor-panel .elementor-panel-footer-tool:not(.elementor-open):hover { + color: #d5dadf; } + .elementor-panel .elementor-panel-footer-tool:not(.elementor-open) .elementor-panel-footer-sub-menu-wrapper { + display: none; } + .elementor-panel .elementor-panel-footer-sub-menu-wrapper { + position: absolute; + bottom: 100%; + left: 0; + width: 100%; + background-color: #556068; + padding: 10px; + -webkit-box-shadow: -2px -5px 8px rgba(0, 0, 0, 0.1); + box-shadow: -2px -5px 8px rgba(0, 0, 0, 0.1); + cursor: default; + z-index: 10000; } + .elementor-panel .elementor-panel-footer-sub-menu { + -webkit-border-radius: 5px; + border-radius: 5px; + overflow: hidden; } + .elementor-panel .elementor-panel-footer-sub-menu-item { + background-color: #495157; + display: table; + table-layout: fixed; + width: 100%; + cursor: pointer; } + .elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled .elementor-icon, + .elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled .elementor-title { + color: #6d7882; } + .elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child) { + margin-bottom: 1px; } + .elementor-panel .elementor-panel-footer-sub-menu-item[data-device-mode="mobile-landscape"] .fa-mobile { + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); } + .elementor-panel .elementor-panel-footer-sub-menu-item:hover { + background-color: rgba(0, 0, 0, 0.2); } + .elementor-panel .elementor-panel-footer-sub-menu-item.active { + background-color: rgba(0, 0, 0, 0.3); } + .elementor-panel .elementor-panel-footer-sub-menu-item > * { + display: table-cell; + height: 40px; + vertical-align: middle; } + .elementor-panel .elementor-panel-footer-sub-menu-item .elementor-icon { + width: 40px; + color: #a4afb7; } + .elementor-panel .elementor-panel-footer-sub-menu-item .elementor-title { + text-align: right; + color: #d5dadf; } + .elementor-panel .elementor-panel-footer-sub-menu-item .elementor-description { + width: 95px; + text-align: right; + font-size: 11px; + font-style: italic; + color: #a4afb7; } + .elementor-panel #elementor-panel-footer-help-title { + text-align: right; + padding: 10px 0; + color: #d5dadf; } + .elementor-panel #elementor-panel-footer-responsive > i { + display: block; + height: 100%; + line-height: 40px; } + .elementor-panel #elementor-panel-footer-saver-publish { + width: 80px; } + .elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state i { + margin-left: 0; } + .elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state #elementor-panel-saver-button-publish-label { + display: none; } + .elementor-panel #elementor-panel-footer-saver-options { + width: 35px; + border-right: 1px solid #495157; } + .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper { + font-size: 11px; + font-style: italic; + color: #a4afb7; + padding: 5px 0 15px; } + .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper:not(.elementor-state-active) .elementor-state-icon { + display: none; } + .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time { + border-bottom: 1px dotted transparent; + -webkit-transition: all ease-in-out .3s; + -o-transition: all ease-in-out .3s; + transition: all ease-in-out .3s; + cursor: pointer; } + .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time:hover { + border-bottom-color: inherit; } + .elementor-panel .elementor-disabled { + cursor: default; } + .elementor-panel #elementor-panel-saver-button-preview a { + color: #a4afb7; } + .elementor-panel #elementor-panel-saver-button-publish, .elementor-panel #elementor-panel-saver-button-save-options { + font-size: 11px; + text-transform: uppercase; + height: 26px; } + .elementor-panel #elementor-panel-saver-button-publish.elementor-disabled, .elementor-panel #elementor-panel-saver-button-save-options.elementor-disabled { + background-color: #556068; + color: #a4afb7; } + .elementor-panel #elementor-panel-saver-button-publish { + width: 100%; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + .elementor-panel #elementor-panel-saver-button-save-options { + width: 25px; } + +#elementor-panel-inner { + position: relative; + height: 100%; + -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); + box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); } + +#elementor-panel-content-wrapper { + position: absolute; + bottom: 40px; + top: 40px; + left: 0; + width: 100%; } + +.elementor-panel-container { + clear: both; + padding-left: 15px; + padding-right: 15px; } + +.media-modal.wp-core-ui input { + width: auto; } + +.media-modal.wp-core-ui fieldset { + padding: 0; + border: 0; } + +.media-modal.wp-core-ui .wp-clearfix::after { + content: ''; + display: table; + clear: both; } + +.elementor-control { + background-color: #fff; + position: relative; + padding: 0 20px 15px; } + .elementor-control a { + font-weight: 500; + text-decoration: none; + border-bottom: 1px dotted transparent; + -webkit-transition: all ease-in-out .3s; + -o-transition: all ease-in-out .3s; + transition: all ease-in-out .3s; } + .elementor-control a:hover { + border-bottom-color: inherit; } + .elementor-control .elementor-control-content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + .elementor-control .elementor-control-title { + font-size: 12px; + line-height: 1; + margin-left: 5px; } + .elementor-control .elementor-control-spinner { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-control.elementor-control-type-divider { + padding: 0; + background-color: transparent; } + .elementor-control.elementor-control-type-divider .elementor-control-content { + border-width: 0; + border-color: #e6e9ec; + border-style: solid; + border-top-width: 1px; + background-color: #ffffff; + height: 15px; } + .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp { + margin-top: 15px; } + .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before { + content: ''; + height: 1px; + display: block; + margin-bottom: 15px; + background-color: transparent; } + .elementor-control.elementor-control-separator-before { + padding-top: 15px; } + .elementor-control.elementor-control-separator-before:before { + content: ''; + position: absolute; + height: 1px; + width: 100%; + top: 0; + left: 0; + background-color: #e6e9ec; } + .elementor-control.elementor-control-separator-after:after { + content: ''; + position: absolute; + height: 1px; + width: 100%; + bottom: 0; + left: 0; + background-color: #e6e9ec; } + .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs, + .elementor-control.elementor-control-separator-after + .elementor-control-separator-default { + padding-top: 15px; } + .elementor-control.elementor-control-deprecated { + color: #b01b1b; } + .elementor-control.elementor-control-deprecated .elementor-control-field-description { + color: #b01b1b; } + .elementor-control.elementor-control-hidden-label > * > .elementor-control-title, .elementor-control.elementor-control-hidden-label > * > * > .elementor-control-title { + display: none; } + .elementor-control.elementor-hidden-control { + display: none; } + .elementor-control.elementor-control-type-heading .elementor-control-title { + font-weight: bold; + margin: 0; } + body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop { + display: none; } + body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet { + display: none; } + body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile { + display: none; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper { + position: relative; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper select { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + color: #495157; + font-size: 12px; + font-family: inherit; + font-weight: inherit; + font-style: inherit; + text-transform: inherit; + letter-spacing: inherit; + line-height: inherit; + -webkit-flex-basis: 100%; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + padding-right: 5px; + padding-left: 20px; + cursor: pointer; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after { + font-family: eicons; + content: '\e955'; + font-size: 12px; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + left: 5px; + pointer-events: none; } + .elementor-control .select2-container { + width: 100% !important; + outline: none; } + .elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear { + display: none; } + .elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice { + line-height: 1.5; + font-size: 0.9em; + border: none; + -webkit-border-radius: 0; + border-radius: 0; } + .elementor-control .select2-container.select2-container--default .select2-selection__rendered { + line-height: 27px; } + .elementor-control .select2-selection { + outline: none; } + .elementor-control .select2-selection--single { + height: 27px; } + .elementor-control .select2-selection__rendered { + line-height: 27px; } + .elementor-control .select2-selection__arrow { + height: 27px; + top: 0; } + +.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before, +.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before { + content: '\f0d7'; } + +.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before, +.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before { + content: ""; } + +.elementor-panel-heading { + display: table; + table-layout: fixed; + height: 40px; + padding: 0 20px; + width: 100%; + border-bottom: 1px solid #e6e9ec; + cursor: pointer; } + .elementor-panel-heading > * { + display: table-cell; + vertical-align: middle; } + .elementor-panel-heading-toggle { + width: 20px; + color: #495157; } + .elementor-panel-heading-title { + color: #495157; + font-weight: bold; } + +.elementor-control-wp { + line-height: 1.5; } + .elementor-control-wp p { + margin: 15px 0; } + +.elementor-control-field { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-label-block > .elementor-control-content > .elementor-control-field { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + width: 100%; + margin-top: 10px; } + +.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic) > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + margin-top: 0; } + +.elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-title { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; } + +.elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + width: 55%; + -webkit-flex-shrink: 1; + -ms-flex-negative: 1; + flex-shrink: 1; + margin-right: auto; } + +.elementor-control-field-description { + margin-top: 10px; } + +.elementor-group-control-attachment_alert .elementor-control-field-description { + margin-top: 0; } + +.elementor-required { + color: #b01b1b; } + +.elementor-choices { + display: table; + width: 100%; + height: 27px; + background-color: #a4afb7; + text-align: center; + border-spacing: 1px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-choices input { + display: none; } + .elementor-choices input:checked + .elementor-choices-label { + color: #fff; } + .elementor-choices input:not(:checked) + .elementor-choices-label { + background-color: #fff; + color: #a4afb7; } + .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + .elementor-choices input:not(:checked) + .elementor-choices-label:last-child { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-choices .elementor-choices-label { + display: table-cell; + vertical-align: middle; + font-size: 12px; + -webkit-transition: all .5s; + -o-transition: all .5s; + transition: all .5s; + cursor: pointer; } + +.elementor-units-choices { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: left; } + .elementor-units-choices input { + display: none; } + .elementor-units-choices input:not(:checked) + label { + color: #c2cbd2; } + .elementor-units-choices input:checked + label { + text-decoration: underline; } + .elementor-units-choices label { + cursor: pointer; + padding: 0 2px; + text-transform: uppercase; + font-size: 9px; } + +.elementor-control-start-end .eicon-h-align-left, .elementor-control-start-end .eicon-h-align-right { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.elementor-control-responsive-switchers { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin-left: 5px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher { + display: inline-block; + -webkit-border-radius: 50%; + border-radius: 50%; + height: 18px; + width: 18px; + background-color: #a4afb7; + cursor: pointer; + position: relative; + color: #fff; + font-size: 8px; + text-align: center; + -webkit-transition: background-color .5s; + -o-transition: background-color .5s; + transition: background-color .5s; } + .elementor-control-responsive-switchers .elementor-responsive-switcher:not(:first-child) { + margin-right: 5px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher:hover { + background-color: #c2cbd2; } + .elementor-control-responsive-switchers .elementor-responsive-switcher i { + position: relative; + display: block; + line-height: 18px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher i:before { + height: 18px; + width: 18px; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + +.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher { + background: #c2cbd2; } + .elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop) { + display: none; } + +.elementor-device-mobile .elementor-responsive-switcher-mobile { + background-color: #71d7f7; } + +.elementor-device-tablet .elementor-responsive-switcher-tablet { + background-color: #71d7f7; } + +.elementor-update-preview { + margin: 15px 15px 0; + background-color: #e6e9ec; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-update-preview-button-wrapper { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: left; } + +.elementor-update-preview-button { + padding: 8px 15px; + text-transform: uppercase; } + +.rtl .elementor-control-text_align .elementor-choices, +.rtl .elementor-control-align .elementor-choices, +.rtl .elementor-control-position .elementor-choices { + direction: ltr; } + .rtl .elementor-control-text_align .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2), + .rtl .elementor-control-align .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2), + .rtl .elementor-control-position .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .rtl .elementor-control-text_align .elementor-choices input:not(:checked) + .elementor-choices-label:last-child, + .rtl .elementor-control-align .elementor-choices input:not(:checked) + .elementor-choices-label:last-child, + .rtl .elementor-control-position .elementor-choices input:not(:checked) + .elementor-choices-label:last-child { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + +.elementor-control-direction-ltr { + direction: ltr; } + +.elementor-control-direction-rtl { + direction: rtl; } + +.elementor-control-type-box_shadow .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-box_shadow .elementor-shadow-slider { + margin-top: 10px; } + +.elementor-control-type-button .elementor-control-input-wrapper { + text-align: left; } + +.elementor-control-type-button .elementor-button { + width: auto; + height: 26px; } + +.elementor-control-type-code { + padding: 0 10px 15px; } + +.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-title { + width: 70%; } + +.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + height: 27px; + width: 30%; } + +.elementor-group-control-css-filter .elementor-slider { + height: 6px; + -webkit-box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); } + +.elementor-group-control-css-filter .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + margin-top: 0; + margin-bottom: 5px; } + +.elementor-group-control-blur .elementor-slider { + background: url("../images/blur.png"); + -webkit-background-size: cover; + background-size: cover; + background-position: center; } + +.elementor-group-control-contrast .elementor-slider { + background: url("../images/contrast.png"); + -webkit-background-size: 100% 100%; + background-size: 100% 100%; } + +.elementor-group-control-hue .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(red), color-stop(orange), color-stop(yellow), color-stop(greenyellow), color-stop(limegreen), color-stop(deepskyblue), color-stop(blue), color-stop(95%, darkviolet)); + background-image: -webkit-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); + background-image: -o-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); + background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); } + +.elementor-group-control-saturate .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(gray), to(red)); + background-image: -webkit-linear-gradient(left, gray, red); + background-image: -o-linear-gradient(left, gray, red); + background-image: linear-gradient(to right, gray, red); } + +.elementor-group-control-brightness .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(black), to(white)); + background-image: -webkit-linear-gradient(left, black, white); + background-image: -o-linear-gradient(left, black, white); + background-image: linear-gradient(to right, black, white); } + +.elementor-control-type-dimensions .elementor-control-dimensions { + overflow: hidden; } + +.elementor-control-type-dimensions li { + float: left; + width: 20%; } + .elementor-control-type-dimensions li input, + .elementor-control-type-dimensions li .elementor-link-dimensions { + display: block; + text-align: center; + width: 100%; + border-color: #a4afb7; + height: 27px; } + .elementor-control-type-dimensions li input { + border-left: none; + -webkit-border-radius: 0; + border-radius: 0; + padding: 4px 0; } + .elementor-control-type-dimensions li input:focus + .elementor-control-dimension-label { + color: #a4afb7; } + .elementor-control-type-dimensions li .elementor-link-dimensions { + border: 1px solid #a4afb7; + border-left: none; + background-color: #fff; + padding: 0; + outline: none; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + cursor: pointer; } + .elementor-control-type-dimensions li:first-child input { + border-left: 1px solid #a4afb7; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + +.elementor-control-type-dimensions .elementor-control-dimension-label { + display: block; + text-align: center; + color: #d5dadf; + font-size: 9px; + text-transform: uppercase; + padding-top: 5px; } + +.elementor-control-type-dimensions .elementor-link-dimensions.unlinked { + background-color: #fff; } + .elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked { + display: none; } + +.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) { + background-color: #a4afb7; } + .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked { + display: none; } + +.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked { + color: #fff; } + +.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails { + display: none; } + +.elementor-control-type-gallery .elementor-control-gallery-thumbnails { + overflow: hidden; + margin-top: 20px; + cursor: pointer; } + +.elementor-control-type-gallery .elementor-control-gallery-thumbnail { + width: 40px; + height: 40px; + -webkit-background-size: cover; + background-size: cover; + background-position: 50% 50%; + float: right; + margin-bottom: 10px; } + .elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)) { + margin-left: 10px; } + +.elementor-control-type-gallery .elementor-control-gallery-add { + width: 100%; + height: 30px; + color: #fff; + background-color: #a4afb7; + margin-top: 10px; + text-transform: uppercase; } + +.elementor-control-type-gallery .elementor-control-gallery-clear { + color: #b01b1b; + cursor: pointer; } + +.elementor-control-type-hidden { + display: none !important; } + +.elementor-control-type-icon .select2-selection__rendered .fa { + margin-right: 3px; } + +.elementor-control-type-image_dimensions .elementor-control-field-description { + margin: 0 0 15px; + line-height: 1.4; } + +.elementor-control-type-image_dimensions .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-field { + width: 65px; + float: right; } + .elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus + .elementor-image-dimensions-field-description { + color: #a4afb7; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-separator { + width: 20px; + text-align: center; + float: right; + padding-top: 4px; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description { + display: block; + text-transform: uppercase; + margin-top: 5px; + color: #d5dadf; + font-size: 9px; + text-align: center; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button { + float: left; + height: 27px; + width: 65px; } + +.elementor-control-type-media .elementor-control-input-wrapper { + padding: 7px; + border: 1px solid; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; } + .elementor-control-type-media .elementor-control-input-wrapper:not(:hover) { + border-color: #d5dadf; } + .elementor-control-type-media .elementor-control-input-wrapper:not(:hover) .elementor-control-media-upload-button { + background-color: #d5dadf; } + .elementor-control-type-media .elementor-control-input-wrapper:hover { + border-color: #a4afb7; } + .elementor-control-type-media .elementor-control-input-wrapper:hover .elementor-control-media-upload-button { + background-color: #a4afb7; } + +.elementor-control-type-media .elementor-control-media { + cursor: pointer; } + .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area { + display: none; } + .elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button { + display: none; } + +.elementor-control-type-media .fa-plus-circle { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + color: #fff; + font-size: 20px; } + +.elementor-control-type-media .elementor-control-media-area { + background-image: -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + background-image: -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + background-image: linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + -webkit-background-size: 16px 16px; + background-size: 16px 16px; + background-position: 0 0, 8px 8px; + background-color: #f6f6f6; + overflow: hidden; } + .elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete { + -webkit-box-shadow: none; + box-shadow: none; + bottom: -30px; } + .elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image { + opacity: .9; } + .elementor-control-type-media .elementor-control-media-area i { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + color: rgba(255, 255, 255, 0.7); + font-size: 21px; } + +.elementor-control-type-media .elementor-control-media-delete { + position: absolute; + bottom: 0; + left: 0; + right: 0; + text-align: center; + padding: 9.5px; + font-size: 11px; + color: #fff; + background-color: #a4afb7; + text-transform: uppercase; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + -webkit-box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); } + +.elementor-control-type-media .elementor-control-media-image { + height: 100%; + -webkit-background-size: cover; + background-size: cover; + background-position: center; } + +.elementor-control-type-number .elementor-control-input-wrapper { + max-width: 80px; } + +.elementor-control-type-order .elementor-control-oreder-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +.elementor-control-type-order input { + display: none; } + .elementor-control-type-order input:checked + .elementor-control-order-label { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.elementor-control-type-order select { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-control-type-order select:not(:focus) ~ .elementor-control-order-label { + border-color: #d5dadf; } + .elementor-control-type-order select:focus ~ .elementor-control-order-label { + border-color: #a4afb7; } + +.elementor-control-type-order .elementor-control-order-label { + position: relative; + padding: 0; + width: 40px; + border: 1px solid; + font-size: 10px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin-left: -3px; + background-color: #fff; + cursor: pointer; } + .elementor-control-type-order .elementor-control-order-label i { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + +.elementor-control-type-popover_toggle input { + display: none; } + +.elementor-control-type-popover_toggle label { + cursor: pointer; } + +.elementor-control-type-popover_toggle .elementor-control-input-wrapper { + direction: ltr; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked + .elementor-control-popover-toggle-toggle-label { + color: #71d7f7; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked) ~ .elementor-control-popover-toggle-reset-label { + display: none; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label { + color: #c2cbd2; + padding-left: 5px; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label { + width: 50px; + height: 27px; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; } + +.elementor-control-type-repeater, +.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab) { + padding-right: 10px; + padding-left: 10px; + padding-bottom: 15px; } + +.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove { + display: none; } + +.elementor-control-type-repeater .elementor-repeater-fields { + margin: 10px 0; } + +.elementor-control-type-repeater .elementor-repeater-row-controls { + border: 1px solid #d5dadf; + border-top-width: 0; + padding-top: 15px; } + .elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable) { + display: none; } + .elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active { + -webkit-transform: translateY(0); + transform: translateY(0); + border-width: 0; } + +.elementor-control-type-repeater .elementor-repeater-row-tools { + display: table; + table-layout: fixed; + width: 100%; + color: #556068; + background-color: #d5dadf; + height: 40px; + border-spacing: 1px; + -webkit-transition: all .5s; + -o-transition: all .5s; + transition: all .5s; } + .elementor-control-type-repeater .elementor-repeater-row-tools:hover { + background-color: #a4afb7; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div { + display: table-cell; + text-align: center; + vertical-align: middle; + cursor: pointer; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div:not(.elementor-repeater-row-handle-sortable) { + background-color: #fff; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div:hover { + opacity: .95; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title { + text-align: right; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa { + margin-left: 5px; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool { + width: 40px; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable { + cursor: move; + width: 10px; + color: #fff; } + +.elementor-control-type-repeater .elementor-button-wrapper { + text-align: center; + padding: 10px; } + +.elementor-control-type-section { + margin-top: 10px; + padding: 0; } + .elementor-control-type-section.elementor-open { + padding-bottom: 15px; } + .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before { + display: none; } + +.elementor-control-type-slider--multiple { + margin-bottom: 14px; } + .elementor-control-type-slider--multiple .elementor-slider { + margin-top: 12px; + width: 98%; } + +.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle { + -webkit-border-radius: 0; + border-radius: 0; + width: 10px; + -webkit-transform: translateY(calc(50% - 14px)) translateX(-4px); + transform: translateY(calc(50% - 14px)) translateX(-4px); } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle:after { + content: ''; + position: absolute; + top: 2px; + height: 12px; + width: 11px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + background-color: #fff; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after { + left: 5px; + -webkit-box-shadow: 2px -2px 3px 0px rgba(0, 0, 0, 0.1); + box-shadow: 2px -2px 3px 0px rgba(0, 0, 0, 0.1); } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-upper:after { + right: 5px; + -webkit-box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); + box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); } + +.elementor-control-type-slider:not(.elementor-control-type-slider--multiple) .elementor-slider { + display: inline-block; + width: 70%; } + +.elementor-slider { + margin: 10px auto; + height: 4px; + background-color: #d5dadf; + -webkit-border-radius: 5px; + border-radius: 5px; + position: relative; + cursor: pointer; } + .elementor-slider-input { + width: 30%; + float: left; } + .elementor-slider-input input { + max-width: 80%; + float: left; + padding: 5px 5px; } + .elementor-slider__extra { + position: relative; } + .elementor-slider__labels { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-slider__label { + font-size: 9px; + color: #c2cbd2; } + .elementor-slider__scales { + position: absolute; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: space-evenly; + -webkit-justify-content: space-evenly; + -ms-flex-pack: space-evenly; + justify-content: space-evenly; + width: 100%; + margin-top: 4px; } + .elementor-slider__scale { + width: 1px; + height: 21px; + background-color: #a4afb7; } + .elementor-slider .noUi-handle { + height: 16px; + width: 16px; + background-color: #fff; + left: 0; + -webkit-transform: translateY(calc(50% - 14px)) translateX(-8px); + transform: translateY(calc(50% - 14px)) translateX(-8px); + position: absolute; + -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + -webkit-border-radius: 50%; + border-radius: 50%; } + .elementor-slider .noUi-connects { + position: absolute; + width: 100%; + height: 5px; } + .elementor-slider .noUi-connect { + position: absolute; + z-index: 0; + top: 0; + left: 0; + height: 100%; + width: 100%; + will-change: transform; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + background-color: #a4afb7; } + .elementor-slider .noUi-tooltip { + position: absolute; + top: calc(100% + 5px); + left: calc(50% - 4px); + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + font-size: 10px; } + +.elementor-control-type-structure .elementor-control-structure-preset { + border: 1px solid #e6e9ec; + padding: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) { + display: inline-block; + cursor: pointer; + height: 50px; } + .elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg { + height: 100%; } + .elementor-control-type-structure .elementor-control-structure-preset path { + fill: #e6e9ec; } + +.elementor-control-type-structure .elementor-control-structure-current-preset { + margin-top: 15px; } + .elementor-control-type-structure .elementor-control-structure-current-preset svg { + display: block; + width: 100%; } + +.elementor-control-type-structure .elementor-control-structure-reset { + padding: 10px 0 0 2px; + font-size: 11px; + cursor: pointer; + color: #a4afb7; } + .elementor-control-type-structure .elementor-control-structure-reset i { + margin-left: 8px; } + +.elementor-control-type-structure .elementor-control-structure-title, .elementor-control-type-structure .elementor-control-structure-more-presets-title { + color: #495157; + font-weight: bold; + padding: 13.5px 20px; + position: relative; } + .elementor-control-type-structure .elementor-control-structure-title:before, .elementor-control-type-structure .elementor-control-structure-title:after, .elementor-control-type-structure .elementor-control-structure-more-presets-title:before, .elementor-control-type-structure .elementor-control-structure-more-presets-title:after { + content: ''; + position: absolute; + left: 0; + right: 0; } + .elementor-control-type-structure .elementor-control-structure-title:before, .elementor-control-type-structure .elementor-control-structure-more-presets-title:before { + top: 0; + background-color: #e6e9ec; + -webkit-transform: translateY(-100%); + transform: translateY(-100%); } + .elementor-control-type-structure .elementor-control-structure-title:after, .elementor-control-type-structure .elementor-control-structure-more-presets-title:after { + bottom: 0; + height: 1px; + background-color: #e6e9ec; } + +.elementor-control-type-structure .elementor-control-structure-title { + margin: 10px -20px 0; } + .elementor-control-type-structure .elementor-control-structure-title:before { + height: 10px; + -webkit-box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); + box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); } + +.elementor-control-type-structure .elementor-control-structure-more-presets-title { + margin: 15px -20px 0; } + .elementor-control-type-structure .elementor-control-structure-more-presets-title:before { + height: 3px; } + +.elementor-control-type-structure .elementor-control-structure-more-presets { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-control-type-structure .elementor-control-structure-more-presets input { + display: none; } + .elementor-control-type-structure .elementor-control-structure-more-presets input:checked + .elementor-control-structure-preset { + border: 1px solid #a4afb7; } + .elementor-control-type-structure .elementor-control-structure-more-presets input:checked + .elementor-control-structure-preset path { + fill: #a4afb7; } + +.elementor-control-type-structure .elementor-control-structure-preset-wrapper { + margin-top: 15px; } + +.elementor-control-type-structure .elementor-control-structure-preset-title { + text-align: center; + padding-top: 5px; + font-style: italic; + font-size: 11px; + color: #a4afb7; } + +.elementor-control-type-switcher.elementor-label-inline > .elementor-control-content .elementor-control-field .elementor-control-title { + width: 70%; } + +.elementor-control-type-switcher.elementor-label-inline > .elementor-control-content .elementor-control-field .elementor-control-input-wrapper { + width: 30%; } + +.elementor-control-type-switcher .elementor-control-input-wrapper { + text-align: left; } + +.elementor-control-type-switcher .elementor-switch { + position: relative; + display: inline-block; + vertical-align: top; + width: 49px; + height: 20px; + background-color: white; + -webkit-border-radius: 18px; + border-radius: 18px; + cursor: pointer; } + +.elementor-control-type-switcher .elementor-switch-input { + display: none; } + +.elementor-control-type-switcher .elementor-switch-label { + position: relative; + display: block; + height: inherit; + font-size: 7px; + text-transform: uppercase; + background: #eceeef; + -webkit-border-radius: inherit; + border-radius: inherit; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15); + -webkit-transition: 0.15s ease-out; + -o-transition: 0.15s ease-out; + transition: 0.15s ease-out; + -webkit-transition-property: opacity, background; + -o-transition-property: opacity, background; + transition-property: opacity, background; } + +.elementor-control-type-switcher .elementor-switch-label:before, .elementor-control-type-switcher .elementor-switch-label:after { + position: absolute; + top: 0; + width: 50%; + text-align: center; + line-height: 20px; + -webkit-transition: inherit; + -o-transition: inherit; + transition: inherit; } + +.elementor-control-type-switcher .elementor-switch-label:before { + content: attr(data-off); + right: 3px; + color: #a4afb7; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); } + +.elementor-control-type-switcher .elementor-switch-label:after { + content: attr(data-on); + left: 3px; + color: white; + text-shadow: 0 1px rgba(0, 0, 0, 0.2); + opacity: 0; } + +.elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label { + background: #71d7f7; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), inset 0 0 3px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), inset 0 0 3px rgba(0, 0, 0, 0.2); } + .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label:before { + opacity: 0; } + .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label:after { + opacity: 1; } + +.elementor-control-type-switcher .elementor-switch-handle { + position: absolute; + top: 1px; + left: 1px; + width: 18px; + height: 18px; + background: white; + -webkit-border-radius: 10px; + border-radius: 10px; + -webkit-transition: left 0.15s ease-out; + -o-transition: left 0.15s ease-out; + transition: left 0.15s ease-out; } + +.elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-handle { + left: 30px; + -webkit-box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.2); + box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.2); } + +.elementor-control-type-tabs { + font-size: 0.8em; + color: #a4afb7; + text-transform: uppercase; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +.elementor-control-type-tab { + text-align: center; + width: 100%; + padding: 0; + line-height: 27px; + border-top: 1px solid #a4afb7; + border-bottom: 1px solid #a4afb7; + border-left: 1px solid #a4afb7; + cursor: pointer; } + .elementor-control-type-tab:first-child { + border-right: 1px solid #a4afb7; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; } + .elementor-control-type-tab:last-child { + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; } + .elementor-control-type-tab.elementor-tab-active { + background-color: #a4afb7; + color: #ffffff; } + +.elementor-tab-close { + display: none !important; } + +.elementor-control-type-text_shadow .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-text_shadow .elementor-shadow-slider { + margin-top: 10px; } + +.elementor-control-type-textarea textarea { + display: block; } + +.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more { + display: none; } + +.elementor-control-type-url .elementor-control-url-external-show .elementor-input, +.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style { + padding-right: 46px; + height: 26px; } + +.elementor-control-type-url .elementor-control-input-wrapper { + position: relative; } + +.elementor-control-type-url .elementor-control-url-more { + position: absolute; + top: 0; + right: 0; + height: 26px; + width: 40px; + border-left: 1px solid #d5dadf; + cursor: pointer; + font-size: 10px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + .elementor-control-type-url .elementor-control-url-more i { + font-size: 13px; } + .elementor-control-type-url .elementor-control-url-more-input { + display: none; } + .elementor-control-type-url .elementor-control-url-more-input:not(:checked) + .elementor-control-url-more-options { + display: none; } + .elementor-control-type-url .elementor-control-url-more-options { + padding-top: 10px; } + +.elementor-control-type-url .elementor-control-url-option { + padding: 5px; + font-size: 12px; } + +.elementor-control-type-url .elementor-control-url-autocomplete-spinner { + display: none; + position: absolute; + width: 12px; + height: 12px; + top: 7px; + left: 13px; + z-index: 1; + background: #fff; } + +.elementor-control-type-url .elementor-input { + direction: ltr; } + .elementor-control-type-url .elementor-input:not(:focus) + .elementor-control-url-more { + border-color: #d5dadf; } + .elementor-control-type-url .elementor-input:focus + .elementor-control-url-more { + border-color: #a4afb7; } + +.elementor-autocomplete-menu { + position: absolute; + background: #fff; + color: #495157; + border: 1px solid #a4afb7; + margin: 0; + list-style: none; + padding: 4px 0; + height: auto; + width: 100%; + min-width: 260px; + max-width: 300px; + max-height: 200px; + overflow-y: auto; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; + cursor: default; + z-index: 1; } + .elementor-autocomplete-menu .ui-menu-item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-align-self: baseline; + -ms-flex-item-align: baseline; + align-self: baseline; + padding: 5px 8px; + font-size: 12px; + width: 100%; + line-height: 1.2; + cursor: pointer; } + .elementor-autocomplete-menu .ui-menu-item.ui-state-hover, .elementor-autocomplete-menu .ui-menu-item.ui-state-active, .elementor-autocomplete-menu .ui-menu-item.ui-state-focus { + background: #e6e9ec; } + .elementor-autocomplete-menu .elementor-autocomplete-item-info { + font-size: 10px; + padding-top: 2px; } + +.wp-picker-container.wp-picker-active { + position: absolute; + z-index: 10000; + top: -9px; + left: 7px; + background-color: #fff; + border: solid #fff; + border-width: 0 10px 0 5px; + padding-top: 10px; + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); } + .wp-picker-container.wp-picker-active .wp-color-result { + float: right; } + .wp-picker-container.wp-picker-active .wp-picker-input-wrap { + padding-left: 10px; + float: left; } + +.wp-picker-container * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.wp-picker-container .color-alpha { + width: calc( 100% - 2px * 2); + height: calc( 100% - 2px * 2); + margin: 2px; + position: absolute; + top: 0; + left: 0; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.wp-picker-container .iris-picker { + border: none; } + .wp-picker-container .iris-picker .iris-picker-inner { + width: 100%; } + +.wp-picker-container:not(.wp-picker-active) { + float: left; } + .wp-picker-container:not(.wp-picker-active) .wp-color-result { + margin: 0; } + +[class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active, +[class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active { + padding-top: 9px; } + +.wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 3px; } + +.wp-picker-container input[type="text"].wp-color-picker { + float: left; + width: 120px; + max-width: 136px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + font-size: 11px; + line-height: 12px; + padding: 7px 3px; } + +.wp-color-result { + margin: 0; + width: 48px; + height: 25px; + -webkit-transition: border .5s; + -o-transition: border .5s; + transition: border .5s; + padding: 0; + background-color: #fafafa; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; } + .wp-color-result, .wp-color-result:focus { + -webkit-box-shadow: inset 0 0 0 3px white; + box-shadow: inset 0 0 0 3px white; } + .wp-color-result:after, .wp-color-result.wp-picker-open:after { + content: none; } + .wp-color-result:hover { + border: 1px solid #a4afb7; } + .wp-color-result:focus, .wp-color-result:active { + outline: 0; } + +.wp-picker-default.button, +.wp-picker-clear.button { + height: 26px; + width: 48px; + padding: 0; + background-color: #d5dadf; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; + margin: 0; } + +.wp-picker-holder * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.wp-picker-holder .iris-square-value { + -webkit-transition: none; + -o-transition: none; + transition: none; } + +.wp-picker-open ~ .wp-picker-holder { + clear: both; + margin-bottom: 15px; } + +#elementor-mode-switcher { + position: absolute; + right: 100%; + top: 50%; + width: 15px; + height: 50px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + background-color: #e6e9ec; + font-size: 15px; + -webkit-box-shadow: -3px 1px 5px rgba(0, 0, 0, 0.1); + box-shadow: -3px 1px 5px rgba(0, 0, 0, 0.1); + cursor: pointer; } + #elementor-mode-switcher:hover { + background-color: #D30C5C; + color: #FFFFFF; } + +body.elementor-editor-preview #elementor-mode-switcher { + background-color: #D30C5C; + color: #FFFFFF; } + +#elementor-mode-switcher-inner, #elementor-mode-switcher-preview { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; } + +#elementor-mode-switcher-preview { + cursor: pointer; } + #elementor-mode-switcher-preview .fa { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + +#elementor-mode-switcher-preview-input { + display: none; } + +.elementor-revision-item__wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border: 1px solid #d5dadf; + padding: 10px 15px; + margin-bottom: 10px; + font-size: 11px; } + .elementor-revision-item__wrapper.current { + font-weight: bold; } + .elementor-revision-item__wrapper .elementor-revision-item__tools-current { + color: #D30C5C; } + +.elementor-revision-item:hover:not(.elementor-revision-current-preview) { + background-color: rgba(230, 233, 236, 0.3); } + +.elementor-revision-item:not(:hover) .elementor-revision-item__tools-delete, .elementor-revision-item.elementor-revision-current-preview .elementor-revision-item__tools-delete { + display: none; } + +.elementor-revision-item-loading .elementor-revision-item__tools-current { + display: none; } + +.elementor-revision-item-loading .elementor-revision-item__tools-delete { + display: none; } + +.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner { + display: none; } + +.elementor-revision-item__gravatar { + -webkit-border-radius: 50%; + border-radius: 50%; + overflow: hidden; } + .elementor-revision-item__gravatar img { + display: block; } + +.elementor-revision-item__details { + padding-right: 15px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + cursor: pointer; } + +.elementor-revision-item__tools-delete { + cursor: pointer; } + +.elementor-revision-meta { + padding-top: 5px; + font-size: 10px; + font-weight: bold; } + +.elementor-revision-current-preview { + background-color: #e6e9ec; } + +#elementor-restore-autosave-dialog.dialog-widget { + background-color: rgba(0, 0, 0, 0.3); } + +#elementor-panel-revisions-loading { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + #elementor-panel-revisions-loading .eicon-loading { + font-size: 50px; + color: #a4afb7; } + +.elementor-history-item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border: 1px solid #d5dadf; + padding: 10px 15px; + margin-bottom: 10px; + font-size: 11px; + line-height: 1.4; + cursor: pointer; } + .elementor-history-item:hover { + background-color: rgba(230, 233, 236, 0.3); } + .elementor-history-item:hover .elementor-history-item__icon .fa:before { + content: '\f1da'; } + .elementor-history-item-applied { + color: #a4afb7; } + .elementor-history-item-current { + background: #e6e9ec; + cursor: default; } + .elementor-history-item-current .elementor-history-item__icon .fa:before, .elementor-history-item-current:hover .elementor-history-item__icon .fa:before { + content: '\f00c'; } + .elementor-history-item__details { + width: 95%; } + .elementor-history-item__title { + font-weight: bold; } + .elementor-history-item__subtitle, .elementor-history-item__action { + font-weight: lighter; } + .elementor-history-item__action { + font-style: italic; + text-decoration: underline; } + .elementor-history-item .__icon { + float: left; } + +.elementor-history-revisions-message { + font-size: 11px; + text-align: center; + padding-top: 5px; } + +#elementor-panel-history { + padding: 20px 20px 15px; } + #elementor-panel-history.elementor-empty .elementor-history-revisions-message { + padding-top: 20px; } + #elementor-panel-history:not(.elementor-empty) { + background-color: #fff; + margin-top: 10px; } + +#elementor-panel-history-no-items { + text-align: center; } + +#elementor-preview { + background-color: #333; + position: absolute; + height: 100%; + top: 0; + right: 0; + border: 0; } + .elementor-device-desktop #elementor-preview { + overflow-y: hidden; } + body:not(.elementor-device-desktop) #elementor-preview { + overflow-y: auto; } + +#elementor-preview-responsive-wrapper { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + -webkit-transition: all .5s ease 0s; + -o-transition: all .5s ease 0s; + transition: all .5s ease 0s; } + .elementor-device-desktop #elementor-preview-responsive-wrapper { + min-width: 1025px; + margin: 0 auto; + width: 100%; + height: 100%; } + .elementor-device-tablet #elementor-preview-responsive-wrapper { + width: 768px; + height: 1025px; + padding: 40px 10px 70px; } + .elementor-device-mobile #elementor-preview-responsive-wrapper { + width: 360px; + height: 640px; + padding: 40px 10px 70px; } + body:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper { + -webkit-border-radius: 30px; + border-radius: 30px; + background-color: #111; + margin: 30px auto 80px; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +#elementor-preview-iframe { + width: 100%; + height: 100%; + background-color: #fff; } + +.tipsy { + font-size: 10px; + position: absolute; + padding: 5px; + z-index: 100000; } + +.tipsy-inner { + background-color: #000; + color: #FFF; + max-width: 200px; + padding: 6px 12px 6px; + text-align: center; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.5); + box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.5); } + +.tipsy-arrow { + position: absolute; + width: 0; + height: 0; + line-height: 0; + border: 5px dashed #000; } + +.tipsy-arrow-n { + border-bottom-color: #000; } + +.tipsy-arrow-s { + border-top-color: #000; } + +.tipsy-arrow-e { + border-left-color: #000; } + +.tipsy-arrow-w { + border-right-color: #000; } + +.tipsy-n .tipsy-arrow, .tipsy-nw .tipsy-arrow { + border-left-color: transparent; + border-right-color: transparent; + top: 0; + border-bottom-style: solid; + border-top: none; } + +.tipsy-n .tipsy-arrow { + left: 50%; + margin-left: -5px; } + +.tipsy-nw .tipsy-arrow { + left: 10px; } + +.tipsy-ne .tipsy-arrow { + top: 0; + right: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; } + +.tipsy-s .tipsy-arrow, .tipsy-se .tipsy-arrow, .tipsy-sw .tipsy-arrow { + bottom: 0; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; } + +.tipsy-s .tipsy-arrow { + left: 50%; + margin-left: -5px; } + +.tipsy-sw .tipsy-arrow { + left: 10px; } + +.tipsy-se .tipsy-arrow { + right: 10px; } + +.tipsy-e .tipsy-arrow, .tipsy-w .tipsy-arrow { + top: 50%; + margin-top: -5px; + border-top-color: transparent; + border-bottom-color: transparent; } + +.tipsy-e .tipsy-arrow { + right: 0; + border-left-style: solid; + border-right: none; } + +.tipsy-w .tipsy-arrow { + left: 0; + border-right-style: solid; + border-left: none; } + +#elementor-template-library-modal a.elementor-template-library-blank-footer-link { + font-style: normal; + text-decoration: underline; + color: #39b54a; } + #elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover { + color: #2d8e3a; } + +#elementor-template-library-header-menu { + text-align: center; + color: #6d7882; + font-size: 13px; } + +.elementor-template-library-menu-item { + display: inline-block; + padding: 17px 0; + width: 115px; + cursor: pointer; } + .elementor-template-library-menu-item.elementor-active { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #fff); + background-image: -o-linear-gradient(top, #f3f3f3, #fff); + background-image: linear-gradient(to bottom, #f3f3f3, #fff); + border-bottom: 3px solid #9b0a46; } + +#elementor-template-library-header-actions { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + #elementor-template-library-header-actions > div { + padding-left: 16px; } + +#elementor-template-library-header-preview-insert-wrapper { + cursor: default; + padding: 0 10px; } + #elementor-template-library-header-preview-insert-wrapper .elementor-button { + padding: 8px 14px; + font-size: 11px; } + #elementor-template-library-header-preview-insert-wrapper .elementor-template-library-template-insert { + color: #fff; + background-color: #39b54a; } + +#elementor-template-library-header-preview-back { + padding: 16.5px 0 15px 16.5px; + border-left: 1px solid #e6e9ec; + cursor: pointer; + -webkit-transition: color .5s; + -o-transition: color .5s; + transition: color .5s; } + #elementor-template-library-header-preview-back:not(:hover) { + color: #a4afb7; } + #elementor-template-library-header-preview-back i { + padding-left: 10px; + font-size: 18px; } + #elementor-template-library-header-preview-back i:before { + content: ""; } + +#elementor-template-library-templates { + padding: 0 15px; } + #elementor-template-library-templates[data-template-source="local"] #elementor-template-library-templates-container { + -webkit-box-shadow: 1px 1px 20px 0 rgba(0, 0, 0, 0.03); + box-shadow: 1px 1px 20px 0 rgba(0, 0, 0, 0.03); + margin-top: 10px; + margin-bottom: 45px; } + #elementor-template-library-templates[data-template-source="local"] .elementor-template-library-order-input:checked + .elementor-template-library-order-label { + color: #6d7882; } + #elementor-template-library-templates[data-template-source="remote"] #elementor-template-library-templates-container { + margin: 10px -15px 0; } + #elementor-template-library-templates[data-template-source="remote"] .elementor-template-library-order-input:checked + .elementor-template-library-order-label { + color: #495157; } + #elementor-template-library-templates[data-template-source="empty"] #elementor-template-library-order-toolbar-local, #elementor-template-library-templates[data-template-source="empty"] #elementor-template-library-footer-banner { + display: none; } + #elementor-template-library-templates.elementor-templates-filter-active #elementor-template-library-footer-banner { + display: none; } + #elementor-template-library-templates .elementor-template-library-order-input { + display: none; } + #elementor-template-library-templates .elementor-template-library-order-input:checked + .elementor-template-library-order-label { + padding-left: 8px; } + #elementor-template-library-templates .elementor-template-library-order-input:checked + .elementor-template-library-order-label:after { + font-family: eicons; + content: '\e956'; + margin-right: 3px; } + #elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse + .elementor-template-library-order-label:after { + content: '\e955'; } + +#elementor-template-library-templates-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + #elementor-template-library-templates-container .elementor-template-library-template-local .elementor-template-library-template-insert { + text-transform: none; + font-size: 12px; } + +#elementor-template-library-toolbar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-template-library-filter-toolbar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +#elementor-template-library-filter-toolbar-remote { + font-size: 11px; } + +#elementor-template-library-order { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + border-left: 1px solid #d5dadf; } + +.elementor-template-library-order-label { + text-transform: uppercase; + padding-left: 22px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +label.elementor-template-library-order-label { + cursor: pointer; } + label.elementor-template-library-order-label:hover { + color: #556068; } + +#elementor-template-library-filter { + border-left: 1px solid #d5dadf; } + #elementor-template-library-filter .select2 { + text-align: right; + margin-left: 25px; } + #elementor-template-library-filter .select2-selection__rendered { + text-transform: capitalize; } + +#select2-elementor-template-library-filter-subtype-results .select2-results__option { + text-transform: capitalize; } + +#elementor-template-library-my-favorites { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: right; + padding-right: 20px; } + +#elementor-template-library-filter-my-favorites { + display: none; } + #elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label { + color: #495157; } + #elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label i:after { + color: #D30C5C; + content: '\f004'; } + +#elementor-template-library-filter-my-favorites-label { + cursor: pointer; + text-transform: uppercase; } + #elementor-template-library-filter-my-favorites-label:hover { + color: #556068; } + #elementor-template-library-filter-my-favorites-label:hover i:after { + color: #D30C5C; } + #elementor-template-library-filter-my-favorites-label i { + padding-left: 5px; } + #elementor-template-library-filter-my-favorites-label i:after { + color: #a4afb7; + content: '\f08a'; } + +#elementor-template-library-filter-text-wrapper { + width: 200px; + position: relative; } + #elementor-template-library-filter-text-wrapper:after { + content: '\e863'; + position: absolute; + top: 50%; + left: 0; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-family: eicons; } + +#elementor-template-library-filter-text { + border: none; + border-bottom: 1px solid #d5dadf; + -webkit-border-radius: 0; + border-radius: 0; + font-size: 11px; + padding: 8px 15px 8px 0; + -webkit-transition: border 0.5s; + -o-transition: border 0.5s; + transition: border 0.5s; } + #elementor-template-library-filter-text:focus { + border-color: #c2cbd2; } + #elementor-template-library-filter-text::-webkit-input-placeholder { + font-weight: 300; + text-transform: uppercase; } + #elementor-template-library-filter-text::-ms-input-placeholder { + font-weight: 300; + text-transform: uppercase; } + #elementor-template-library-filter-text::placeholder { + font-weight: 300; + text-transform: uppercase; } + #elementor-template-library-filter-text:focus { + border-color: #c2cbd2; } + +.elementor-template-library-template-remote { + margin: 15px; + padding: 8px; + background-color: #fff; + -webkit-box-shadow: 0 1px 20px 0 rgba(0, 0, 0, 0.07); + box-shadow: 0 1px 20px 0 rgba(0, 0, 0, 0.07); + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-template-library-template-remote:hover .elementor-template-library-template-name { + display: none; } + .elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-preview { + opacity: 0; } + .elementor-template-library-template-remote:not(:hover) .elementor-template-library-favorite, + .elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-action { + display: none; } + .elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before { + position: absolute; + content: 'premium'; + text-transform: uppercase; + top: 5px; + left: 5px; + background-color: #D30C5C; + color: #d5dadf; + padding: 2px 4px 0; + font-size: 9px; + -webkit-border-radius: 2px; + border-radius: 2px; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page) { + position: relative; + width: calc(33.333% - 30px); + overflow: hidden; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page) img { + display: block; + width: 100%; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page) .elementor-template-library-template-footer { + position: absolute; + width: 100%; + bottom: 0; + right: 0; + padding: 10px; + background-color: #fff; + -webkit-transition: -webkit-transform .5s; + transition: -webkit-transform .5s; + -o-transition: transform .5s; + transition: transform .5s; + transition: transform .5s, -webkit-transform .5s; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page) .elementor-template-library-template-name { + display: none; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(:hover) .elementor-template-library-template-footer { + -webkit-transform: translateY(100%); + transform: translateY(100%); } + .elementor-template-library-template-remote .elementor-template-library-template-body { + position: relative; } + @media (max-width: 1025px) { + .elementor-template-library-template-remote .elementor-template-library-template-body { + height: 300px; } } + .elementor-template-library-template-remote .elementor-template-library-template-screenshot { + height: 100%; + -webkit-background-size: cover; + background-size: cover; + background-position-x: 50%; + -webkit-box-shadow: inset 0px -2px 15px -6px rgba(0, 0, 0, 0.07); + box-shadow: inset 0px -2px 15px -6px rgba(0, 0, 0, 0.07); } + .elementor-template-library-template-remote .elementor-template-library-template-preview { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + -webkit-transition: opacity .5s; + -o-transition: opacity .5s; + transition: opacity .5s; + cursor: pointer; } + .elementor-template-library-template-remote .elementor-template-library-template-preview i { + font-size: 20px; + color: #d5dadf; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + .elementor-template-library-template-remote .elementor-template-library-template-action { + background-color: transparent; + text-transform: none; } + .elementor-template-library-template-remote .elementor-template-library-template-action i { + margin-left: 0; } + .elementor-template-library-template-remote .elementor-template-library-template-insert { + color: #39b54a; } + .elementor-template-library-template-remote .elementor-button-go-pro { + color: #fcb92c; } + .elementor-template-library-template-remote .elementor-template-library-template-footer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + margin-top: 10px; + font-size: 11px; + line-height: 1; } + .elementor-template-library-template-remote .elementor-template-library-template-name { + text-align: right; + color: #6d7882; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + padding-left: 5px; } + .elementor-template-library-template-remote .elementor-template-library-template-favorite-input { + display: none; } + .elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked + .elementor-template-library-template-favorite-label i:before { + content: '\f004'; + color: #D30C5C; } + .elementor-template-library-template-remote .elementor-template-library-template-favorite-label { + cursor: pointer; } + .elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i { + color: #D30C5C; } + +@media (max-width: 1439px) { + .elementor-template-library-template-page { + width: calc(25% - 30px); } } + +@media (min-width: 1440px) { + .elementor-template-library-template-page { + width: calc(20% - 30px); } } + +@media (max-width: 1025px) { + .elementor-template-library-template-page { + width: calc(33.333% - 30px); } } + +.elementor-template-library-template-page .elementor-template-library-template-body { + height: 200px; } + +#elementor-template-library-order-toolbar-local, +.elementor-template-library-template-local { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 0 25px; + text-align: right; } + +#elementor-template-library-order-toolbar-local { + margin-top: 30px; } + #elementor-template-library-order-toolbar-local .elementor-template-library-order-label { + line-height: 1; + font-size: 10px; + font-weight: 500; } + #elementor-template-library-order-toolbar-local .elementor-template-library-order-label:not(:hover) { + color: #a4afb7; } + +.elementor-template-library-template-local { + height: 50px; + width: 100%; + margin-top: 1px; + background-color: #fff; + -webkit-transition: background-color .3s linear; + -o-transition: background-color .3s linear; + transition: background-color .3s linear; } + .elementor-template-library-template-local:hover { + background-color: #fafbfb; } + .elementor-template-library-template-local:not(:hover) .elementor-template-library-template-insert { + background: none; + color: #a4afb7; } + .elementor-template-library-template-local:first-child { + -webkit-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; } + .elementor-template-library-template-local:last-child { + -webkit-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; } + .elementor-template-library-template-local .elementor-template-library-template-name { + font-weight: 500; } + .elementor-template-library-template-local .elementor-template-library-template-name, + .elementor-template-library-template-local .elementor-template-library-template-meta { + padding-left: 20px; } + .elementor-template-library-template-local .elementor-template-library-template-meta { + color: #a4afb7; } + .elementor-template-library-template-local .elementor-template-library-template-name, + .elementor-template-library-template-local .elementor-template-library-template-meta, + .elementor-template-library-template-local .elementor-template-library-template-preview, + .elementor-template-library-template-local .elementor-template-library-template-action { + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + .elementor-template-library-template-local .elementor-template-library-template-controls { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-template-library-template-local .elementor-template-library-template-controls > div { + cursor: pointer; + -webkit-transition: color .5s; + -o-transition: color .5s; + transition: color .5s; } + .elementor-template-library-template-local .elementor-template-library-template-controls > div:not(:hover) { + color: #a4afb7; } + .elementor-template-library-template-local .elementor-template-library-template-insert i { + margin-left: 3px; } + .elementor-template-library-template-local .elementor-template-library-template-control-title { + margin-right: 6px; } + .elementor-template-library-template-local .elementor-template-library-template-delete:hover { + color: #f00; } + .elementor-template-library-template-local .elementor-template-library-template-export:hover i { + color: #556068; } + .elementor-template-library-template-local .elementor-template-library-template-action { + padding: 8px 18px; + margin: 0 5%; } + .elementor-template-library-template-local .elementor-template-library-template-more { + display: none; + position: absolute; + background-color: #fff; + padding: 3px 20px; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 1px 3px 11px rgba(0, 0, 0, 0.3); + box-shadow: 1px 3px 11px rgba(0, 0, 0, 0.3); + top: 100%; + left: 0; + -webkit-transform: translateX(-65%) translateY(-7px); + transform: translateX(-65%) translateY(-7px); + z-index: 1; } + .elementor-template-library-template-local .elementor-template-library-template-more:before { + content: ''; + position: absolute; + border: solid transparent; + border-width: 8px 4px; + border-bottom-color: #fff; + -webkit-transform: translateY(-100%); + transform: translateY(-100%); } + .elementor-template-library-template-local .elementor-template-library-template-more > div { + margin: 10px 0; + font-size: 11px; } + .elementor-template-library-template-local .elementor-template-library-template-more-toggle { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: left; } + .elementor-template-library-template-local .elementor-template-library-template-more-toggle i { + font-size: 16px; } + +#elementor-template-library-preview { + height: 100%; + overflow: hidden; } + #elementor-template-library-preview iframe { + height: 150%; + -webkit-transform: scale(0.666) translateX(25%) translateY(-25%); + transform: scale(0.666) translateX(25%) translateY(-25%); } + @media (max-width: 1439px) { + #elementor-template-library-preview iframe { + width: 1440px; } } + @media (min-width: 1440px) { + #elementor-template-library-preview iframe { + width: 1710px; } } + +.elementor-template-library-blank-icon { + font-size: 65px; + margin-top: 45px; + color: #c2cbd2; + line-height: 1; } + .elementor-template-library-blank-icon img { + width: 70px; } + +.elementor-template-library-blank-title { + font-size: 30px; + margin-top: 40px; } + @media (max-width: 1439px) { + .elementor-template-library-blank-title { + font-size: 25px; } } + +.elementor-template-library-blank-message { + font-size: 18px; + color: #a4afb7; + margin-top: 15px; + font-weight: 300; } + @media (max-width: 1439px) { + .elementor-template-library-blank-message { + font-size: 16px; + margin-top: 10px; } } + +#elementor-template-library-save-template-form { + margin-top: 40px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + #elementor-template-library-save-template-form > * { + height: 55px; + font-size: 16px; } + +#elementor-template-library-save-template-name { + width: 500px; + background-color: #fff; + font-weight: 300; + color: #a4afb7; + padding-right: 25px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + border: none; } + +#elementor-template-library-save-template-submit { + width: 150px; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + #elementor-template-library-save-template-submit:hover { + -webkit-box-shadow: none; + box-shadow: none; } + +#elementor-template-library-import-form { + width: 95%; + background-color: rgba(255, 255, 255, 0.5); + padding: 60px; + border: 2px dashed #d5dadf; + margin: 35px auto; + -webkit-transition: background-color 0.5s; + -o-transition: background-color 0.5s; + transition: background-color 0.5s; } + #elementor-template-library-import-form:hover { + background-color: rgba(255, 255, 255, 0.9); } + #elementor-template-library-import-form-or { + margin-top: 15px; + font-size: 18px; } + #elementor-template-library-import-form-label { + margin-top: 20px; + padding: 15px 35px; + display: inline-block; } + #elementor-template-library-import-form-input { + display: none; } + #elementor-template-library-import-form.elementor-drag-over { + border: 3px dashed #71d7f7; } + +#elementor-template-library-import .elementor-template-library-blank-icon { + margin-top: 0; } + +#elementor-template-library-import .elementor-template-library-blank-message { + margin-top: 20px; } + +.elementor-template-library-blank-footer { + position: absolute; + bottom: 70px; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + color: #a4afb7; + font-style: italic; } + @media (max-height: 700px) { + .elementor-template-library-blank-footer { + display: none; } } + +#elementor-template-library-footer-banner i { + color: #c2cbd2; + font-size: 56px; + margin-top: 40px; } + +#elementor-template-library-footer-banner .elementor-excerpt { + color: #a4afb7; + font-size: 15px; + font-weight: 500; + margin: 20px 0; } + +#elementor-template-library-templates-empty { + width: 100%; + margin-top: 40px; } + +#elementor-template-library-error-dialog .dialog-message { + text-align: start; } + +#elementor-template-library-error-info { + margin-top: 10px; } + +@media (max-width: 1439px) { + .elementor-template-library-local-column-1 { + width: 33%; } + .elementor-template-library-local-column-2 { + width: 10%; } + .elementor-template-library-local-column-3 { + width: 15%; } + .elementor-template-library-local-column-4 { + width: 15%; } + .elementor-template-library-local-column-5 { + width: 27%; } } + +@media (min-width: 1440px) { + .elementor-template-library-local-column-1 { + width: 25%; } + .elementor-template-library-local-column-2 { + width: 17%; } + .elementor-template-library-local-column-3 { + width: 17%; } + .elementor-template-library-local-column-4 { + width: 17%; } + .elementor-template-library-local-column-5 { + width: 24%; } } + +@media (max-width: 1024px) { + .elementor-template-library-local-column-3 { + display: none; } + .elementor-template-library-local-column-5 { + width: 41%; } } + +.elementor-tags-list { + display: none; + position: absolute; + width: 260px; + max-height: 300px; + overflow: auto; + padding-bottom: 5px; + background-color: #fff; + border: 1px solid #a4afb7; + -webkit-border-radius: 3px; + border-radius: 3px; + z-index: 1; } + .elementor-tags-list__group-title { + color: #495157; + font-weight: bold; + font-size: 12px; + padding: 10px 15px; } + .elementor-tags-list__item { + font-size: 10px; + padding: 6px 15px; + cursor: pointer; } + .elementor-tags-list__item:before { + content: '>'; + font-size: 8px; + padding-left: 5px; } + .elementor-tags-list__item:hover { + background-color: #e6e9ec; } + +.elementor-dynamic-cover { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + width: 100%; + height: 27px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .elementor-dynamic-cover__settings i { + color: #d5dadf; } + .elementor-dynamic-cover__settings i.fa-wrench { + cursor: pointer; } + .elementor-dynamic-cover__title { + padding: 0 8px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; } + .elementor-dynamic-cover__remove { + color: #c2cbd2; + cursor: pointer; } + .elementor-control-type-wysiwyg .elementor-dynamic-cover { + margin-top: 10px; } + +.elementor-tag-settings-popup { + position: absolute; + width: 260px; + background-color: #e6e9ec; + -webkit-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); + box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); + z-index: 1; } + .elementor-tag-settings-popup:before { + content: ''; + position: absolute; + top: -20px; + right: 5px; + border: 10px solid transparent; + border-bottom-color: #fff; } + .elementor-tag-settings-popup .elementor-control-type-section:first-child { + margin: 0; } + +.elementor-tag-controls-stack-empty { + background-color: #fff; + padding: 10px; + font-size: 13px; + text-align: center; } + +.elementor-control-dynamic.elementor-label-inline .elementor-control-field { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + +.elementor-control-dynamic-switcher { + cursor: pointer; + font-size: 9px; } + .elementor-control-dynamic-switcher i { + padding-right: 5px; } + .elementor-control-dynamic-switcher-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-dynamic-switcher-wrapper { + width: 100%; + padding-bottom: 10px; } + +.elementor-control-dynamic-value .elementor-control-tag-area { + display: none; } + +.elementor-control-dynamic-value .elementor-control-dynamic-switcher { + color: #71d7f7; } + +#elementor-toast { + position: absolute; + width: 280px; + padding: 20px; + -webkit-border-radius: 5px; + border-radius: 5px; + color: #d5dadf; + background-color: rgba(0, 0, 0, 0.8); + z-index: 10000; } + #elementor-toast .dialog-message { + font-size: 13px; } + #elementor-toast .dialog-buttons-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + margin-top: 15px; } + #elementor-toast .dialog-button { + color: #fcb92c; + margin: 0 5px; + text-transform: uppercase; + cursor: pointer; } + #elementor-toast .dialog-button:last-child { + margin-left: 0; } + +.elementor-context-menu { + position: absolute; + width: 200px; + background-color: #fff; + border: 1px solid #e6e9ec; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.09); + box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.09); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + z-index: 3; } + .elementor-context-menu-list__group { + padding: 5px 0; } + .elementor-context-menu-list__group:not(:last-child) { + border-bottom: 1px solid #e6e9ec; } + .elementor-context-menu-list__item { + padding: 5px 10px; + padding-left: 20px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + cursor: pointer; } + .elementor-context-menu-list__item--disabled { + cursor: default; + color: #d5dadf; } + .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover { + background-color: #71d7f7; } + .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover > * { + color: #fff; } + .elementor-context-menu-list__item__icon { + width: 20px; + color: #c2cbd2; } + .elementor-context-menu-list__item__title { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + .elementor-context-menu-list__item__shortcut { + color: #d5dadf; } + .elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover { + background-color: #d72b3f; } + .elementor-context-menu .eicon-pro-icon { + color: #fcb92c; } + +.elementor-right-click-introduction { + position: absolute; + width: 250px; + padding: 30px 20px; + background-color: #fff; + -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.07); + box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.07); + text-align: center; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-right-click-introduction:before { + content: ''; + position: absolute; + border: solid transparent; + border-width: 7px 5px; + border-bottom-color: #fff; + top: -14px; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + .elementor-right-click-introduction .dialog-header { + color: #6d7882; + font-size: 16px; } + .elementor-right-click-introduction .dialog-message { + font-size: 13px; + line-height: 1.6; + margin-top: 10px; + color: #a4afb7; } + .elementor-right-click-introduction .dialog-buttons-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + margin-top: 25px; } + .elementor-right-click-introduction .dialog-button { + font-size: 11px; } + .elementor-right-click-introduction .dialog-ok { + padding: 7px 27px; + text-transform: capitalize; } + .elementor-right-click-introduction .dialog-learn-more { + color: #39b54a; + margin-left: 15px; + cursor: pointer; } + +#elementor-hotkeys { + text-align: right; } + #elementor-hotkeys__content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 100%; + overflow: hidden; + margin-bottom: 30px; } + @media (max-width: 1024px) { + #elementor-hotkeys__content { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } } + #elementor-hotkeys__actions .elementor-hotkeys__list { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + @media (max-width: 1024px) { + #elementor-hotkeys__actions .elementor-hotkeys__list { + -webkit-border-radius: 3px; + border-radius: 3px; } } + @media (min-width: 1025px) { + #elementor-hotkeys__actions .elementor-hotkeys__header, + #elementor-hotkeys__actions .elementor-hotkeys__list { + padding-left: 25px; } } + @media (min-width: 1440px) { + #elementor-hotkeys__actions .elementor-hotkeys__header, + #elementor-hotkeys__actions .elementor-hotkeys__list { + padding-left: 50px; } } + #elementor-hotkeys__navigation .elementor-hotkeys__list { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + @media (max-width: 1024px) { + #elementor-hotkeys__navigation .elementor-hotkeys__list { + -webkit-border-radius: 3px; + border-radius: 3px; } } + @media (min-width: 1025px) { + #elementor-hotkeys__navigation .elementor-hotkeys__header { + padding-right: 25px; } } + @media (min-width: 1440px) { + #elementor-hotkeys__navigation .elementor-hotkeys__header { + padding-right: 50px; } } + @media (min-width: 1025px) { + #elementor-hotkeys__navigation .elementor-hotkeys__list { + padding-right: 15px; } } + @media (min-width: 1440px) { + #elementor-hotkeys__navigation .elementor-hotkeys__list { + padding-right: 40px; } } + +.elementor-hotkeys__col { + width: 50%; } + @media (max-width: 1024px) { + .elementor-hotkeys__col { + width: 100%; } } + +.elementor-hotkeys__header, .elementor-hotkeys__list { + width: 100%; } + +.elementor-hotkeys__header { + padding: 10px 30px; + font-weight: 500; } + @media (max-width: 479px) { + .elementor-hotkeys__header { + padding-right: 10px; + padding-left: 10px; } } + +.elementor-hotkeys__list { + background-color: #ffffff; + height: calc(100% - 42px); + padding: 10px 20px; } + @media (max-width: 479px) { + .elementor-hotkeys__list { + padding: 0; } } + @media (max-width: 1024px) { + .elementor-hotkeys__list { + margin-bottom: 30px; } } + @media (max-width: 1024px) { + .elementor-hotkeys__list { + height: auto; } } + +.elementor-hotkeys__item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 20px 10px; + border-bottom: 1px solid #eceeef; } + .elementor-hotkeys__item:last-child { + margin-bottom: 30px; } + @media (max-width: 479px) { + .elementor-hotkeys__item:last-child { + margin-bottom: 0; } } + .elementor-hotkeys__item--label { + font-size: 13px; + font-weight: 400; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-hotkeys__item--shortcut { + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .elementor-hotkeys__item--shortcut span { + position: relative; + background-color: #eceeef; + padding: 5px 12px; + margin-right: 27px; + -webkit-border-radius: 3px; + border-radius: 3px; } + @media (max-width: 479px) { + .elementor-hotkeys__item--shortcut span { + padding: 4px 9px; + margin-right: 23px; } } + .elementor-hotkeys__item--shortcut span:after { + content: '+'; + position: absolute; + right: -18px; + width: 9px; + text-align: center; } + @media (max-width: 479px) { + .elementor-hotkeys__item--shortcut span:after { + right: -16px; } } + .elementor-hotkeys__item--shortcut span:last-child { + margin-right: 0; } + .elementor-hotkeys__item--shortcut span:last-child:after { + display: none; } + +.ui-resizable-n { + top: -5px; } + +.ui-resizable-e { + right: -5px; } + +.ui-resizable-s { + bottom: -5px; } + +.ui-resizable-w { + left: -5px; } + +.ui-resizable-ne { + top: -5px; + right: -5px; } + +.ui-resizable-nw { + top: -5px; + left: -5px; } + +.ui-resizable-se { + bottom: -5px; + right: -5px; } + +.ui-resizable-sw { + bottom: -5px; + left: -5px; } + +.ui-resizable-n, .ui-resizable-s { + left: 0; + height: 10px; + width: 100%; + cursor: ns-resize; } + +.ui-resizable-e, .ui-resizable-w { + top: 0; + height: 100%; + width: 10px; + cursor: ew-resize; } + +.ui-resizable-ne, .ui-resizable-nw, .ui-resizable-se, .ui-resizable-sw { + height: 15px; + width: 15px; } + +.ui-resizable-nw, .ui-resizable-se { + cursor: nwse-resize; } + +.ui-resizable-ne, .ui-resizable-sw { + cursor: nesw-resize; } + +.ui-resizable-handle { + position: absolute; } + +.ui-resizable-resizing { + pointer-events: none; } + +#elementor-navigator { + position: fixed; + top: 100px; + width: 240px; + height: 339px; + left: 30px; + background-color: #fff; + -webkit-box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; + z-index: 2; + display: none; } + body.elementor-navigator-docked #elementor-navigator { + top: 0; + left: 0; + height: 100%; } + body:not(.elementor-navigator-docked) #elementor-navigator { + -webkit-border-radius: 5px; + border-radius: 5px; } + #elementor-navigator__inner { + height: 100%; + background-color: #e6e9ec; } + #elementor-navigator__header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 12px 10px; + background-color: #fff; + border-bottom: 1px solid #e6e9ec; + cursor: move; } + #elementor-navigator__close, #elementor-navigator__toggle-all { + -webkit-transition: color .5s; + -o-transition: color .5s; + transition: color .5s; + cursor: pointer; } + #elementor-navigator__close:not(:hover), #elementor-navigator__toggle-all:not(:hover) { + color: #a4afb7; } + #elementor-navigator__toggle-all { + font-size: 13px; } + #elementor-navigator__close { + font-size: 11px; } + #elementor-navigator__elements { + height: calc(100% - 49px); + overflow: auto; + position: relative; } + .elementor-navigator-docked #elementor-navigator__elements { + height: calc(100% - 35px); } + #elementor-navigator__footer { + position: absolute; + width: 100%; + left: 0; + bottom: 0; + text-align: center; + background-color: #fff; + border-top: 1px solid #e6e9ec; + color: #a4afb7; } + .elementor-navigator-docked #elementor-navigator__footer { + display: none; } + +.elementor-navigator__item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: 32px; + padding-left: 4px; + font-size: 12px; + border-bottom: 1px solid #e6e9ec; + cursor: pointer; } + .elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .elementor-navigator__item > * { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-navigator__item + .elementor-navigator__elements { + display: none; } + +.elementor-navigator__elements .elementor-empty-view { + padding: 10px; + border-bottom: 1px solid #e6e9ec; } + .elementor-navigator__elements .elementor-empty-view__title { + margin-right: 23px; + color: #c2cbd2; + font-size: 10px; + font-style: italic; } + +.elementor-navigator__elements .ui-sortable-helper { + background-color: #fff; + -webkit-box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1); + box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1); + -webkit-transform: rotate(4deg); + transform: rotate(4deg); + border: 1px solid #e6e9ec; + pointer-events: none; } + +.elementor-navigator__elements .ui-sortable-placeholder { + background-color: #f1f3f5; } + +.elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view { + border-top: 2px solid #71d7f7; } + .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view .elementor-empty-view__title { + display: none; } + .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view + .ui-sortable-placeholder { + display: none; } + +.elementor-navigator__element:not(.elementor-navigator__element--has-children) .elementor-navigator__element__list-toggle { + visibility: hidden; } + +.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item .elementor-navigator__element__toggle { + color: #71d7f7; } + +.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item:not(:hover) .elementor-navigator__element__toggle { + display: none; } + +.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item.elementor-editing { + background-color: #71d7f7; } + .elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item.elementor-editing > * { + color: #fff; } + +.elementor-navigator__element__list-toggle { + margin-left: 7px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + -o-transition: transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + color: #a4afb7; } + +.elementor-navigator__element__element-type { + margin-left: 8px; } + +.elementor-navigator__element__title { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + overflow: hidden; } + .elementor-navigator__element__title__text { + white-space: nowrap; + -webkit-user-select: text; } + .elementor-navigator__element__title__text[contenteditable="true"] { + outline: none; + color: #6d7882; + background-color: #fff; + padding: 2px 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); } + .elementor-navigator__element__title__text:not([contenteditable="true"]) { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + +.elementor-navigator__element__toggle { + text-align: left; + font-size: 13px; + padding: 0 5px; } + +.elementor-navigator__element--hidden .elementor-navigator__element__title, +.elementor-navigator__element--hidden .elementor-navigator__element__toggle { + opacity: .5; } + +.elementor-navigator__element-column { + background-color: #fafbfb; } + .elementor-navigator__element-column > .elementor-navigator__item .elementor-navigator__element__element-type { + color: #a4afb7; } + +.elementor-navigator__element-section { + background-color: #fff; } diff --git a/modules/creativeelements/views/css/editor-rtl.min.css b/modules/creativeelements/views/css/editor-rtl.min.css new file mode 100644 index 00000000..3d77f195 --- /dev/null +++ b/modules/creativeelements/views/css/editor-rtl.min.css @@ -0,0 +1 @@ +@charset "UTF-8";*,:after,:before{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}body,html{height:100%}html{background-color:#f1f1f1}iframe,img{border:0}li{list-style:none}a{text-decoration:none}body{color:#6d7882;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px;font-weight:400;line-height:1;text-decoration:none;text-transform:none;overflow:hidden}body:after{content:'';position:absolute;top:0;left:0;height:100%;width:0;background-color:#71d7f7;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}body a{color:#71d7f7}body a:hover{color:#d30c5c}body.elementor-editor-active #elementor-preview{left:0}body.elementor-editor-active #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-editor-preview #elementor-preview{left:0}body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-navigator--dock-hint:after{width:30px}#elementor-panel:not(.ui-resizable-resizing),#elementor-preview:not(.ui-resizable-resizing){-webkit-transition:right .5s,width .5s;-o-transition:right .5s,width .5s;transition:right .5s,width .5s}#elementor-loading{position:fixed;top:0;left:0;bottom:0;right:0;background:#f1f3f5;z-index:9999}#elementor-preview-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fff}#elementor-preview-loading i{color:#d5dadf;font-size:50px}.select2-container{z-index:9999}.select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.select2-container.select2-container--focus .select2-selection--multiple,.select2-container.select2-container--focus .select2-selection--single,.select2-container.select2-container--open .select2-selection--multiple,.select2-container.select2-container--open .select2-selection--single,.select2-dropdown{border-color:#a4afb7}.select2-dropdown .select2-search__field{outline:0}.select2-selection__placeholder{color:#a4afb7}#elementor-fatal-error-dialog button.dialog-ok{color:#71d7f7}#elementor-fatal-error-dialog .dialog-header{color:#6d7882}#elementor-flexbox-attention-dialog .dialog-cancel{color:#39b54a}#elementor-flexbox-attention-dialog .dialog-ok{color:#6d7882}.elementor-nerd-box{padding:30px;text-align:center}.elementor-nerd-box-icon{font-size:52px;color:#a4afb7}.elementor-nerd-box-title{margin-top:20px;font-size:16px;font-weight:700;line-height:1.4}.elementor-nerd-box-message{margin-top:20px;line-height:1.8;font-size:11px}.elementor-nerd-box .elementor-button.elementor-nerd-box-link{background-color:#fcb92c;color:#fff;padding:7px 25px;margin-top:20px;-webkit-box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-nerd-box .elementor-button.elementor-nerd-box-link:hover{background-color:#fdca5e}.eicon-nerd:hover:before{content:'\e965'}.eicon-nerd:active:before{content:'\e964'}.elementor-loader-wrapper{position:absolute;width:300px;left:50%;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-loader{-webkit-border-radius:7px;border-radius:7px;padding:40px;height:150px;width:150px;background-color:rgba(255,255,255,.9);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:2px 2px 20px 4px rgba(0,0,0,.02);box-shadow:2px 2px 20px 4px rgba(0,0,0,.02)}.elementor-loader-boxes{height:100%;width:100%;position:relative}.elementor-loader-box{position:absolute;background-color:#d5dadf;-webkit-animation:1.8s linear infinite load;animation:1.8s linear infinite load}.elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}.elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}.elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}.elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}.elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%,100%{opacity:.3}50%{opacity:1}}@keyframes load{0%,100%{opacity:.3}50%{opacity:1}}.elementor-loading-title{color:#a4afb7;text-align:center;text-transform:uppercase;margin-top:30px;letter-spacing:7px;text-indent:7px;font-size:10px;width:100%}.elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-weight:500;text-transform:uppercase;outline:0;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-left:10px}.elementor-input-style,input,select,textarea{-webkit-border-radius:3px;border-radius:3px;font-size:12px;width:100%;background:0 0;-webkit-box-shadow:none;box-shadow:none;color:#495157;border:1px solid;outline:0}.elementor-input-style:not(:focus),input:not(:focus),select:not(:focus),textarea:not(:focus){border-color:#d5dadf}.elementor-input-style:focus,input:focus,select:focus,textarea:focus{border-color:#a4afb7}.elementor-input-style::-webkit-input-placeholder,input::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a4afb7}.elementor-input-style::-ms-input-placeholder,input::-ms-input-placeholder,select::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a4afb7}.elementor-input-style::placeholder,input::placeholder,select::placeholder,textarea::placeholder{color:#a4afb7}.elementor-error input,.elementor-error select,.elementor-error textarea{border-color:#b01b1b}.elementor-input-style,input,textarea{padding:5px 8px}.elementor-input-style,textarea{resize:vertical}input[type=checkbox],input[type=radio]{border:1px solid #d5dadf;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-transition:border-color .05s ease-in-out;-o-transition:border-color .05s ease-in-out;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=radio]:focus{border-color:#a4afb7}input[disabled]{background-color:#e6e9ec;cursor:not-allowed;opacity:1}select{height:27px}.ps{overflow:hidden!important;overflow-anchor:none;-ms-touch-action:auto;touch-action:auto}.ps__rail-y{display:none;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;left:initial!important;position:absolute}.ps--active-y>.ps__rail-y{display:block;background-color:transparent}.ps--focus>.ps__rail-y,.ps--scrolling-y>.ps__rail-y,.ps:hover>.ps__rail-y{opacity:.6}.ps .ps__rail-y.ps--clicking,.ps .ps__rail-y:focus,.ps .ps__rail-y:hover{background-color:#eee;opacity:.9}.ps__thumb-y{background-color:#aaa;-webkit-border-radius:6px;border-radius:6px;-webkit-transition:background-color .2s linear,width .2s ease-in-out;-o-transition:background-color .2s linear,width .2s ease-in-out;transition:background-color .2s linear,width .2s ease-in-out;width:6px;right:2px;position:absolute}.ps__rail-y.ps--clicking .ps__thumb-y,.ps__rail-y:focus>.ps__thumb-y,.ps__rail-y:hover>.ps__thumb-y{background-color:#999;width:11px}#nprogress{pointer-events:none}#nprogress .bar{background:#39b54a;position:fixed;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;-webkit-box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}#nprogress .spinner{display:none;position:fixed;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;box-sizing:border-box;border:2px solid transparent;border-top-color:#39b54a;border-left-color:#39b54a;-webkit-border-radius:50%;border-radius:50%;-webkit-animation:.4s linear infinite nprogress-spinner;animation:.4s linear infinite nprogress-spinner}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}#nprogress .bar,#nprogress .spinner{z-index:100000}.elementor-panel{position:fixed;height:100%;top:0;bottom:0;overflow:visible;background-color:#e6e9ec;z-index:1;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px}.elementor-editor-active .elementor-panel{right:0}.elementor-editor-preview .elementor-panel>.ui-resizable-e,.elementor-editor-preview .elementor-panel>.ui-resizable-w{display:none}@media (max-width:1439px){body.elementor-editor-active #elementor-preview{right:280px}.elementor-editor-preview .elementor-panel{right:-280px}.elementor-panel{width:280px}}@media (min-width:1440px){body.elementor-editor-active #elementor-preview{right:300px}.elementor-editor-preview .elementor-panel{right:-300px}.elementor-panel{width:300px}}.elementor-panel .ps-scrollbar-y-rail{z-index:2}.elementor-panel ::-moz-selection{background:#5bc0de;color:#fff}.elementor-panel ::selection{background:#5bc0de;color:#fff}.elementor-panel a{color:#d30c5c}.elementor-panel h1,.elementor-panel h2,.elementor-panel h3,.elementor-panel h4,.elementor-panel h5,.elementor-panel h6{font-size:100%;font-weight:400}.elementor-panel abbr,.elementor-panel acronym{border:0;font-variant:normal}.elementor-panel sup{vertical-align:text-top}.elementor-panel sub{vertical-align:text-bottom}.elementor-panel img{max-width:100%;height:auto;border:0}.elementor-panel ::-moz-focus-inner{padding:0;border:0}.elementor-panel :focus{outline:0}.elementor-panel .elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel .elementor-panel-box-content{padding:20px 20px 10px}.elementor-panel .elementor-button{display:inline-block}.elementor-panel .elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:right}.elementor-panel .elementor-panel-alert a{color:inherit}.elementor-panel .elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel .elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel .elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel .elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-panel .elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-panel .elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-panel .elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-panel .elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-panel .elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-panel .elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-panel .elementor-control-field-description,.elementor-panel .elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-panel .elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:10000;background-color:#fff}.elementor-panel .elementor-controls-popover:before{content:'';position:absolute;top:-16px;left:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-panel .elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-panel .elementor-controls-popover div.elementor-control:before{content:none}.elementor-panel #elementor-panel-get-pro-elements .elementor-nerd-box-message{text-transform:uppercase}.elementor-panel .select2-container{width:100%!important}.elementor-panel #elementor-controls .pojo-widget-button-collapse{display:none}.elementor-panel #elementor-panel-header{display:table;height:40px;width:100%;background-color:#d30c5c;color:#fff}.elementor-panel #elementor-panel-header>*{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-header-button{width:40px}.elementor-panel .elementor-header-button .elementor-icon{cursor:pointer;display:block;font-size:19px;height:40px;line-height:40px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar{font-size:18px}.elementor-panel .elementor-header-button .elementor-icon:hover{color:#d5dadf}.elementor-panel #elementor-panel-header-title{font-size:15px}.elementor-panel #elementor-panel-header-title img{width:66px}body:not(.elementor-controls-ready) .elementor-panel #elementor-panel-page-elements{height:100%;overflow:hidden}.elementor-panel #elementor-panel-elements-navigation .elementor-panel-navigation-tab{text-align:center;padding:10px 0;font-size:11px;text-transform:uppercase;cursor:pointer}.elementor-panel #elementor-panel-elements{overflow:hidden;padding:0 5px}.elementor-panel #elementor-panel-elements-loading{position:absolute;top:0;left:0;height:100%;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;background-color:rgba(255,255,255,.5);z-index:1}body.elementor-controls-ready .elementor-panel #elementor-panel-elements-loading{display:none}.elementor-panel #elementor-panel-elements-loading .eicon-loading{font-size:25px;color:#71d7f7}.elementor-panel .elementor-element-wrapper{float:right;width:50%;padding:5px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-panel .elementor-element{-webkit-border-radius:3px;border-radius:3px;background-color:#fff;cursor:move}.elementor-panel .elementor-element:hover{-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2)}.elementor-panel .elementor-element:hover .icon,.elementor-panel .elementor-element:hover .title{color:#d30c5c}.elementor-panel .elementor-element .icon{font-size:28px;padding-top:15px;color:#556068}.elementor-panel .elementor-element .elementor-element-title-wrapper{display:table;width:100%}.elementor-panel .elementor-element .title{font-size:11px;color:#556068;display:table-cell;vertical-align:middle;height:40px}.elementor-panel #elementor-panel-elements-search-wrapper{position:relative;margin:10px 10px 5px}.elementor-panel #elementor-panel-elements-search-wrapper i{position:absolute;left:0;top:50%;color:#a4afb7;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:left 1s;-o-transition:left 1s;transition:left 1s}.elementor-panel #elementor-panel-elements-search-input{background-color:rgba(255,255,255,.7);font-size:11px;padding:10px 10px 10px 27px;font-style:italic;color:#a4afb7;border:none;-webkit-transition:1s;-o-transition:1s;transition:1s;-webkit-border-radius:3px;border-radius:3px;appearance:none;-webkit-appearance:none;-moz-appearance:none}.elementor-panel #elementor-panel-elements-search-input+i{left:10px}.elementor-panel #elementor-panel-elements-search-input:focus{background-color:#fff;padding-right:15px}.elementor-panel #elementor-panel-elements-search-input:focus+i{left:15px}.elementor-panel .elementor-panel-category{position:relative}.elementor-panel .elementor-panel-category:first-child .elementor-panel-category-title{padding-top:14px}.elementor-panel .elementor-panel-category.elementor-active .elementor-panel-category-title:before{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-panel .elementor-panel-category:not(.elementor-active):after{content:'';position:absolute;left:15px;right:15px;bottom:0;height:8px;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.03)),to(transparent));background:-webkit-linear-gradient(rgba(0,0,0,.03),transparent);background:-o-linear-gradient(rgba(0,0,0,.03),transparent);background:linear-gradient(rgba(0,0,0,.03),transparent);-webkit-transform:translateY(100%);transform:translateY(100%)}.elementor-panel .elementor-panel-category-title{margin:0 15px;padding:20px 0;position:relative;text-transform:uppercase;font-size:11px;cursor:pointer}.elementor-panel .elementor-panel-category-title:before{content:"";font-family:eicons;position:absolute;left:0;-webkit-transition:-webkit-transform .3s;transition:transform .3s;-o-transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.elementor-panel .elementor-panel-category-items{overflow:hidden;padding:0 5px;display:none}.elementor-panel .elementor-panel-scheme-title{padding:10px 20px;margin-top:10px}.elementor-panel .elementor-panel-scheme-description{padding:20px 20px 0}.elementor-panel .elementor-panel-scheme-buttons{padding:0 20px;display:table;table-layout:fixed;width:100%;height:40px;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1)}.elementor-panel .elementor-panel-scheme-buttons .elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:11px;font-weight:400}.elementor-panel .elementor-panel-scheme-button-wrapper{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-panel-scheme-button-wrapper:first-child{text-align:right}.elementor-panel .elementor-panel-scheme-button-wrapper:last-child{text-align:left}.elementor-panel .elementor-panel-scheme-save .elementor-button{padding:6px 18px}.elementor-panel .elementor-panel-scheme-discard .elementor-button,.elementor-panel .elementor-panel-scheme-reset .elementor-button{color:#a4afb7;background:0 0}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-items{position:relative;display:grid;grid-template-columns:repeat(4,50px);-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active){float:none}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{top:10px}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{border-width:0 4px 0 5px}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:4px}[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:10px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{border-width:0 7px 0 5px}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:6px}[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:9px}}.elementor-panel .elementor-panel-scheme-color-title{text-align:center;text-transform:uppercase;margin:10px 0;color:#c2cbd2;font-size:8px}.elementor-panel .elementor-panel-scheme-typography-item{display:table;table-layout:fixed;width:100%;margin-bottom:15px}.elementor-panel .elementor-panel-scheme-typography-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-scheme-typography-item-value input,.elementor-panel .elementor-panel-scheme-typography-item-value select{width:100%}.elementor-panel .elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-scheme-typography-items{display:none}.elementor-panel .elementor-panel-scheme-color-system-scheme{margin-bottom:10px}.elementor-panel .elementor-panel-scheme-color-system-scheme .elementor-title{font-size:11px;color:#a4afb7;font-style:italic;margin-top:5px}.elementor-panel .elementor-panel-scheme-color-system-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;overflow:hidden;padding:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf;cursor:pointer}.elementor-panel .elementor-panel-scheme-color-system-items:hover{border:1px solid #a4afb7}.elementor-panel .elementor-panel-scheme-color-system-item{height:20px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-panel #elementor-panel-schemes-disabled a:hover{text-decoration:underline}.elementor-panel #elementor-panel-page-menu{padding:25px 15px}.elementor-panel .elementor-panel-menu-group-title{text-transform:uppercase;font-size:11px}.elementor-panel .elementor-panel-menu-items{margin:15px 0 25px;-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-menu-item{display:table;width:100%;height:40px;cursor:pointer;margin-bottom:1px;background-color:#fff}.elementor-panel .elementor-panel-menu-item:hover{background-color:rgba(255,255,255,.8)}.elementor-panel .elementor-panel-menu-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-menu-item-icon{text-align:center;width:50px;color:#a4afb7}.elementor-panel .elementor-panel-menu-item-title{font-weight:500}.elementor-panel .elementor-panel-menu-item-title>span{color:#39b54a}.elementor-panel .elementor-panel-menu-item a{color:#6d7882}.elementor-panel .elementor-panel-menu-item-exit-to-dashboard{background-color:#0085ba;color:#fff;text-transform:uppercase;font-size:12px}.elementor-panel .elementor-panel-menu-item-exit-to-dashboard:hover{background-color:#0073a1}.elementor-panel .elementor-panel-menu-item-exit-to-dashboard .elementor-panel-menu-item-icon,.elementor-panel .elementor-panel-menu-item-exit-to-dashboard .elementor-panel-menu-item-title{color:#fff}.elementor-panel .elementor-control.elementor-control-clear_page{background-color:transparent}.elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-panel .elementor-panel-navigation{background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);display:table;table-layout:fixed;width:100%}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab{display:table-cell}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(to bottom,#f3f3f3,#fff);border-bottom:3px solid #d30c5c}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a{display:block;text-align:center;padding:12px 0 8px;font-size:10px;color:#6d7882}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a:before{font-family:FontAwesome;font-size:16px;display:block;margin-bottom:6px}.elementor-panel .elementor-tab-control-content a:before{content:'\f040'}.elementor-panel .elementor-tab-control-style a:before{content:'\f042'}.elementor-panel .elementor-tab-control-advanced a:before,.elementor-panel .elementor-tab-control-general_style a:before,.elementor-panel .elementor-tab-control-settings a:before{content:'\f013'}.elementor-panel .elementor-tab-control-responsive a:before{content:'\f10a'}.elementor-panel .elementor-tab-control-column a:before,.elementor-panel .elementor-tab-control-layout a:before{content:'\f0db'}.elementor-panel .elementor-tab-control-lightbox a:before{content:'\f2d2'}.elementor-panel #elementor-panel-footer{position:absolute;bottom:0;left:0;right:0;height:40px;background-color:#495157}.elementor-panel #elementor-panel-footer-tools{display:table;table-layout:fixed;width:100%;height:100%}.elementor-panel .elementor-panel-footer-tool{display:table-cell;vertical-align:middle;text-align:center;cursor:pointer;color:#a4afb7;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update{border-left:1px solid #2d8739;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update i{margin-left:5px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options{float:right;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i{margin:auto}.elementor-panel .elementor-panel-footer-tool.elementor-open{color:#fff}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open):hover{color:#d5dadf}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open) .elementor-panel-footer-sub-menu-wrapper{display:none}.elementor-panel .elementor-panel-footer-sub-menu-wrapper{position:absolute;bottom:100%;left:0;width:100%;background-color:#556068;padding:10px;-webkit-box-shadow:-2px -5px 8px rgba(0,0,0,.1);box-shadow:-2px -5px 8px rgba(0,0,0,.1);cursor:default;z-index:10000}.elementor-panel .elementor-panel-footer-sub-menu{-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-footer-sub-menu-item{background-color:#495157;display:table;table-layout:fixed;width:100%;cursor:pointer}.elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled .elementor-icon,.elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled .elementor-title{color:#6d7882}.elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child){margin-bottom:1px}.elementor-panel .elementor-panel-footer-sub-menu-item[data-device-mode=mobile-landscape] .fa-mobile{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-panel .elementor-panel-footer-sub-menu-item:hover{background-color:rgba(0,0,0,.2)}.elementor-panel .elementor-panel-footer-sub-menu-item.active{background-color:rgba(0,0,0,.3)}.elementor-panel .elementor-panel-footer-sub-menu-item>*{display:table-cell;height:40px;vertical-align:middle}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-icon{width:40px;color:#a4afb7}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-title{text-align:right;color:#d5dadf}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-description{width:95px;text-align:right;font-size:11px;font-style:italic;color:#a4afb7}.elementor-panel #elementor-panel-footer-help-title{text-align:right;padding:10px 0;color:#d5dadf}.elementor-panel #elementor-panel-footer-responsive>i{display:block;height:100%;line-height:40px}.elementor-panel #elementor-panel-footer-saver-publish{width:80px}.elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state i{margin-left:0}.elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state #elementor-panel-saver-button-publish-label{display:none}.elementor-panel #elementor-panel-footer-saver-options{width:35px;border-right:1px solid #495157}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper{font-size:11px;font-style:italic;color:#a4afb7;padding:5px 0 15px}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper:not(.elementor-state-active) .elementor-state-icon{display:none}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time{border-bottom:1px dotted transparent;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;cursor:pointer}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time:hover{border-bottom-color:inherit}.elementor-panel .elementor-disabled{cursor:default}.elementor-panel #elementor-panel-saver-button-preview a{color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish,.elementor-panel #elementor-panel-saver-button-save-options{font-size:11px;text-transform:uppercase;height:26px}.elementor-panel #elementor-panel-saver-button-publish.elementor-disabled,.elementor-panel #elementor-panel-saver-button-save-options.elementor-disabled{background-color:#556068;color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish{width:100%;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-panel #elementor-panel-saver-button-save-options{width:25px}#elementor-panel-inner{position:relative;height:100%;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-shadow:0 0 5px 0 rgba(0,0,0,.2)}#elementor-panel-content-wrapper{position:absolute;bottom:40px;top:40px;left:0;width:100%}.elementor-panel-container{clear:both;padding-left:15px;padding-right:15px}.media-modal.wp-core-ui input{width:auto}.media-modal.wp-core-ui fieldset{padding:0;border:0}.media-modal.wp-core-ui .wp-clearfix::after{content:'';display:table;clear:both}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control .elementor-control-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.elementor-control .elementor-control-title{font-size:12px;line-height:1;margin-left:5px}.elementor-control .elementor-control-spinner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-control.elementor-control-type-divider{padding:0;background-color:transparent}.elementor-control.elementor-control-type-divider .elementor-control-content{border-width:1px 0 0;border-color:#e6e9ec;border-style:solid;background-color:#fff;height:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{content:'';height:1px;display:block;margin-bottom:15px;background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:'';position:absolute;height:1px;width:100%;top:0;left:0;background-color:#e6e9ec}.elementor-control.elementor-control-separator-after:after{content:'';position:absolute;height:1px;width:100%;bottom:0;left:0;background-color:#e6e9ec}.elementor-control.elementor-control-separator-after+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:#495157;font-size:12px;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-right:5px;padding-left:20px;cursor:pointer}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:'\e955';font-size:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:5px;pointer-events:none}.elementor-control .select2-container{width:100%!important;outline:0}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-container.select2-container--default .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection{outline:0}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before{content:'\f0d7'}.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;margin-right:auto}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s;cursor:pointer}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-start-end .eicon-h-align-left,.elementor-control-start-end .eicon-h-align-right{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-left:5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:not(:first-child){margin-right:5px}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.rtl .elementor-control-align .elementor-choices,.rtl .elementor-control-position .elementor-choices,.rtl .elementor-control-text_align .elementor-choices{direction:ltr}.rtl .elementor-control-align .elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2),.rtl .elementor-control-position .elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2),.rtl .elementor-control-text_align .elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.rtl .elementor-control-align .elementor-choices input:not(:checked)+.elementor-choices-label:last-child,.rtl .elementor-control-position .elementor-choices input:not(:checked)+.elementor-choices-label:last-child,.rtl .elementor-control-text_align .elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-control-direction-ltr{direction:ltr}.elementor-control-direction-rtl{direction:rtl}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-button .elementor-control-input-wrapper{text-align:left}.elementor-control-type-button .elementor-button{width:auto;height:26px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-group-control-css-filter .elementor-slider{height:6px;-webkit-box-shadow:0 0 1px 1px inset rgba(0,0,0,.2);box-shadow:0 0 1px 1px inset rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0;margin-bottom:5px}.elementor-group-control-blur .elementor-slider{background:url("../images/blur.png") center/cover;-webkit-background-size:cover}.elementor-group-control-contrast .elementor-slider{background:url("../images/contrast.png") 0 0/100% 100%;-webkit-background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(red),color-stop(orange),color-stop(yellow),color-stop(greenyellow),color-stop(limegreen),color-stop(deepskyblue),color-stop(blue),color-stop(95%,#9400d3));background-image:-webkit-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%);background-image:-o-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%);background-image:linear-gradient(to right,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(gray),to(red));background-image:-webkit-linear-gradient(left,gray,red);background-image:-o-linear-gradient(left,gray,red);background-image:linear-gradient(to right,gray,red)}.elementor-group-control-brightness .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(black),to(white));background-image:-webkit-linear-gradient(left,#000,#fff);background-image:-o-linear-gradient(left,#000,#fff);background-image:linear-gradient(to right,#000,#fff)}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:0;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:right;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-left:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-hidden{display:none!important}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:right}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:right;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:left;height:27px;width:65px}.elementor-control-type-media .elementor-control-input-wrapper{padding:7px;border:1px solid;-webkit-transition:.2s ease-in-out;-o-transition:.2s ease-in-out;transition:.2s ease-in-out}.elementor-control-type-media .elementor-control-input-wrapper:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-input-wrapper:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-input-wrapper:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-input-wrapper:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media{cursor:pointer}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-area{background-image:-webkit-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-webkit-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);-webkit-background-size:16px 16px;background-size:16px 16px;background-position:0 0,8px 8px;background-color:#f6f6f6;overflow:hidden}.elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete{-webkit-box-shadow:none;box-shadow:none;bottom:-30px}.elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image{opacity:.9}.elementor-control-type-media .elementor-control-media-area i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:rgba(255,255,255,.7);font-size:21px}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase;-webkit-transition:.2s ease-in-out;-o-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-box-shadow:0 0 3px 3px rgba(0,0,0,.1);box-shadow:0 0 3px 3px rgba(0,0,0,.1)}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:center}.elementor-control-type-number .elementor-control-input-wrapper{max-width:80px}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:ltr}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-left:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding-right:10px;padding-left:10px;padding-bottom:15px}.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:right;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-left:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section.elementor-open{padding-bottom:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-slider--multiple{margin-bottom:14px}.elementor-control-type-slider--multiple .elementor-slider{margin-top:12px;width:98%}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle{-webkit-border-radius:0;border-radius:0;width:10px;-webkit-transform:translateY(calc(50% - 14px)) translateX(-4px);transform:translateY(calc(50% - 14px)) translateX(-4px)}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle:after{content:'';position:absolute;top:2px;height:12px;width:11px;-webkit-transform:rotate(45deg);transform:rotate(45deg);background-color:#fff;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after{left:5px;-webkit-box-shadow:2px -2px 3px 0 rgba(0,0,0,.1);box-shadow:2px -2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-upper:after{right:5px;-webkit-box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1);box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider:not(.elementor-control-type-slider--multiple) .elementor-slider{display:inline-block;width:70%}.elementor-slider{margin:10px auto;height:4px;background-color:#d5dadf;-webkit-border-radius:5px;border-radius:5px;position:relative;cursor:pointer}.elementor-slider-input{width:30%;float:left}.elementor-slider-input input{max-width:80%;float:left;padding:5px}.elementor-slider__extra{position:relative}.elementor-slider__labels{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-slider__label{font-size:9px;color:#c2cbd2}.elementor-slider__scales{position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-webkit-justify-content:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;width:100%;margin-top:4px}.elementor-slider__scale{width:1px;height:21px;background-color:#a4afb7}.elementor-slider .noUi-handle{height:16px;width:16px;background-color:#fff;left:0;-webkit-transform:translateY(calc(50% - 14px)) translateX(-8px);transform:translateY(calc(50% - 14px)) translateX(-8px);position:absolute;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.3);box-shadow:0 1px 5px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%}.elementor-slider .noUi-connects{position:absolute;width:100%;height:5px}.elementor-slider .noUi-connect{position:absolute;z-index:0;top:0;left:0;height:100%;width:100%;will-change:transform;-webkit-transform-origin:0 0;transform-origin:0 0;background-color:#a4afb7}.elementor-slider .noUi-tooltip{position:absolute;top:calc(100% + 5px);left:calc(50% - 4px);-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:10px}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-left:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:'';position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px rgba(127,127,127,.1);box-shadow:inset 0 2px 4px rgba(127,127,127,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:left}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:opacity .15s ease-out,background .15s ease-out;-o-transition:opacity .15s ease-out,background .15s ease-out;transition:opacity .15s ease-out,background .15s ease-out}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px rgba(255,255,255,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:27px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-left:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-right:1px solid #a4afb7;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;width:12px;height:12px;top:7px;left:13px;z-index:1;background:#fff}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-autocomplete-menu{position:absolute;background:#fff;color:#495157;border:1px solid #a4afb7;margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline;padding:5px 8px;font-size:12px;width:100%;line-height:1.2;cursor:pointer}.elementor-autocomplete-menu .ui-menu-item.ui-state-active,.elementor-autocomplete-menu .ui-menu-item.ui-state-focus,.elementor-autocomplete-menu .ui-menu-item.ui-state-hover{background:#e6e9ec}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-top:2px}.wp-picker-container.wp-picker-active{position:absolute;z-index:10000;top:-9px;left:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container .iris-picker .iris-picker-inner{width:100%}.wp-picker-container:not(.wp-picker-active){float:left}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:120px;max-width:136px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}#elementor-mode-switcher{position:absolute;right:100%;top:50%;width:15px;height:50px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#e6e9ec;font-size:15px;-webkit-box-shadow:-3px 1px 5px rgba(0,0,0,.1);box-shadow:-3px 1px 5px rgba(0,0,0,.1);cursor:pointer}#elementor-mode-switcher:hover,body.elementor-editor-preview #elementor-mode-switcher{background-color:#d30c5c;color:#fff}#elementor-mode-switcher-inner,#elementor-mode-switcher-preview{width:100%;height:100%;position:absolute;top:0;left:0}#elementor-mode-switcher-preview{cursor:pointer}#elementor-mode-switcher-preview .fa{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}#elementor-mode-switcher-preview-input{display:none}.elementor-revision-item__wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px}.elementor-revision-item__wrapper.current{font-weight:700}.elementor-revision-item__wrapper .elementor-revision-item__tools-current{color:#d30c5c}.elementor-revision-item:hover:not(.elementor-revision-current-preview){background-color:rgba(230,233,236,.3)}.elementor-revision-item-loading .elementor-revision-item__tools-current,.elementor-revision-item-loading .elementor-revision-item__tools-delete,.elementor-revision-item.elementor-revision-current-preview .elementor-revision-item__tools-delete,.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner,.elementor-revision-item:not(:hover) .elementor-revision-item__tools-delete{display:none}.elementor-revision-item__gravatar{-webkit-border-radius:50%;border-radius:50%;overflow:hidden}.elementor-revision-item__gravatar img{display:block}.elementor-revision-item__details{padding-right:15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;cursor:pointer}.elementor-revision-item__tools-delete{cursor:pointer}.elementor-revision-meta{padding-top:5px;font-size:10px;font-weight:700}.elementor-revision-current-preview{background-color:#e6e9ec}#elementor-restore-autosave-dialog.dialog-widget{background-color:rgba(0,0,0,.3)}#elementor-panel-revisions-loading{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}#elementor-panel-revisions-loading .eicon-loading{font-size:50px;color:#a4afb7}.elementor-history-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px;line-height:1.4;cursor:pointer}.elementor-history-item:hover{background-color:rgba(230,233,236,.3)}.elementor-history-item:hover .elementor-history-item__icon .fa:before{content:'\f1da'}.elementor-history-item-applied{color:#a4afb7}.elementor-history-item-current{background:#e6e9ec;cursor:default}.elementor-history-item-current .elementor-history-item__icon .fa:before,.elementor-history-item-current:hover .elementor-history-item__icon .fa:before{content:'\f00c'}.elementor-history-item__details{width:95%}.elementor-history-item__title{font-weight:700}.elementor-history-item__action,.elementor-history-item__subtitle{font-weight:lighter}.elementor-history-item__action{font-style:italic;text-decoration:underline}.elementor-history-item .__icon{float:left}.elementor-history-revisions-message{font-size:11px;text-align:center;padding-top:5px}#elementor-panel-history{padding:20px 20px 15px}#elementor-panel-history.elementor-empty .elementor-history-revisions-message{padding-top:20px}#elementor-panel-history:not(.elementor-empty){background-color:#fff;margin-top:10px}#elementor-panel-history-no-items{text-align:center}#elementor-preview{background-color:#333;position:absolute;height:100%;top:0;right:0;border:0}.elementor-device-desktop #elementor-preview{overflow-y:hidden}body:not(.elementor-device-desktop) #elementor-preview{overflow-y:auto}#elementor-preview-responsive-wrapper{position:absolute;top:0;bottom:0;left:0;right:0;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-device-desktop #elementor-preview-responsive-wrapper{min-width:1025px;margin:0 auto;width:100%;height:100%}.elementor-device-tablet #elementor-preview-responsive-wrapper{width:768px;height:1025px;padding:40px 10px 70px}.elementor-device-mobile #elementor-preview-responsive-wrapper{width:360px;height:640px;padding:40px 10px 70px}body:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper{-webkit-border-radius:30px;border-radius:30px;background-color:#111;margin:30px auto 80px;-webkit-box-sizing:content-box;box-sizing:content-box}#elementor-preview-iframe{width:100%;height:100%;background-color:#fff}.tipsy{font-size:10px;position:absolute;padding:5px;z-index:100000}.tipsy-inner{background-color:#000;color:#fff;max-width:200px;padding:6px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.5);box-shadow:0 0 5px 0 rgba(0,0,0,.5)}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-arrow-n{border-bottom-color:#000}.tipsy-arrow-s{border-top-color:#000}.tipsy-arrow-e{border-left-color:#000}.tipsy-arrow-w{border-right-color:#000}.tipsy-n .tipsy-arrow,.tipsy-nw .tipsy-arrow{border-left-color:transparent;border-right-color:transparent;top:0;border-bottom-style:solid;border-top:none}.tipsy-n .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-nw .tipsy-arrow{left:10px}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow,.tipsy-se .tipsy-arrow,.tipsy-sw .tipsy-arrow{bottom:0;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-sw .tipsy-arrow{left:10px}.tipsy-se .tipsy-arrow{right:10px}.tipsy-e .tipsy-arrow,.tipsy-w .tipsy-arrow{top:50%;margin-top:-5px;border-top-color:transparent;border-bottom-color:transparent}.tipsy-e .tipsy-arrow{right:0;border-left-style:solid;border-right:none}.tipsy-w .tipsy-arrow{left:0;border-right-style:solid;border-left:none}#elementor-template-library-modal a.elementor-template-library-blank-footer-link{font-style:normal;text-decoration:underline;color:#39b54a}#elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover{color:#2d8e3a}#elementor-template-library-header-menu{text-align:center;color:#6d7882;font-size:13px}.elementor-template-library-menu-item{display:inline-block;padding:17px 0;width:115px;cursor:pointer}.elementor-template-library-menu-item.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(to bottom,#f3f3f3,#fff);border-bottom:3px solid #9b0a46}#elementor-template-library-header-actions{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-template-library-header-actions>div{padding-left:16px}#elementor-template-library-header-preview-insert-wrapper{cursor:default;padding:0 10px}#elementor-template-library-header-preview-insert-wrapper .elementor-button{padding:8px 14px;font-size:11px}#elementor-template-library-header-preview-insert-wrapper .elementor-template-library-template-insert{color:#fff;background-color:#39b54a}#elementor-template-library-header-preview-back{padding:16.5px 0 15px 16.5px;border-left:1px solid #e6e9ec;cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}#elementor-template-library-header-preview-back:not(:hover){color:#a4afb7}#elementor-template-library-header-preview-back i{padding-left:10px;font-size:18px}#elementor-template-library-header-preview-back i:before{content:""}#elementor-template-library-templates{padding:0 15px}#elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container{-webkit-box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);margin-top:10px;margin-bottom:45px}#elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#6d7882}#elementor-template-library-templates[data-template-source=remote] #elementor-template-library-templates-container{margin:10px -15px 0}#elementor-template-library-templates[data-template-source=remote] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#495157}#elementor-template-library-templates .elementor-template-library-order-input,#elementor-template-library-templates.elementor-templates-filter-active #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-order-toolbar-local{display:none}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label{padding-left:8px}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label:after{font-family:eicons;content:'\e956';margin-right:3px}#elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse+.elementor-template-library-order-label:after{content:'\e955'}#elementor-template-library-templates-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}#elementor-template-library-templates-container .elementor-template-library-template-local .elementor-template-library-template-insert{text-transform:none;font-size:12px}#elementor-template-library-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-template-library-filter-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}#elementor-template-library-filter-toolbar-remote{font-size:11px}#elementor-template-library-order{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-left:1px solid #d5dadf}.elementor-template-library-order-label{text-transform:uppercase;padding-left:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}label.elementor-template-library-order-label{cursor:pointer}label.elementor-template-library-order-label:hover{color:#556068}#elementor-template-library-filter{border-left:1px solid #d5dadf}#elementor-template-library-filter .select2{text-align:right;margin-left:25px}#elementor-template-library-filter .select2-selection__rendered,#select2-elementor-template-library-filter-subtype-results .select2-results__option{text-transform:capitalize}#elementor-template-library-my-favorites{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right;padding-right:20px}#elementor-template-library-filter-my-favorites{display:none}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label{color:#495157}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label i:after{color:#d30c5c;content:'\f004'}#elementor-template-library-filter-my-favorites-label{cursor:pointer;text-transform:uppercase}#elementor-template-library-filter-my-favorites-label:hover{color:#556068}#elementor-template-library-filter-my-favorites-label:hover i:after{color:#d30c5c}#elementor-template-library-filter-my-favorites-label i{padding-left:5px}#elementor-template-library-filter-my-favorites-label i:after{color:#a4afb7;content:'\f08a'}#elementor-template-library-filter-text-wrapper{width:200px;position:relative}#elementor-template-library-filter-text-wrapper:after{content:'\e863';position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-family:eicons}#elementor-template-library-filter-text{border:none;border-bottom:1px solid #d5dadf;-webkit-border-radius:0;border-radius:0;font-size:11px;padding:8px 15px 8px 0;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s}#elementor-template-library-filter-text::-webkit-input-placeholder{font-weight:300;text-transform:uppercase}#elementor-template-library-filter-text::-ms-input-placeholder{font-weight:300;text-transform:uppercase}#elementor-template-library-filter-text::placeholder{font-weight:300;text-transform:uppercase}#elementor-template-library-filter-text:focus{border-color:#c2cbd2}.elementor-template-library-template-remote{margin:15px;padding:8px;background-color:#fff;-webkit-box-shadow:0 1px 20px 0 rgba(0,0,0,.07);box-shadow:0 1px 20px 0 rgba(0,0,0,.07);-webkit-border-radius:3px;border-radius:3px}.elementor-template-library-template-remote:hover .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-preview{opacity:0}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-favorite,.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-action{display:none}.elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before{position:absolute;content:'premium';text-transform:uppercase;top:5px;left:5px;background-color:#d30c5c;color:#d5dadf;padding:2px 4px 0;font-size:9px;-webkit-border-radius:2px;border-radius:2px}.elementor-template-library-template-remote:not(.elementor-template-library-template-page){position:relative;width:calc(33.333% - 30px);overflow:hidden}.elementor-template-library-template-remote:not(.elementor-template-library-template-page) img{display:block;width:100%}.elementor-template-library-template-remote:not(.elementor-template-library-template-page) .elementor-template-library-template-footer{position:absolute;width:100%;bottom:0;right:0;padding:10px;background-color:#fff;-webkit-transition:-webkit-transform .5s;transition:transform .5s;-o-transition:transform .5s;transition:transform .5s,-webkit-transform .5s}.elementor-template-library-template-remote:not(.elementor-template-library-template-page) .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(:hover) .elementor-template-library-template-footer{-webkit-transform:translateY(100%);transform:translateY(100%)}.elementor-template-library-template-remote .elementor-template-library-template-body{position:relative}@media (max-width:1025px){.elementor-template-library-template-remote .elementor-template-library-template-body{height:300px}}.elementor-template-library-template-remote .elementor-template-library-template-screenshot{height:100%;-webkit-background-size:cover;background-size:cover;background-position-x:50%;-webkit-box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07);box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07)}.elementor-template-library-template-remote .elementor-template-library-template-preview{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-preview i{font-size:20px;color:#d5dadf;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-template-library-template-remote .elementor-template-library-template-action{background-color:transparent;text-transform:none}.elementor-template-library-template-remote .elementor-template-library-template-action i{margin-left:0}.elementor-template-library-template-remote .elementor-template-library-template-insert{color:#39b54a}.elementor-template-library-template-remote .elementor-button-go-pro{color:#fcb92c}.elementor-template-library-template-remote .elementor-template-library-template-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:10px;font-size:11px;line-height:1}.elementor-template-library-template-remote .elementor-template-library-template-name{text-align:right;color:#6d7882;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-left:5px}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input{display:none}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked+.elementor-template-library-template-favorite-label i:before{content:'\f004';color:#d30c5c}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label{cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i{color:#d30c5c}@media (max-width:1439px){.elementor-template-library-template-page{width:calc(25% - 30px)}#elementor-template-library-preview iframe{width:1440px}}@media (min-width:1440px){.elementor-template-library-template-page{width:calc(20% - 30px)}}@media (max-width:1025px){.elementor-template-library-template-page{width:calc(33.333% - 30px)}}.elementor-template-library-template-page .elementor-template-library-template-body{height:200px}#elementor-template-library-order-toolbar-local,.elementor-template-library-template-local{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0 25px;text-align:right}#elementor-template-library-order-toolbar-local{margin-top:30px}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label{line-height:1;font-size:10px;font-weight:500}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label:not(:hover){color:#a4afb7}.elementor-template-library-template-local{height:50px;width:100%;margin-top:1px;background-color:#fff;-webkit-transition:background-color .3s linear;-o-transition:background-color .3s linear;transition:background-color .3s linear}.elementor-template-library-template-local:hover{background-color:#fafbfb}.elementor-template-library-template-local:not(:hover) .elementor-template-library-template-insert{background:0 0;color:#a4afb7}.elementor-template-library-template-local:first-child{-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-template-library-template-local:last-child{-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.elementor-template-library-template-local .elementor-template-library-template-name{font-weight:500}.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name{padding-left:20px}.elementor-template-library-template-local .elementor-template-library-template-meta{color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-action,.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name,.elementor-template-library-template-local .elementor-template-library-template-preview{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-template-library-template-local .elementor-template-library-template-controls{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-template-library-template-local .elementor-template-library-template-controls>div{cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}.elementor-template-library-template-local .elementor-template-library-template-controls>div:not(:hover){color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-insert i{margin-left:3px}.elementor-template-library-template-local .elementor-template-library-template-control-title{margin-right:6px}.elementor-template-library-template-local .elementor-template-library-template-delete:hover{color:red}.elementor-template-library-template-local .elementor-template-library-template-export:hover i{color:#556068}.elementor-template-library-template-local .elementor-template-library-template-action{padding:8px 18px;margin:0 5%}.elementor-template-library-template-local .elementor-template-library-template-more{display:none;position:absolute;background-color:#fff;padding:3px 20px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:1px 3px 11px rgba(0,0,0,.3);box-shadow:1px 3px 11px rgba(0,0,0,.3);top:100%;left:0;-webkit-transform:translateX(-65%) translateY(-7px);transform:translateX(-65%) translateY(-7px);z-index:1}.elementor-template-library-template-local .elementor-template-library-template-more:before{content:'';position:absolute;border:solid transparent;border-width:8px 4px;border-bottom-color:#fff;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.elementor-template-library-template-local .elementor-template-library-template-more>div{margin:10px 0;font-size:11px}.elementor-template-library-template-local .elementor-template-library-template-more-toggle{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-template-library-template-local .elementor-template-library-template-more-toggle i{font-size:16px}#elementor-template-library-preview{height:100%;overflow:hidden}#elementor-template-library-preview iframe{height:150%;-webkit-transform:scale(.666) translateX(25%) translateY(-25%);transform:scale(.666) translateX(25%) translateY(-25%)}.elementor-template-library-blank-icon{font-size:65px;margin-top:45px;color:#c2cbd2;line-height:1}.elementor-template-library-blank-icon img{width:70px}.elementor-template-library-blank-title{font-size:30px;margin-top:40px}@media (max-width:1439px){.elementor-template-library-blank-title{font-size:25px}}.elementor-template-library-blank-message{font-size:18px;color:#a4afb7;margin-top:15px;font-weight:300}#elementor-template-library-save-template-form{margin-top:40px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}#elementor-template-library-save-template-form>*{height:55px;font-size:16px}#elementor-template-library-save-template-name{width:500px;background-color:#fff;font-weight:300;color:#a4afb7;padding-right:25px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;border:none}#elementor-template-library-save-template-submit{width:150px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}#elementor-template-library-save-template-submit:hover{-webkit-box-shadow:none;box-shadow:none}#elementor-template-library-import-form{width:95%;background-color:rgba(255,255,255,.5);padding:60px;border:2px dashed #d5dadf;margin:35px auto;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}#elementor-template-library-import-form:hover{background-color:rgba(255,255,255,.9)}#elementor-template-library-import-form-or{margin-top:15px;font-size:18px}#elementor-template-library-import-form-label{margin-top:20px;padding:15px 35px;display:inline-block}#elementor-template-library-import-form-input{display:none}#elementor-template-library-import-form.elementor-drag-over{border:3px dashed #71d7f7}#elementor-template-library-import .elementor-template-library-blank-icon{margin-top:0}#elementor-template-library-import .elementor-template-library-blank-message{margin-top:20px}.elementor-template-library-blank-footer{position:absolute;bottom:70px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#a4afb7;font-style:italic}@media (max-height:700px){.elementor-template-library-blank-footer{display:none}}#elementor-template-library-footer-banner i{color:#c2cbd2;font-size:56px;margin-top:40px}#elementor-template-library-footer-banner .elementor-excerpt{color:#a4afb7;font-size:15px;font-weight:500;margin:20px 0}#elementor-template-library-templates-empty{width:100%;margin-top:40px}#elementor-template-library-error-dialog .dialog-message{text-align:start}#elementor-template-library-error-info{margin-top:10px}@media (max-width:1439px){.elementor-template-library-blank-message{font-size:16px;margin-top:10px}.elementor-template-library-local-column-1{width:33%}.elementor-template-library-local-column-2{width:10%}.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:15%}.elementor-template-library-local-column-5{width:27%}}@media (min-width:1440px){#elementor-template-library-preview iframe{width:1710px}.elementor-template-library-local-column-1{width:25%}.elementor-template-library-local-column-2,.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:17%}.elementor-template-library-local-column-5{width:24%}}@media (max-width:1024px){.elementor-template-library-local-column-3{display:none}.elementor-template-library-local-column-5{width:41%}}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px;z-index:1}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:'>';font-size:8px;padding-left:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3);z-index:1}.elementor-tag-settings-popup:before{content:'';position:absolute;top:-20px;right:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-right:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}#elementor-toast{position:absolute;width:280px;padding:20px;-webkit-border-radius:5px;border-radius:5px;color:#d5dadf;background-color:rgba(0,0,0,.8);z-index:10000}#elementor-toast .dialog-message{font-size:13px}#elementor-toast .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-top:15px}#elementor-toast .dialog-button{color:#fcb92c;margin:0 5px;text-transform:uppercase;cursor:pointer}#elementor-toast .dialog-button:last-child{margin-left:0}.elementor-context-menu{position:absolute;width:200px;background-color:#fff;border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.09);box-shadow:0 2px 10px 0 rgba(0,0,0,.09);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:3}.elementor-context-menu-list__group{padding:5px 0}.elementor-context-menu-list__group:not(:last-child){border-bottom:1px solid #e6e9ec}.elementor-context-menu-list__item{padding:5px 10px 5px 20px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer}.elementor-context-menu-list__item--disabled{cursor:default;color:#d5dadf}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover{background-color:#71d7f7}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover>*{color:#fff}.elementor-context-menu-list__item__icon{width:20px;color:#c2cbd2}.elementor-context-menu-list__item__title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-context-menu-list__item__shortcut{color:#d5dadf}.elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover{background-color:#d72b3f}.elementor-context-menu .eicon-pro-icon{color:#fcb92c}.elementor-right-click-introduction{position:absolute;width:250px;padding:30px 20px;background-color:#fff;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.07);box-shadow:0 2px 10px 0 rgba(0,0,0,.07);text-align:center;-webkit-border-radius:3px;border-radius:3px}.elementor-right-click-introduction:before{content:'';position:absolute;border:solid transparent;border-width:7px 5px;border-bottom-color:#fff;top:-14px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.elementor-right-click-introduction .dialog-header{color:#6d7882;font-size:16px}.elementor-right-click-introduction .dialog-message{font-size:13px;line-height:1.6;margin-top:10px;color:#a4afb7}.elementor-right-click-introduction .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:25px}.elementor-right-click-introduction .dialog-button{font-size:11px}.elementor-right-click-introduction .dialog-ok{padding:7px 27px;text-transform:capitalize}.elementor-right-click-introduction .dialog-learn-more{color:#39b54a;margin-left:15px;cursor:pointer}#elementor-hotkeys{text-align:right}#elementor-hotkeys__content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;overflow:hidden;margin-bottom:30px}#elementor-hotkeys__actions .elementor-hotkeys__list{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}@media (max-width:1024px){#elementor-hotkeys__content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}#elementor-hotkeys__actions .elementor-hotkeys__list{-webkit-border-radius:3px;border-radius:3px}}#elementor-hotkeys__navigation .elementor-hotkeys__list{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}@media (min-width:1025px){#elementor-hotkeys__actions .elementor-hotkeys__header,#elementor-hotkeys__actions .elementor-hotkeys__list{padding-left:25px}#elementor-hotkeys__navigation .elementor-hotkeys__header{padding-right:25px}}@media (min-width:1440px){#elementor-hotkeys__actions .elementor-hotkeys__header,#elementor-hotkeys__actions .elementor-hotkeys__list{padding-left:50px}#elementor-hotkeys__navigation .elementor-hotkeys__header{padding-right:50px}}@media (min-width:1025px){#elementor-hotkeys__navigation .elementor-hotkeys__list{padding-right:15px}}@media (min-width:1440px){#elementor-hotkeys__navigation .elementor-hotkeys__list{padding-right:40px}}.elementor-hotkeys__col{width:50%}.elementor-hotkeys__header,.elementor-hotkeys__list{width:100%}.elementor-hotkeys__header{padding:10px 30px;font-weight:500}@media (max-width:479px){.elementor-hotkeys__header{padding-right:10px;padding-left:10px}}.elementor-hotkeys__list{background-color:#fff;height:calc(100% - 42px);padding:10px 20px}@media (max-width:479px){.elementor-hotkeys__list{padding:0}}@media (max-width:1024px){#elementor-hotkeys__navigation .elementor-hotkeys__list{-webkit-border-radius:3px;border-radius:3px}.elementor-hotkeys__col{width:100%}.elementor-hotkeys__list{margin-bottom:30px;height:auto}}.elementor-hotkeys__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:20px 10px;border-bottom:1px solid #eceeef}.elementor-hotkeys__item:last-child{margin-bottom:30px}.elementor-hotkeys__item--label{font-size:13px;font-weight:400;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-hotkeys__item--shortcut{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-hotkeys__item--shortcut span{position:relative;background-color:#eceeef;padding:5px 12px;margin-right:27px;-webkit-border-radius:3px;border-radius:3px}.elementor-hotkeys__item--shortcut span:after{content:'+';position:absolute;right:-18px;width:9px;text-align:center}@media (max-width:479px){.elementor-hotkeys__item:last-child{margin-bottom:0}.elementor-hotkeys__item--shortcut span{padding:4px 9px;margin-right:23px}.elementor-hotkeys__item--shortcut span:after{right:-16px}}.elementor-hotkeys__item--shortcut span:last-child{margin-right:0}.elementor-hotkeys__item--shortcut span:last-child:after{display:none}.ui-resizable-n{top:-5px}.ui-resizable-e{right:-5px}.ui-resizable-s{bottom:-5px}.ui-resizable-w{left:-5px}.ui-resizable-ne{top:-5px;right:-5px}.ui-resizable-nw{top:-5px;left:-5px}.ui-resizable-se{bottom:-5px;right:-5px}.ui-resizable-sw{bottom:-5px;left:-5px}.ui-resizable-n,.ui-resizable-s{left:0;height:10px;width:100%;cursor:ns-resize}.ui-resizable-e,.ui-resizable-w{top:0;height:100%;width:10px;cursor:ew-resize}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{height:15px;width:15px}.ui-resizable-nw,.ui-resizable-se{cursor:nwse-resize}.ui-resizable-ne,.ui-resizable-sw{cursor:nesw-resize}.ui-resizable-handle{position:absolute}.ui-resizable-resizing{pointer-events:none}#elementor-navigator{position:fixed;top:100px;width:240px;height:339px;left:30px;background-color:#fff;-webkit-box-shadow:0 2px 20px 0 rgba(0,0,0,.1);box-shadow:0 2px 20px 0 rgba(0,0,0,.1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;z-index:2;display:none}body.elementor-navigator-docked #elementor-navigator{top:0;left:0;height:100%}body:not(.elementor-navigator-docked) #elementor-navigator{-webkit-border-radius:5px;border-radius:5px}#elementor-navigator__inner{height:100%;background-color:#e6e9ec}#elementor-navigator__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:12px 10px;background-color:#fff;border-bottom:1px solid #e6e9ec;cursor:move}#elementor-navigator__close,#elementor-navigator__toggle-all{-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}#elementor-navigator__close:not(:hover),#elementor-navigator__toggle-all:not(:hover){color:#a4afb7}#elementor-navigator__toggle-all{font-size:13px}#elementor-navigator__close{font-size:11px}#elementor-navigator__elements{height:calc(100% - 49px);overflow:auto;position:relative}.elementor-navigator-docked #elementor-navigator__elements{height:calc(100% - 35px)}#elementor-navigator__footer{position:absolute;width:100%;left:0;bottom:0;text-align:center;background-color:#fff;border-top:1px solid #e6e9ec;color:#a4afb7}.elementor-navigator-docked #elementor-navigator__footer{display:none}.elementor-navigator__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:32px;padding-left:4px;font-size:12px;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.elementor-navigator__item>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-navigator__item+.elementor-navigator__elements{display:none}.elementor-navigator__elements .elementor-empty-view{padding:10px;border-bottom:1px solid #e6e9ec}.elementor-navigator__elements .elementor-empty-view__title{margin-right:23px;color:#c2cbd2;font-size:10px;font-style:italic}.elementor-navigator__elements .ui-sortable-helper{background-color:#fff;-webkit-box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);-webkit-transform:rotate(4deg);transform:rotate(4deg);border:1px solid #e6e9ec;pointer-events:none}.elementor-navigator__elements .ui-sortable-placeholder{background-color:#f1f3f5}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view{border-top:2px solid #71d7f7}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view .elementor-empty-view__title,.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view+.ui-sortable-placeholder{display:none}.elementor-navigator__element:not(.elementor-navigator__element--has-children) .elementor-navigator__element__list-toggle{visibility:hidden}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item .elementor-navigator__element__toggle{color:#71d7f7}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item:not(:hover) .elementor-navigator__element__toggle{display:none}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item.elementor-editing{background-color:#71d7f7}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item.elementor-editing>*{color:#fff}.elementor-navigator__element__list-toggle{margin-left:7px;-webkit-transition:-webkit-transform .3s;transition:transform .3s;-o-transition:transform .3s;transition:transform .3s,-webkit-transform .3s;color:#a4afb7}.elementor-navigator__element__element-type{margin-left:8px}.elementor-navigator__element__title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden}.elementor-navigator__element__title__text{white-space:nowrap;-webkit-user-select:text}.elementor-navigator__element__title__text[contenteditable=true]{outline:0;color:#6d7882;background-color:#fff;padding:2px 3px;-webkit-box-shadow:0 0 4px rgba(0,0,0,.2);box-shadow:0 0 4px rgba(0,0,0,.2)}.elementor-navigator__element__title__text:not([contenteditable=true]){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-navigator__element__toggle{text-align:left;font-size:13px;padding:0 5px}.elementor-navigator__element--hidden .elementor-navigator__element__title,.elementor-navigator__element--hidden .elementor-navigator__element__toggle{opacity:.5}.elementor-navigator__element-column{background-color:#fafbfb}.elementor-navigator__element-column>.elementor-navigator__item .elementor-navigator__element__element-type{color:#a4afb7}.elementor-navigator__element-section{background-color:#fff} \ No newline at end of file diff --git a/modules/creativeelements/views/css/editor.css b/modules/creativeelements/views/css/editor.css new file mode 100644 index 00000000..d8d6030e --- /dev/null +++ b/modules/creativeelements/views/css/editor.css @@ -0,0 +1,4136 @@ +@charset "UTF-8"; +*, :before, :after { + margin: 0; + padding: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +body, +html { + height: 100%; } + +html { + background-color: #F1F1F1; } + +iframe, +img { + border: 0 none; } + +li { + list-style: none; } + +a { + text-decoration: none; } + +body { + color: #6d7882; + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + text-decoration: none; + text-transform: none; + overflow: hidden; } + body:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 100%; + width: 0; + background-color: #71d7f7; + -webkit-transition: width .5s; + -o-transition: width .5s; + transition: width .5s; } + body a { + color: #71d7f7; } + body a:hover { + color: #D30C5C; } + body.elementor-editor-active #elementor-preview { + right: 0; } + @media (max-width: 1439px) { + body.elementor-editor-active #elementor-preview { + left: 280px; } } + @media (min-width: 1440px) { + body.elementor-editor-active #elementor-preview { + left: 300px; } } + body.elementor-editor-active #elementor-mode-switcher-preview .fa:before { + content: ""; } + body.elementor-editor-preview #elementor-preview { + left: 0; } + body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before { + content: ""; } + body.elementor-navigator--dock-hint:after { + width: 30px; } + +#elementor-panel:not(.ui-resizable-resizing), +#elementor-preview:not(.ui-resizable-resizing) { + -webkit-transition: left 0.5s, width 0.5s; + -o-transition: left 0.5s, width 0.5s; + transition: left 0.5s, width 0.5s; } + +#elementor-loading { + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: #f1f3f5; + z-index: 9999; } + +#elementor-preview-loading { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #fff; } + #elementor-preview-loading i { + color: #d5dadf; + font-size: 50px; } + +.select2-container { + z-index: 9999; } + .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single, + .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple { + border-color: #d5dadf; } + .select2-container.select2-container--open .select2-selection--single, + .select2-container.select2-container--open .select2-selection--multiple, .select2-container.select2-container--focus .select2-selection--single, + .select2-container.select2-container--focus .select2-selection--multiple { + border-color: #a4afb7; } + +.select2-dropdown { + border-color: #a4afb7; } + .select2-dropdown .select2-search__field { + outline: none; } + +.select2-selection__placeholder { + color: #a4afb7; } + +#elementor-fatal-error-dialog button.dialog-ok { + color: #71d7f7; } + +#elementor-fatal-error-dialog .dialog-header { + color: #6d7882; } + +#elementor-flexbox-attention-dialog .dialog-cancel { + color: #39b54a; } + +#elementor-flexbox-attention-dialog .dialog-ok { + color: #6d7882; } + +.elementor-nerd-box { + padding: 30px; + text-align: center; } + .elementor-nerd-box-icon { + font-size: 52px; + color: #a4afb7; } + .elementor-nerd-box-title { + margin-top: 20px; + font-size: 16px; + font-weight: bold; + line-height: 1.4; } + .elementor-nerd-box-message { + margin-top: 20px; + line-height: 1.8; + font-size: 11px; } + .elementor-nerd-box .elementor-button.elementor-nerd-box-link { + background-color: #fcb92c; + color: #ffffff; + padding: 7px 25px; + margin-top: 20px; + -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1); + -webkit-transition: .5s; + -o-transition: .5s; + transition: .5s; } + .elementor-nerd-box .elementor-button.elementor-nerd-box-link:hover { + background-color: #fdca5e; } + +.eicon-nerd:hover:before { + content: '\e965'; } + +.eicon-nerd:active:before { + content: '\e964'; } + +.elementor-loader-wrapper { + position: absolute; + width: 300px; + left: 50%; + top: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + +.elementor-loader { + -webkit-border-radius: 7px; + border-radius: 7px; + padding: 40px; + height: 150px; + width: 150px; + background-color: rgba(255, 255, 255, 0.9); + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); + box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); } + +.elementor-loader-boxes { + height: 100%; + width: 100%; + position: relative; } + +.elementor-loader-box { + position: absolute; + background-color: #d5dadf; + -webkit-animation: load 1.8s linear infinite; + animation: load 1.8s linear infinite; } + .elementor-loader-box:nth-of-type(1) { + width: 20%; + height: 100%; + left: 0; + top: 0; } + .elementor-loader-box:not(:nth-of-type(1)) { + right: 0; + height: 20%; + width: 60%; } + .elementor-loader-box:nth-of-type(2) { + top: 0; + -webkit-animation-delay: -0.45s; + animation-delay: -0.45s; } + .elementor-loader-box:nth-of-type(3) { + top: 40%; + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; } + .elementor-loader-box:nth-of-type(4) { + bottom: 0; + -webkit-animation-delay: -1.35s; + animation-delay: -1.35s; } + +@-webkit-keyframes load { + 0% { + opacity: .3; } + 50% { + opacity: 1; } + 100% { + opacity: .3; } } + +@keyframes load { + 0% { + opacity: .3; } + 50% { + opacity: 1; } + 100% { + opacity: .3; } } + +.elementor-loading-title { + color: #a4afb7; + text-align: center; + text-transform: uppercase; + margin-top: 30px; + letter-spacing: 7px; + text-indent: 7px; + font-size: 10px; + width: 100%; } + +.elementor-button { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-weight: 500; + text-transform: uppercase; + outline: none; + border: none; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition-property: background, color, opacity, -webkit-box-shadow; + transition-property: background, color, opacity, -webkit-box-shadow; + -o-transition-property: background, color, box-shadow, opacity; + transition-property: background, color, box-shadow, opacity; + transition-property: background, color, box-shadow, opacity, -webkit-box-shadow; + -webkit-transition-duration: .3s; + -o-transition-duration: .3s; + transition-duration: .3s; } + .elementor-button:hover { + border: none; } + .elementor-button:not([disabled]) { + cursor: pointer; } + .elementor-button:not(.elementor-button-state) .elementor-state-icon { + display: none; } + .elementor-button.elementor-button-success { + color: #fff; } + .elementor-button.elementor-button-success[disabled] { + background-color: #c2cbd2; } + .elementor-button.elementor-button-success:not([disabled]) { + background-color: #39b54a; } + .elementor-button.elementor-button-success:not([disabled]):hover { + opacity: 0.85; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-button.elementor-button-success:not([disabled]):active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-button.elementor-button-warning { + background-color: #a4afb7; + color: #fff; } + .elementor-button.elementor-button-warning[disabled] { + background-color: #c2cbd2; } + .elementor-button.elementor-button-warning:not([disabled]):hover { + background-color: #b01b1b; + opacity: 0.85; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-button.elementor-button-warning:not([disabled]):active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-button.elementor-edit-template { + display: inline-block; + margin-top: 15px; + color: #fff; } + .elementor-button.elementor-button-default { + background-color: #a4afb7; + color: #fff; + font-size: 11px; + padding: 6.5px 15px; } + .elementor-button.elementor-button-default:hover { + background-color: #6d7882; + -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); } + .elementor-button.elementor-button-default:active { + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.19), 0 3px 3px rgba(0, 0, 0, 0.1); } + .elementor-button.elementor-button-default:visited { + color: #fff; } + .elementor-button.elementor-button-go-pro { + color: #fff; + background-color: #fcb92c; } + .elementor-button i { + margin-right: 10px; } + +input, select, textarea, .elementor-input-style { + -webkit-border-radius: 3px; + border-radius: 3px; + font-size: 12px; + width: 100%; + background: none; + -webkit-box-shadow: none; + box-shadow: none; + color: #495157; + border: 1px solid; + outline: none; } + input:not(:focus), select:not(:focus), textarea:not(:focus), .elementor-input-style:not(:focus) { + border-color: #d5dadf; } + input:focus, select:focus, textarea:focus, .elementor-input-style:focus { + border-color: #a4afb7; } + input::-webkit-input-placeholder, select::-webkit-input-placeholder, textarea::-webkit-input-placeholder, .elementor-input-style::-webkit-input-placeholder { + color: #a4afb7; } + input::-ms-input-placeholder, select::-ms-input-placeholder, textarea::-ms-input-placeholder, .elementor-input-style::-ms-input-placeholder { + color: #a4afb7; } + input::placeholder, select::placeholder, textarea::placeholder, .elementor-input-style::placeholder { + color: #a4afb7; } + +.elementor-error input, .elementor-error select, .elementor-error textarea { + border-color: #b01b1b; } + +input, textarea, .elementor-input-style { + padding: 5px 8px; } + +textarea, .elementor-input-style { + resize: vertical; } + +input[type="checkbox"], +input[type="radio"] { + border: 1px solid #d5dadf; + background: #fff; + color: #555; + clear: none; + cursor: pointer; + display: inline-block; + line-height: 0; + height: 16px; + margin: -4px 4px 0 0; + outline: 0; + text-align: center; + vertical-align: middle; + width: 16px; + min-width: 16px; + -webkit-transition: .05s border-color ease-in-out; + -o-transition: .05s border-color ease-in-out; + transition: .05s border-color ease-in-out; } + input[type="checkbox"]:focus, + input[type="radio"]:focus { + border-color: #a4afb7; } + +input[disabled] { + background-color: #e6e9ec; + cursor: not-allowed; + opacity: 1; } + +select { + height: 27px; } + +/* + * Container style + */ +.ps { + overflow: hidden !important; + overflow-anchor: none; + -ms-touch-action: auto; + touch-action: auto; } + +/* + * Scrollbar rail styles + */ +.ps__rail-y { + display: none; + opacity: 0; + -webkit-transition: background-color .2s linear, opacity .2s linear; + -o-transition: background-color .2s linear, opacity .2s linear; + transition: background-color .2s linear, opacity .2s linear; + width: 15px; + /* there must be 'right' or 'left' for ps__rail-y */ + right: 0; + left: initial !important; + /* please don't change 'position' */ + position: absolute; } + +.ps--active-y > .ps__rail-y { + display: block; + background-color: transparent; } + +.ps:hover > .ps__rail-y, +.ps--focus > .ps__rail-y, +.ps--scrolling-y > .ps__rail-y { + opacity: 0.6; } + +.ps .ps__rail-y:hover, +.ps .ps__rail-y:focus, +.ps .ps__rail-y.ps--clicking { + background-color: #eee; + opacity: 0.9; } + +.ps__thumb-y { + background-color: #aaa; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-transition: background-color .2s linear, width .2s ease-in-out; + -o-transition: background-color .2s linear, width .2s ease-in-out; + transition: background-color .2s linear, width .2s ease-in-out; + width: 6px; + /* there must be 'right' for ps__thumb-y */ + right: 2px; + /* please don't change 'position' */ + position: absolute; } + +.ps__rail-y:hover > .ps__thumb-y, +.ps__rail-y:focus > .ps__thumb-y, +.ps__rail-y.ps--clicking .ps__thumb-y { + background-color: #999; + width: 11px; } + +/* Make clicks pass-through */ +#nprogress { + pointer-events: none; } + +#nprogress .bar { + background: #39b54a; + position: fixed; + z-index: 1031; + top: 0; + left: 0; + width: 100%; + height: 2px; } + +/* Fancy blur effect */ +#nprogress .peg { + display: block; + position: absolute; + right: 0; + width: 100px; + height: 100%; + -webkit-box-shadow: 0 0 10px #39b54a, 0 0 5px #39b54a; + box-shadow: 0 0 10px #39b54a, 0 0 5px #39b54a; + opacity: 1.0; + -webkit-transform: rotate(3deg) translate(0px, -4px); + transform: rotate(3deg) translate(0px, -4px); } + +/* Remove these to get rid of the spinner */ +#nprogress .spinner { + display: none; + position: fixed; + z-index: 1031; + top: 15px; + right: 15px; } + +#nprogress .spinner-icon { + width: 18px; + height: 18px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: solid 2px transparent; + border-top-color: #39b54a; + border-left-color: #39b54a; + -webkit-border-radius: 50%; + border-radius: 50%; + -webkit-animation: nprogress-spinner 400ms linear infinite; + animation: nprogress-spinner 400ms linear infinite; } + +.nprogress-custom-parent { + overflow: hidden; + position: relative; } + +.nprogress-custom-parent #nprogress .spinner, +.nprogress-custom-parent #nprogress .bar { + position: absolute; } + +@-webkit-keyframes nprogress-spinner { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes nprogress-spinner { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +#nprogress .bar, +#nprogress .spinner { + z-index: 100000; } + +.elementor-panel { + position: fixed; + height: 100%; + top: 0; + bottom: 0; + overflow: visible; + background-color: #e6e9ec; + z-index: 1; + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-size: 13px; } + .elementor-editor-active .elementor-panel { + left: 0; } + @media (max-width: 1439px) { + .elementor-editor-preview .elementor-panel { + left: -280px; } } + @media (min-width: 1440px) { + .elementor-editor-preview .elementor-panel { + left: -300px; } } + .elementor-editor-preview .elementor-panel > .ui-resizable-e, .elementor-editor-preview .elementor-panel > .ui-resizable-w { + display: none; } + @media (max-width: 1439px) { + .elementor-panel { + width: 280px; } } + @media (min-width: 1440px) { + .elementor-panel { + width: 300px; } } + .elementor-panel .ps-scrollbar-y-rail { + z-index: 2; } + .elementor-panel ::-moz-selection { + background: #5bc0de; + color: #ffffff; } + .elementor-panel ::selection { + background: #5bc0de; + color: #ffffff; } + .elementor-panel a { + color: #D30C5C; } + .elementor-panel h1, + .elementor-panel h2, + .elementor-panel h3, + .elementor-panel h4, + .elementor-panel h5, + .elementor-panel h6 { + font-size: 100%; + font-weight: normal; } + .elementor-panel abbr, + .elementor-panel acronym { + border: 0; + font-variant: normal; } + .elementor-panel sup { + vertical-align: text-top; } + .elementor-panel sub { + vertical-align: text-bottom; } + .elementor-panel img { + max-width: 100%; + height: auto; + border: 0; } + .elementor-panel ::-moz-focus-inner { + padding: 0; + border: 0; } + .elementor-panel :focus { + outline: 0; } + .elementor-panel .elementor-panel-box { + margin-top: 10px; + background-color: #fff; } + .elementor-panel .elementor-panel-box-content { + padding: 20px 20px 10px; } + .elementor-panel .elementor-button { + display: inline-block; } + .elementor-panel .elementor-panel-alert { + padding: 15px; + border-left: 5px solid transparent; + position: relative; + font-size: 12px; + line-height: 1.5; + text-align: left; } + .elementor-panel .elementor-panel-alert a { + color: inherit; } + .elementor-panel .elementor-panel-alert.elementor-panel-alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bcdff1; } + .elementor-panel .elementor-panel-alert.elementor-panel-alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #cae6be; } + .elementor-panel .elementor-panel-alert.elementor-panel-alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #f9f0c3; } + .elementor-panel .elementor-panel-alert.elementor-panel-alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #e8c4c4; } + .elementor-panel .elementor-label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + -webkit-border-radius: .25em; + border-radius: .25em; + text-transform: capitalize; } + .elementor-panel .elementor-label.elementor-label-default { + background-color: #a4afb7; } + .elementor-panel .elementor-label.elementor-label-info { + background-color: #5bc0de; } + .elementor-panel .elementor-label.elementor-label-success { + background-color: #5cb85c; } + .elementor-panel .elementor-label.elementor-label-warning { + background-color: #f0ad4e; } + .elementor-panel .elementor-label.elementor-label-danger { + background-color: #d9534f; } + .elementor-panel .elementor-descriptor, .elementor-panel .elementor-control-field-description { + font-size: 11px; + font-style: italic; + line-height: 1.4; + color: #a4afb7; } + .elementor-panel .elementor-controls-popover { + display: none; + position: absolute; + -webkit-box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); + box-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); + -webkit-border-radius: 3px; + border-radius: 3px; + left: 0; + right: 0; + margin: -4px auto 5px; + padding-top: 15px; + width: 90%; + z-index: 10000; + background-color: #fff; } + .elementor-panel .elementor-controls-popover:before { + content: ''; + position: absolute; + top: -16px; + right: 22px; + border: 8px solid transparent; + border-bottom-color: #fff; } + .elementor-panel .elementor-controls-popover div.elementor-control { + background-color: transparent; } + .elementor-panel .elementor-controls-popover div.elementor-control:before { + content: none; } + .elementor-panel #elementor-panel-get-pro-elements .elementor-nerd-box-message { + text-transform: uppercase; } + .elementor-panel .select2-container { + width: 100% !important; } + .elementor-panel #elementor-controls .pojo-widget-button-collapse { + display: none; } + .elementor-panel #elementor-panel-header { + display: table; + height: 40px; + width: 100%; + background-color: #D30C5C; + color: #fff; } + .elementor-panel #elementor-panel-header > * { + display: table-cell; + vertical-align: middle; + text-align: center; } + .elementor-panel .elementor-header-button { + width: 40px; } + .elementor-panel .elementor-header-button .elementor-icon { + cursor: pointer; + display: block; + font-size: 19px; + height: 40px; + line-height: 40px; + -webkit-transition: all 0.5s; + -o-transition: all 0.5s; + transition: all 0.5s; } + .elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar { + font-size: 18px; } + .elementor-panel .elementor-header-button .elementor-icon:hover { + color: #d5dadf; } + .elementor-panel #elementor-panel-header-title { + font-size: 15px; } + .elementor-panel #elementor-panel-header-title img { + width: 66px; } + body:not(.elementor-controls-ready) .elementor-panel #elementor-panel-page-elements { + height: 100%; + overflow: hidden; } + .elementor-panel #elementor-panel-elements-navigation .elementor-panel-navigation-tab { + text-align: center; + padding: 10px 0; + font-size: 11px; + text-transform: uppercase; + cursor: pointer; } + .elementor-panel #elementor-panel-elements { + overflow: hidden; + padding: 0 5px; } + .elementor-panel #elementor-panel-elements-loading { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + background-color: rgba(255, 255, 255, 0.5); + z-index: 1; } + body.elementor-controls-ready .elementor-panel #elementor-panel-elements-loading { + display: none; } + .elementor-panel #elementor-panel-elements-loading .eicon-loading { + font-size: 25px; + color: #71d7f7; } + .elementor-panel .elementor-element-wrapper { + float: left; + width: 50%; + padding: 5px; + text-align: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .elementor-panel .elementor-element { + -webkit-border-radius: 3px; + border-radius: 3px; + background-color: #fff; + cursor: move; } + .elementor-panel .elementor-element:hover { + -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); } + .elementor-panel .elementor-element:hover .icon, .elementor-panel .elementor-element:hover .title { + color: #D30C5C; } + .elementor-panel .elementor-element .icon { + font-size: 28px; + padding-top: 15px; + color: #556068; } + .elementor-panel .elementor-element .elementor-element-title-wrapper { + display: table; + width: 100%; } + .elementor-panel .elementor-element .title { + font-size: 11px; + color: #556068; + display: table-cell; + vertical-align: middle; + height: 40px; } + .elementor-panel #elementor-panel-elements-search-wrapper { + position: relative; + margin: 10px 10px 5px; } + .elementor-panel #elementor-panel-elements-search-wrapper i { + position: absolute; + right: 0; + top: 50%; + color: #a4afb7; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + -webkit-transition: right 1s; + -o-transition: right 1s; + transition: right 1s; } + .elementor-panel #elementor-panel-elements-search-input { + background-color: rgba(255, 255, 255, 0.7); + font-size: 11px; + padding: 10px 27px 10px 10px; + font-style: italic; + color: #a4afb7; + border: none; + -webkit-transition: all 1s; + -o-transition: all 1s; + transition: all 1s; + -webkit-border-radius: 3px; + border-radius: 3px; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; } + .elementor-panel #elementor-panel-elements-search-input + i { + right: 10px; } + .elementor-panel #elementor-panel-elements-search-input:focus { + background-color: white; + padding-left: 15px; } + .elementor-panel #elementor-panel-elements-search-input:focus + i { + right: 15px; } + .elementor-panel .elementor-panel-category { + position: relative; } + .elementor-panel .elementor-panel-category:first-child .elementor-panel-category-title { + padding-top: 14px; } + .elementor-panel .elementor-panel-category.elementor-active .elementor-panel-category-title:before { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + .elementor-panel .elementor-panel-category:not(.elementor-active):after { + content: ''; + position: absolute; + left: 15px; + right: 15px; + bottom: 0; + height: 8px; + background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.03)), to(transparent)); + background: -webkit-linear-gradient(rgba(0, 0, 0, 0.03), transparent); + background: -o-linear-gradient(rgba(0, 0, 0, 0.03), transparent); + background: linear-gradient(rgba(0, 0, 0, 0.03), transparent); + -webkit-transform: translateY(100%); + transform: translateY(100%); } + .elementor-panel .elementor-panel-category-title { + margin: 0 15px; + padding: 20px 0; + position: relative; + text-transform: uppercase; + font-size: 11px; + cursor: pointer; } + .elementor-panel .elementor-panel-category-title:before { + content: ""; + font-family: eicons; + position: absolute; + right: 0; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + -o-transition: transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; } + .elementor-panel .elementor-panel-category-items { + overflow: hidden; + padding: 0 5px; + display: none; } + .elementor-panel .elementor-panel-scheme-title { + padding: 10px 20px; + margin-top: 10px; } + .elementor-panel .elementor-panel-scheme-description { + padding: 20px 20px 0; } + .elementor-panel .elementor-panel-scheme-buttons { + padding: 0 20px; + display: table; + table-layout: fixed; + width: 100%; + height: 40px; + background-color: #fff; + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); } + .elementor-panel .elementor-panel-scheme-buttons .elementor-button { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + font-size: 11px; + font-weight: 400; } + .elementor-panel .elementor-panel-scheme-button-wrapper { + display: table-cell; + vertical-align: middle; + text-align: center; } + .elementor-panel .elementor-panel-scheme-button-wrapper:first-child { + text-align: left; } + .elementor-panel .elementor-panel-scheme-button-wrapper:last-child { + text-align: right; } + .elementor-panel .elementor-panel-scheme-save .elementor-button { + padding: 6px 18px; } + .elementor-panel .elementor-panel-scheme-reset .elementor-button, .elementor-panel .elementor-panel-scheme-discard .elementor-button { + color: #a4afb7; + background: none; } + .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-items { + position: relative; + display: grid; + grid-template-columns: repeat(4, 50px); + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active) { + float: none; } + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active { + top: 10px; } + @media (max-width: 1439px) { + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active { + border-width: 0 4px 0 5px; } } + @media (min-width: 1440px) { + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active { + border-width: 0 7px 0 5px; } } + @media (max-width: 1439px) { + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 4px; } } + @media (min-width: 1440px) { + .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 6px; } } + @media (max-width: 1439px) { + [class*="wp-version-4-9"] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result, [class*="wp-version-5"] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 10px; } } + @media (min-width: 1440px) { + [class*="wp-version-4-9"] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result, [class*="wp-version-5"] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 9px; } } + .elementor-panel .elementor-panel-scheme-color-title { + text-align: center; + text-transform: uppercase; + margin: 10px 0; + color: #c2cbd2; + font-size: 8px; } + .elementor-panel .elementor-panel-scheme-typography-item { + display: table; + table-layout: fixed; + width: 100%; + margin-bottom: 15px; } + .elementor-panel .elementor-panel-scheme-typography-item > * { + display: table-cell; + vertical-align: middle; } + .elementor-panel .elementor-panel-scheme-typography-item-value select, .elementor-panel .elementor-panel-scheme-typography-item-value input { + width: 100%; } + .elementor-panel .elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-scheme-typography-items { + display: none; } + .elementor-panel .elementor-panel-scheme-color-system-scheme { + margin-bottom: 10px; } + .elementor-panel .elementor-panel-scheme-color-system-scheme .elementor-title { + font-size: 11px; + color: #a4afb7; + font-style: italic; + margin-top: 5px; } + .elementor-panel .elementor-panel-scheme-color-system-items { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-transition: border .5s; + -o-transition: border .5s; + transition: border .5s; + overflow: hidden; + padding: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; + cursor: pointer; } + .elementor-panel .elementor-panel-scheme-color-system-items:hover { + border: 1px solid #a4afb7; } + .elementor-panel .elementor-panel-scheme-color-system-item { + height: 20px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-panel #elementor-panel-schemes-disabled a:hover { + text-decoration: underline; } + .elementor-panel #elementor-panel-page-menu { + padding: 25px 15px; } + .elementor-panel .elementor-panel-menu-group-title { + text-transform: uppercase; + font-size: 11px; } + .elementor-panel .elementor-panel-menu-items { + margin: 15px 0 25px; + -webkit-border-radius: 5px; + border-radius: 5px; + overflow: hidden; } + .elementor-panel .elementor-panel-menu-item { + display: table; + width: 100%; + height: 40px; + cursor: pointer; + margin-bottom: 1px; + background-color: #fff; } + .elementor-panel .elementor-panel-menu-item:hover { + background-color: rgba(255, 255, 255, 0.8); } + .elementor-panel .elementor-panel-menu-item > * { + display: table-cell; + vertical-align: middle; } + .elementor-panel .elementor-panel-menu-item-icon { + text-align: center; + width: 50px; + color: #a4afb7; } + .elementor-panel .elementor-panel-menu-item-title { + font-weight: 500; } + .elementor-panel .elementor-panel-menu-item-title > span { + color: #39b54a; } + .elementor-panel .elementor-panel-menu-item a { + color: #6d7882; } + .elementor-panel .elementor-panel-menu-item-exit-to-dashboard { + background-color: #0085ba; + color: #fff; + text-transform: uppercase; + font-size: 12px; } + .elementor-panel .elementor-panel-menu-item-exit-to-dashboard:hover { + background-color: #0073a1; } + .elementor-panel .elementor-panel-menu-item-exit-to-dashboard .elementor-panel-menu-item-title, + .elementor-panel .elementor-panel-menu-item-exit-to-dashboard .elementor-panel-menu-item-icon { + color: #fff; } + .elementor-panel .elementor-control.elementor-control-clear_page { + background-color: transparent; } + .elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-panel .elementor-panel-navigation { + background-color: #ffffff; + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + display: table; + table-layout: fixed; + width: 100%; } + .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab { + display: table-cell; } + .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #fff); + background-image: -o-linear-gradient(top, #f3f3f3, #fff); + background-image: linear-gradient(to bottom, #f3f3f3, #fff); + border-bottom: 3px solid #D30C5C; } + .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a { + display: block; + text-align: center; + padding: 12px 0 8px; + font-size: 10px; + color: #6d7882; } + .elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a:before { + font-family: FontAwesome; + font-size: 16px; + display: block; + margin-bottom: 6px; } + .elementor-panel .elementor-tab-control-content a:before { + content: '\f040'; } + .elementor-panel .elementor-tab-control-style a:before { + content: '\f042'; } + .elementor-panel .elementor-tab-control-advanced a:before, .elementor-panel .elementor-tab-control-settings a:before, .elementor-panel .elementor-tab-control-general_style a:before { + content: '\f013'; } + .elementor-panel .elementor-tab-control-responsive a:before { + content: '\f10a'; } + .elementor-panel .elementor-tab-control-layout a:before, .elementor-panel .elementor-tab-control-column a:before { + content: '\f0db'; } + .elementor-panel .elementor-tab-control-lightbox a:before { + content: '\f2d2'; } + .elementor-panel #elementor-panel-footer { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 40px; + background-color: #495157; } + .elementor-panel #elementor-panel-footer-tools { + display: table; + table-layout: fixed; + width: 100%; + height: 100%; } + .elementor-panel .elementor-panel-footer-tool { + display: table-cell; + vertical-align: middle; + text-align: center; + cursor: pointer; + color: #a4afb7; + -webkit-transition: all 0.5s; + -o-transition: all 0.5s; + transition: all 0.5s; } + .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update { + border-right: 1px solid #2d8739; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update i { + margin-right: 5px; } + .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options { + float: left; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + .elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i { + margin: auto; } + .elementor-panel .elementor-panel-footer-tool.elementor-open { + color: #fff; } + .elementor-panel .elementor-panel-footer-tool:not(.elementor-open):hover { + color: #d5dadf; } + .elementor-panel .elementor-panel-footer-tool:not(.elementor-open) .elementor-panel-footer-sub-menu-wrapper { + display: none; } + .elementor-panel .elementor-panel-footer-sub-menu-wrapper { + position: absolute; + bottom: 100%; + left: 0; + width: 100%; + background-color: #556068; + padding: 10px; + -webkit-box-shadow: -2px -5px 8px rgba(0, 0, 0, 0.1); + box-shadow: -2px -5px 8px rgba(0, 0, 0, 0.1); + cursor: default; + z-index: 10000; } + .elementor-panel .elementor-panel-footer-sub-menu { + -webkit-border-radius: 5px; + border-radius: 5px; + overflow: hidden; } + .elementor-panel .elementor-panel-footer-sub-menu-item { + background-color: #495157; + display: table; + table-layout: fixed; + width: 100%; + cursor: pointer; } + .elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled .elementor-icon, + .elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled .elementor-title { + color: #6d7882; } + .elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child) { + margin-bottom: 1px; } + .elementor-panel .elementor-panel-footer-sub-menu-item[data-device-mode="mobile-landscape"] .fa-mobile { + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); } + .elementor-panel .elementor-panel-footer-sub-menu-item:hover { + background-color: rgba(0, 0, 0, 0.2); } + .elementor-panel .elementor-panel-footer-sub-menu-item.active { + background-color: rgba(0, 0, 0, 0.3); } + .elementor-panel .elementor-panel-footer-sub-menu-item > * { + display: table-cell; + height: 40px; + vertical-align: middle; } + .elementor-panel .elementor-panel-footer-sub-menu-item .elementor-icon { + width: 40px; + color: #a4afb7; } + .elementor-panel .elementor-panel-footer-sub-menu-item .elementor-title { + text-align: left; + color: #d5dadf; } + .elementor-panel .elementor-panel-footer-sub-menu-item .elementor-description { + width: 95px; + text-align: left; + font-size: 11px; + font-style: italic; + color: #a4afb7; } + .elementor-panel #elementor-panel-footer-help-title { + text-align: left; + padding: 10px 0; + color: #d5dadf; } + .elementor-panel #elementor-panel-footer-responsive > i { + display: block; + height: 100%; + line-height: 40px; } + .elementor-panel #elementor-panel-footer-saver-publish { + width: 80px; } + .elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state i { + margin-right: 0; } + .elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state #elementor-panel-saver-button-publish-label { + display: none; } + .elementor-panel #elementor-panel-footer-saver-options { + width: 35px; + border-left: 1px solid #495157; } + .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper { + font-size: 11px; + font-style: italic; + color: #a4afb7; + padding: 5px 0 15px; } + .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper:not(.elementor-state-active) .elementor-state-icon { + display: none; } + .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time { + border-bottom: 1px dotted transparent; + -webkit-transition: all ease-in-out .3s; + -o-transition: all ease-in-out .3s; + transition: all ease-in-out .3s; + cursor: pointer; } + .elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time:hover { + border-bottom-color: inherit; } + .elementor-panel .elementor-disabled { + cursor: default; } + .elementor-panel #elementor-panel-saver-button-preview a { + color: #a4afb7; } + .elementor-panel #elementor-panel-saver-button-publish, .elementor-panel #elementor-panel-saver-button-save-options { + font-size: 11px; + text-transform: uppercase; + height: 26px; } + .elementor-panel #elementor-panel-saver-button-publish.elementor-disabled, .elementor-panel #elementor-panel-saver-button-save-options.elementor-disabled { + background-color: #556068; + color: #a4afb7; } + .elementor-panel #elementor-panel-saver-button-publish { + width: 100%; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-panel #elementor-panel-saver-button-save-options { + width: 25px; } + +#elementor-panel-inner { + position: relative; + height: 100%; + -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); + box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); } + +#elementor-panel-content-wrapper { + position: absolute; + bottom: 40px; + top: 40px; + left: 0; + width: 100%; } + +.elementor-panel-container { + clear: both; + padding-left: 15px; + padding-right: 15px; } + +.media-modal.wp-core-ui input { + width: auto; } + +.media-modal.wp-core-ui fieldset { + padding: 0; + border: 0; } + +.media-modal.wp-core-ui .wp-clearfix::after { + content: ''; + display: table; + clear: both; } + +.elementor-control { + background-color: #fff; + position: relative; + padding: 0 20px 15px; } + .elementor-control a { + font-weight: 500; + text-decoration: none; + border-bottom: 1px dotted transparent; + -webkit-transition: all ease-in-out .3s; + -o-transition: all ease-in-out .3s; + transition: all ease-in-out .3s; } + .elementor-control a:hover { + border-bottom-color: inherit; } + .elementor-control .elementor-control-content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + .elementor-control .elementor-control-title { + font-size: 12px; + line-height: 1; + margin-right: 5px; } + .elementor-control .elementor-control-spinner { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-control.elementor-control-type-divider { + padding: 0; + background-color: transparent; } + .elementor-control.elementor-control-type-divider .elementor-control-content { + border-width: 0; + border-color: #e6e9ec; + border-style: solid; + border-top-width: 1px; + background-color: #ffffff; + height: 15px; } + .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp { + margin-top: 15px; } + .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before { + content: ''; + height: 1px; + display: block; + margin-bottom: 15px; + background-color: transparent; } + .elementor-control.elementor-control-separator-before { + padding-top: 15px; } + .elementor-control.elementor-control-separator-before:before { + content: ''; + position: absolute; + height: 1px; + width: 100%; + top: 0; + left: 0; + background-color: #e6e9ec; } + .elementor-control.elementor-control-separator-after:after { + content: ''; + position: absolute; + height: 1px; + width: 100%; + bottom: 0; + left: 0; + background-color: #e6e9ec; } + .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs, + .elementor-control.elementor-control-separator-after + .elementor-control-separator-default { + padding-top: 15px; } + .elementor-control.elementor-control-deprecated { + color: #b01b1b; } + .elementor-control.elementor-control-deprecated .elementor-control-field-description { + color: #b01b1b; } + .elementor-control.elementor-control-hidden-label > * > .elementor-control-title, .elementor-control.elementor-control-hidden-label > * > * > .elementor-control-title { + display: none; } + .elementor-control.elementor-hidden-control { + display: none; } + .elementor-control.elementor-control-type-heading .elementor-control-title { + font-weight: bold; + margin: 0; } + body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop { + display: none; } + body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet { + display: none; } + body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile { + display: none; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper { + position: relative; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper select { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + color: #495157; + font-size: 12px; + font-family: inherit; + font-weight: inherit; + font-style: inherit; + text-transform: inherit; + letter-spacing: inherit; + line-height: inherit; + -webkit-flex-basis: 100%; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + padding-left: 5px; + padding-right: 20px; + cursor: pointer; } + .elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after { + font-family: eicons; + content: '\e955'; + font-size: 12px; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + right: 5px; + pointer-events: none; } + .elementor-control .select2-container { + width: 100% !important; + outline: none; } + .elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear { + display: none; } + .elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice { + line-height: 1.5; + font-size: 0.9em; + border: none; + -webkit-border-radius: 0; + border-radius: 0; } + .elementor-control .select2-container.select2-container--default .select2-selection__rendered { + line-height: 27px; } + .elementor-control .select2-selection { + outline: none; } + .elementor-control .select2-selection--single { + height: 27px; } + .elementor-control .select2-selection__rendered { + line-height: 27px; } + .elementor-control .select2-selection__arrow { + height: 27px; + top: 0; } + +.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before, +.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before { + content: '\f0d7'; } + +.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before, +.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before { + content: ""; } + +.elementor-panel-heading { + display: table; + table-layout: fixed; + height: 40px; + padding: 0 20px; + width: 100%; + border-bottom: 1px solid #e6e9ec; + cursor: pointer; } + .elementor-panel-heading > * { + display: table-cell; + vertical-align: middle; } + .elementor-panel-heading-toggle { + width: 20px; + color: #495157; } + .elementor-panel-heading-title { + color: #495157; + font-weight: bold; } + +.elementor-control-wp { + line-height: 1.5; } + .elementor-control-wp p { + margin: 15px 0; } + +.elementor-control-field { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-label-block > .elementor-control-content > .elementor-control-field { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .elementor-label-block > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + width: 100%; + margin-top: 10px; } + +.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic) > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + margin-top: 0; } + +.elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-title { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; } + +.elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + width: 55%; + -webkit-flex-shrink: 1; + -ms-flex-negative: 1; + flex-shrink: 1; + margin-left: auto; } + +.elementor-control-field-description { + margin-top: 10px; } + +.elementor-group-control-attachment_alert .elementor-control-field-description { + margin-top: 0; } + +.elementor-required { + color: #b01b1b; } + +.elementor-choices { + display: table; + width: 100%; + height: 27px; + background-color: #a4afb7; + text-align: center; + border-spacing: 1px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-choices input { + display: none; } + .elementor-choices input:checked + .elementor-choices-label { + color: #fff; } + .elementor-choices input:not(:checked) + .elementor-choices-label { + background-color: #fff; + color: #a4afb7; } + .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-choices input:not(:checked) + .elementor-choices-label:last-child { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + .elementor-choices .elementor-choices-label { + display: table-cell; + vertical-align: middle; + font-size: 12px; + -webkit-transition: all .5s; + -o-transition: all .5s; + transition: all .5s; + cursor: pointer; } + +.elementor-units-choices { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: right; } + .elementor-units-choices input { + display: none; } + .elementor-units-choices input:not(:checked) + label { + color: #c2cbd2; } + .elementor-units-choices input:checked + label { + text-decoration: underline; } + .elementor-units-choices label { + cursor: pointer; + padding: 0 2px; + text-transform: uppercase; + font-size: 9px; } + +.elementor-control-responsive-switchers { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin-right: 5px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher { + display: inline-block; + -webkit-border-radius: 50%; + border-radius: 50%; + height: 18px; + width: 18px; + background-color: #a4afb7; + cursor: pointer; + position: relative; + color: #fff; + font-size: 8px; + text-align: center; + -webkit-transition: background-color .5s; + -o-transition: background-color .5s; + transition: background-color .5s; } + .elementor-control-responsive-switchers .elementor-responsive-switcher:not(:first-child) { + margin-left: 5px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher:hover { + background-color: #c2cbd2; } + .elementor-control-responsive-switchers .elementor-responsive-switcher i { + position: relative; + display: block; + line-height: 18px; } + .elementor-control-responsive-switchers .elementor-responsive-switcher i:before { + height: 18px; + width: 18px; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + +.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher { + background: #c2cbd2; } + .elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop) { + display: none; } + +.elementor-device-mobile .elementor-responsive-switcher-mobile { + background-color: #71d7f7; } + +.elementor-device-tablet .elementor-responsive-switcher-tablet { + background-color: #71d7f7; } + +.elementor-update-preview { + margin: 15px 15px 0; + background-color: #e6e9ec; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-update-preview-button-wrapper { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: right; } + +.elementor-update-preview-button { + padding: 8px 15px; + text-transform: uppercase; } + +.rtl .elementor-control-text_align .elementor-choices, +.rtl .elementor-control-align .elementor-choices, +.rtl .elementor-control-position .elementor-choices { + direction: ltr; } + .rtl .elementor-control-text_align .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2), + .rtl .elementor-control-align .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2), + .rtl .elementor-control-position .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .rtl .elementor-control-text_align .elementor-choices input:not(:checked) + .elementor-choices-label:last-child, + .rtl .elementor-control-align .elementor-choices input:not(:checked) + .elementor-choices-label:last-child, + .rtl .elementor-control-position .elementor-choices input:not(:checked) + .elementor-choices-label:last-child { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + +.elementor-control-direction-ltr { + direction: ltr; } + +.elementor-control-direction-rtl { + direction: rtl; } + +.elementor-control-type-box_shadow .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-box_shadow .elementor-shadow-slider { + margin-top: 10px; } + +.elementor-control-type-button .elementor-control-input-wrapper { + text-align: right; } + +.elementor-control-type-button .elementor-button { + width: auto; + height: 26px; } + +.elementor-control-type-code { + padding: 0 10px 15px; } + +.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-title { + width: 70%; } + +.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + height: 27px; + width: 30%; } + +.elementor-group-control-css-filter .elementor-slider { + height: 6px; + -webkit-box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); + box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); } + +.elementor-group-control-css-filter .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper { + margin-top: 0; + margin-bottom: 5px; } + +.elementor-group-control-blur .elementor-slider { + background: url("../images/blur.png"); + -webkit-background-size: cover; + background-size: cover; + background-position: center; } + +.elementor-group-control-contrast .elementor-slider { + background: url("../images/contrast.png"); + -webkit-background-size: 100% 100%; + background-size: 100% 100%; } + +.elementor-group-control-hue .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(red), color-stop(orange), color-stop(yellow), color-stop(greenyellow), color-stop(limegreen), color-stop(deepskyblue), color-stop(blue), color-stop(95%, darkviolet)); + background-image: -webkit-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); + background-image: -o-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); + background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); } + +.elementor-group-control-saturate .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(gray), to(red)); + background-image: -webkit-linear-gradient(left, gray, red); + background-image: -o-linear-gradient(left, gray, red); + background-image: linear-gradient(to right, gray, red); } + +.elementor-group-control-brightness .elementor-slider { + background-image: -webkit-gradient(linear, left top, right top, from(black), to(white)); + background-image: -webkit-linear-gradient(left, black, white); + background-image: -o-linear-gradient(left, black, white); + background-image: linear-gradient(to right, black, white); } + +.elementor-control-type-dimensions .elementor-control-dimensions { + overflow: hidden; } + +.elementor-control-type-dimensions li { + float: left; + width: 20%; } + .elementor-control-type-dimensions li input, + .elementor-control-type-dimensions li .elementor-link-dimensions { + display: block; + text-align: center; + width: 100%; + border-color: #a4afb7; + height: 27px; } + .elementor-control-type-dimensions li input { + border-left: none; + -webkit-border-radius: 0; + border-radius: 0; + padding: 4px 0; } + .elementor-control-type-dimensions li input:focus + .elementor-control-dimension-label { + color: #a4afb7; } + .elementor-control-type-dimensions li .elementor-link-dimensions { + border: 1px solid #a4afb7; + border-left: none; + background-color: #fff; + padding: 0; + outline: none; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + cursor: pointer; } + .elementor-control-type-dimensions li:first-child input { + border-left: 1px solid #a4afb7; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + +.elementor-control-type-dimensions .elementor-control-dimension-label { + display: block; + text-align: center; + color: #d5dadf; + font-size: 9px; + text-transform: uppercase; + padding-top: 5px; } + +.elementor-control-type-dimensions .elementor-link-dimensions.unlinked { + background-color: #fff; } + .elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked { + display: none; } + +.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) { + background-color: #a4afb7; } + .elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked { + display: none; } + +.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked { + color: #fff; } + +.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear, .elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails { + display: none; } + +.elementor-control-type-gallery .elementor-control-gallery-thumbnails { + overflow: hidden; + margin-top: 20px; + cursor: pointer; } + +.elementor-control-type-gallery .elementor-control-gallery-thumbnail { + width: 40px; + height: 40px; + -webkit-background-size: cover; + background-size: cover; + background-position: 50% 50%; + float: left; + margin-bottom: 10px; } + .elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)) { + margin-right: 10px; } + +.elementor-control-type-gallery .elementor-control-gallery-add { + width: 100%; + height: 30px; + color: #fff; + background-color: #a4afb7; + margin-top: 10px; + text-transform: uppercase; } + +.elementor-control-type-gallery .elementor-control-gallery-clear { + color: #b01b1b; + cursor: pointer; } + +.elementor-control-type-hidden { + display: none !important; } + +.elementor-control-type-icon .select2-selection__rendered .fa { + margin-right: 3px; } + +.elementor-control-type-image_dimensions .elementor-control-field-description { + margin: 0 0 15px; + line-height: 1.4; } + +.elementor-control-type-image_dimensions .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-field { + width: 65px; + float: left; } + .elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus + .elementor-image-dimensions-field-description { + color: #a4afb7; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-separator { + width: 20px; + text-align: center; + float: left; + padding-top: 4px; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description { + display: block; + text-transform: uppercase; + margin-top: 5px; + color: #d5dadf; + font-size: 9px; + text-align: center; } + +.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button { + float: right; + height: 27px; + width: 65px; } + +.elementor-control-type-media .elementor-control-input-wrapper { + padding: 7px; + border: 1px solid; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; } + .elementor-control-type-media .elementor-control-input-wrapper:not(:hover) { + border-color: #d5dadf; } + .elementor-control-type-media .elementor-control-input-wrapper:not(:hover) .elementor-control-media-upload-button { + background-color: #d5dadf; } + .elementor-control-type-media .elementor-control-input-wrapper:hover { + border-color: #a4afb7; } + .elementor-control-type-media .elementor-control-input-wrapper:hover .elementor-control-media-upload-button { + background-color: #a4afb7; } + +.elementor-control-type-media .elementor-control-media { + cursor: pointer; } + .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area { + display: none; } + .elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button { + display: none; } + +.elementor-control-type-media .fa-plus-circle { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + color: #fff; + font-size: 20px; } + +.elementor-control-type-media .elementor-control-media-area { + background-image: -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + background-image: -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + background-image: linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd); + -webkit-background-size: 16px 16px; + background-size: 16px 16px; + background-position: 0 0, 8px 8px; + background-color: #f6f6f6; + overflow: hidden; } + .elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete { + -webkit-box-shadow: none; + box-shadow: none; + bottom: -30px; } + .elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image { + opacity: .9; } + .elementor-control-type-media .elementor-control-media-area i { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + color: rgba(255, 255, 255, 0.7); + font-size: 21px; } + +.elementor-control-type-media .elementor-control-media-delete { + position: absolute; + bottom: 0; + left: 0; + right: 0; + text-align: center; + padding: 9.5px; + font-size: 11px; + color: #fff; + background-color: #a4afb7; + text-transform: uppercase; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + -webkit-box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); } + +.elementor-control-type-media .elementor-control-media-image { + height: 100%; + -webkit-background-size: cover; + background-size: cover; + background-position: center; } + +.elementor-control-type-number .elementor-control-input-wrapper { + max-width: 80px; } + +.elementor-control-type-order .elementor-control-oreder-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +.elementor-control-type-order input { + display: none; } + .elementor-control-type-order input:checked + .elementor-control-order-label { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.elementor-control-type-order select { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + .elementor-control-type-order select:not(:focus) ~ .elementor-control-order-label { + border-color: #d5dadf; } + .elementor-control-type-order select:focus ~ .elementor-control-order-label { + border-color: #a4afb7; } + +.elementor-control-type-order .elementor-control-order-label { + position: relative; + padding: 0; + width: 40px; + border: 1px solid; + font-size: 10px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin-left: -3px; + background-color: #fff; + cursor: pointer; } + .elementor-control-type-order .elementor-control-order-label i { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + +.elementor-control-type-popover_toggle input { + display: none; } + +.elementor-control-type-popover_toggle label { + cursor: pointer; } + +.elementor-control-type-popover_toggle .elementor-control-input-wrapper { + direction: rtl; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked + .elementor-control-popover-toggle-toggle-label { + color: #71d7f7; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked) ~ .elementor-control-popover-toggle-reset-label { + display: none; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label { + color: #c2cbd2; + padding-right: 5px; } + +.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label { + width: 50px; + height: 27px; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; } + +.elementor-control-type-repeater, +.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab) { + padding-right: 10px; + padding-left: 10px; + padding-bottom: 15px; } + +.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove { + display: none; } + +.elementor-control-type-repeater .elementor-repeater-fields { + margin: 10px 0; } + +.elementor-control-type-repeater .elementor-repeater-row-controls { + border: 1px solid #d5dadf; + border-top-width: 0; + padding-top: 15px; } + .elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable) { + display: none; } + .elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active { + -webkit-transform: translateY(0); + transform: translateY(0); + border-width: 0; } + +.elementor-control-type-repeater .elementor-repeater-row-tools { + display: table; + table-layout: fixed; + width: 100%; + color: #556068; + background-color: #d5dadf; + height: 40px; + border-spacing: 1px; + -webkit-transition: all .5s; + -o-transition: all .5s; + transition: all .5s; } + .elementor-control-type-repeater .elementor-repeater-row-tools:hover { + background-color: #a4afb7; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div { + display: table-cell; + text-align: center; + vertical-align: middle; + cursor: pointer; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div:not(.elementor-repeater-row-handle-sortable) { + background-color: #fff; } + .elementor-control-type-repeater .elementor-repeater-row-tools > div:hover { + opacity: .95; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title { + text-align: left; + padding: 0 10px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa { + margin-right: 5px; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool { + width: 40px; } + .elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable { + cursor: move; + width: 10px; + color: #fff; } + +.elementor-control-type-repeater .elementor-button-wrapper { + text-align: center; + padding: 10px; } + +.elementor-control-type-section { + margin-top: 10px; + padding: 0; } + .elementor-control-type-section.elementor-open { + padding-bottom: 15px; } + .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before { + display: none; } + +.elementor-control-type-slider--multiple { + margin-bottom: 14px; } + .elementor-control-type-slider--multiple .elementor-slider { + margin-top: 12px; + width: 98%; } + +.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle { + -webkit-border-radius: 0; + border-radius: 0; + width: 10px; + -webkit-transform: translateY(calc(50% - 14px)) translateX(4px); + transform: translateY(calc(50% - 14px)) translateX(4px); } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle:after { + content: ''; + position: absolute; + top: 2px; + height: 12px; + width: 11px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + background-color: #fff; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after { + left: 5px; + -webkit-box-shadow: 2px -2px 3px 0px rgba(0, 0, 0, 0.1); + box-shadow: 2px -2px 3px 0px rgba(0, 0, 0, 0.1); } + .elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-upper:after { + right: 5px; + -webkit-box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); + box-shadow: -2px 2px 3px 0px rgba(0, 0, 0, 0.1); } + +.elementor-control-type-slider:not(.elementor-control-type-slider--multiple) .elementor-slider { + display: inline-block; + width: 70%; } + +.elementor-slider { + margin: 10px auto; + height: 4px; + background-color: #d5dadf; + -webkit-border-radius: 5px; + border-radius: 5px; + position: relative; + cursor: pointer; } + .elementor-slider-input { + width: 30%; + float: right; } + .elementor-slider-input input { + max-width: 80%; + float: right; + padding: 5px 5px; } + .elementor-slider__extra { + position: relative; } + .elementor-slider__labels { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-slider__label { + font-size: 9px; + color: #c2cbd2; } + .elementor-slider__scales { + position: absolute; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: space-evenly; + -webkit-justify-content: space-evenly; + -ms-flex-pack: space-evenly; + justify-content: space-evenly; + width: 100%; + margin-top: 4px; } + .elementor-slider__scale { + width: 1px; + height: 21px; + background-color: #a4afb7; } + .elementor-slider .noUi-handle { + height: 16px; + width: 16px; + background-color: #fff; + right: 0; + -webkit-transform: translateY(calc(50% - 14px)) translateX(8px); + transform: translateY(calc(50% - 14px)) translateX(8px); + position: absolute; + -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + -webkit-border-radius: 50%; + border-radius: 50%; } + .elementor-slider .noUi-connects { + position: absolute; + width: 100%; + height: 5px; } + .elementor-slider .noUi-connect { + position: absolute; + z-index: 0; + top: 0; + left: 0; + height: 100%; + width: 100%; + will-change: transform; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + background-color: #a4afb7; } + .elementor-slider .noUi-tooltip { + position: absolute; + top: calc(100% + 5px); + left: calc(50% - 4px); + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + font-size: 10px; } + +.elementor-control-type-structure .elementor-control-structure-preset { + border: 1px solid #e6e9ec; + padding: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) { + display: inline-block; + cursor: pointer; + height: 50px; } + .elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg { + height: 100%; } + .elementor-control-type-structure .elementor-control-structure-preset path { + fill: #e6e9ec; } + +.elementor-control-type-structure .elementor-control-structure-current-preset { + margin-top: 15px; } + .elementor-control-type-structure .elementor-control-structure-current-preset svg { + display: block; + width: 100%; } + +.elementor-control-type-structure .elementor-control-structure-reset { + padding: 10px 0 0 2px; + font-size: 11px; + cursor: pointer; + color: #a4afb7; } + .elementor-control-type-structure .elementor-control-structure-reset i { + margin-right: 8px; } + +.elementor-control-type-structure .elementor-control-structure-title, .elementor-control-type-structure .elementor-control-structure-more-presets-title { + color: #495157; + font-weight: bold; + padding: 13.5px 20px; + position: relative; } + .elementor-control-type-structure .elementor-control-structure-title:before, .elementor-control-type-structure .elementor-control-structure-title:after, .elementor-control-type-structure .elementor-control-structure-more-presets-title:before, .elementor-control-type-structure .elementor-control-structure-more-presets-title:after { + content: ''; + position: absolute; + left: 0; + right: 0; } + .elementor-control-type-structure .elementor-control-structure-title:before, .elementor-control-type-structure .elementor-control-structure-more-presets-title:before { + top: 0; + background-color: #e6e9ec; + -webkit-transform: translateY(-100%); + transform: translateY(-100%); } + .elementor-control-type-structure .elementor-control-structure-title:after, .elementor-control-type-structure .elementor-control-structure-more-presets-title:after { + bottom: 0; + height: 1px; + background-color: #e6e9ec; } + +.elementor-control-type-structure .elementor-control-structure-title { + margin: 10px -20px 0; } + .elementor-control-type-structure .elementor-control-structure-title:before { + height: 10px; + -webkit-box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); + box-shadow: inset 0 2px 4px rgba(127, 127, 127, 0.1); } + +.elementor-control-type-structure .elementor-control-structure-more-presets-title { + margin: 15px -20px 0; } + .elementor-control-type-structure .elementor-control-structure-more-presets-title:before { + height: 3px; } + +.elementor-control-type-structure .elementor-control-structure-more-presets { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + .elementor-control-type-structure .elementor-control-structure-more-presets input { + display: none; } + .elementor-control-type-structure .elementor-control-structure-more-presets input:checked + .elementor-control-structure-preset { + border: 1px solid #a4afb7; } + .elementor-control-type-structure .elementor-control-structure-more-presets input:checked + .elementor-control-structure-preset path { + fill: #a4afb7; } + +.elementor-control-type-structure .elementor-control-structure-preset-wrapper { + margin-top: 15px; } + +.elementor-control-type-structure .elementor-control-structure-preset-title { + text-align: center; + padding-top: 5px; + font-style: italic; + font-size: 11px; + color: #a4afb7; } + +.elementor-control-type-switcher.elementor-label-inline > .elementor-control-content .elementor-control-field .elementor-control-title { + width: 70%; } + +.elementor-control-type-switcher.elementor-label-inline > .elementor-control-content .elementor-control-field .elementor-control-input-wrapper { + width: 30%; } + +.elementor-control-type-switcher .elementor-control-input-wrapper { + text-align: right; } + +.elementor-control-type-switcher .elementor-switch { + position: relative; + display: inline-block; + vertical-align: top; + width: 49px; + height: 20px; + background-color: white; + -webkit-border-radius: 18px; + border-radius: 18px; + cursor: pointer; } + +.elementor-control-type-switcher .elementor-switch-input { + display: none; } + +.elementor-control-type-switcher .elementor-switch-label { + position: relative; + display: block; + height: inherit; + font-size: 7px; + text-transform: uppercase; + background: #eceeef; + -webkit-border-radius: inherit; + border-radius: inherit; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15); + -webkit-transition: 0.15s ease-out; + -o-transition: 0.15s ease-out; + transition: 0.15s ease-out; + -webkit-transition-property: opacity, background; + -o-transition-property: opacity, background; + transition-property: opacity, background; } + +.elementor-control-type-switcher .elementor-switch-label:before, .elementor-control-type-switcher .elementor-switch-label:after { + position: absolute; + top: 0; + width: 50%; + text-align: center; + line-height: 20px; + -webkit-transition: inherit; + -o-transition: inherit; + transition: inherit; } + +.elementor-control-type-switcher .elementor-switch-label:before { + content: attr(data-off); + right: 3px; + color: #a4afb7; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); } + +.elementor-control-type-switcher .elementor-switch-label:after { + content: attr(data-on); + left: 3px; + color: white; + text-shadow: 0 1px rgba(0, 0, 0, 0.2); + opacity: 0; } + +.elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label { + background: #71d7f7; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), inset 0 0 3px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), inset 0 0 3px rgba(0, 0, 0, 0.2); } + .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label:before { + opacity: 0; } + .elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-label:after { + opacity: 1; } + +.elementor-control-type-switcher .elementor-switch-handle { + position: absolute; + top: 1px; + left: 1px; + width: 18px; + height: 18px; + background: white; + -webkit-border-radius: 10px; + border-radius: 10px; + -webkit-transition: left 0.15s ease-out; + -o-transition: left 0.15s ease-out; + transition: left 0.15s ease-out; } + +.elementor-control-type-switcher .elementor-switch-input:checked ~ .elementor-switch-handle { + left: 30px; + -webkit-box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.2); + box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.2); } + +.elementor-control-type-tabs { + font-size: 0.8em; + color: #a4afb7; + text-transform: uppercase; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +.elementor-control-type-tab { + text-align: center; + width: 100%; + padding: 0; + line-height: 27px; + border-top: 1px solid #a4afb7; + border-bottom: 1px solid #a4afb7; + border-right: 1px solid #a4afb7; + cursor: pointer; } + .elementor-control-type-tab:first-child { + border-left: 1px solid #a4afb7; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; } + .elementor-control-type-tab:last-child { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; } + .elementor-control-type-tab.elementor-tab-active { + background-color: #a4afb7; + color: #ffffff; } + +.elementor-tab-close { + display: none !important; } + +.elementor-control-type-text_shadow .elementor-control-input-wrapper { + overflow: hidden; } + +.elementor-control-type-text_shadow .elementor-shadow-slider { + margin-top: 10px; } + +.elementor-control-type-textarea textarea { + display: block; } + +.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more { + display: none; } + +.elementor-control-type-url .elementor-control-url-external-show .elementor-input, +.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style { + padding-right: 46px; + height: 26px; } + +.elementor-control-type-url .elementor-control-input-wrapper { + position: relative; } + +.elementor-control-type-url .elementor-control-url-more { + position: absolute; + top: 0; + right: 0; + height: 26px; + width: 40px; + border-left: 1px solid #d5dadf; + cursor: pointer; + font-size: 10px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + .elementor-control-type-url .elementor-control-url-more i { + font-size: 13px; } + .elementor-control-type-url .elementor-control-url-more-input { + display: none; } + .elementor-control-type-url .elementor-control-url-more-input:not(:checked) + .elementor-control-url-more-options { + display: none; } + .elementor-control-type-url .elementor-control-url-more-options { + padding-top: 10px; } + +.elementor-control-type-url .elementor-control-url-option { + padding: 5px; + font-size: 12px; } + +.elementor-control-type-url .elementor-control-url-autocomplete-spinner { + display: none; + position: absolute; + width: 12px; + height: 12px; + top: 7px; + right: 13px; + z-index: 1; + background: #fff; } + +.elementor-control-type-url .elementor-input { + direction: ltr; } + .elementor-control-type-url .elementor-input:not(:focus) + .elementor-control-url-more { + border-color: #d5dadf; } + .elementor-control-type-url .elementor-input:focus + .elementor-control-url-more { + border-color: #a4afb7; } + +.elementor-autocomplete-menu { + position: absolute; + background: #fff; + color: #495157; + border: 1px solid #a4afb7; + margin: 0; + list-style: none; + padding: 4px 0; + height: auto; + width: 100%; + min-width: 260px; + max-width: 300px; + max-height: 200px; + overflow-y: auto; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; + cursor: default; + z-index: 1; } + .elementor-autocomplete-menu .ui-menu-item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-align-self: baseline; + -ms-flex-item-align: baseline; + align-self: baseline; + padding: 5px 8px; + font-size: 12px; + width: 100%; + line-height: 1.2; + cursor: pointer; } + .elementor-autocomplete-menu .ui-menu-item.ui-state-hover, .elementor-autocomplete-menu .ui-menu-item.ui-state-active, .elementor-autocomplete-menu .ui-menu-item.ui-state-focus { + background: #e6e9ec; } + .elementor-autocomplete-menu .elementor-autocomplete-item-info { + font-size: 10px; + padding-top: 2px; } + +.wp-picker-container.wp-picker-active { + position: absolute; + z-index: 10000; + top: -9px; + right: 7px; + background-color: #fff; + border: solid #fff; + border-width: 0 10px 0 5px; + padding-top: 10px; + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); } + .wp-picker-container.wp-picker-active .wp-color-result { + float: right; } + .wp-picker-container.wp-picker-active .wp-picker-input-wrap { + padding-left: 10px; + float: left; } + +.wp-picker-container * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.wp-picker-container .color-alpha { + width: calc( 100% - 2px * 2); + height: calc( 100% - 2px * 2); + margin: 2px; + position: absolute; + top: 0; + left: 0; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +.wp-picker-container .iris-picker { + border: none; } + .wp-picker-container .iris-picker .iris-picker-inner { + width: 100%; } + +.wp-picker-container:not(.wp-picker-active) { + float: right; } + .wp-picker-container:not(.wp-picker-active) .wp-color-result { + margin: 0; } + +[class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active, +[class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active { + padding-top: 9px; } + +.wp-picker-container.wp-picker-active .wp-color-result { + margin-right: 3px; } + +.wp-picker-container input[type="text"].wp-color-picker { + float: left; + width: 120px; + max-width: 136px; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; + font-size: 11px; + line-height: 12px; + padding: 7px 3px; } + +.wp-color-result { + margin: 0; + width: 48px; + height: 25px; + -webkit-transition: border .5s; + -o-transition: border .5s; + transition: border .5s; + padding: 0; + background-color: #fafafa; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #d5dadf; } + .wp-color-result, .wp-color-result:focus { + -webkit-box-shadow: inset 0 0 0 3px white; + box-shadow: inset 0 0 0 3px white; } + .wp-color-result:after, .wp-color-result.wp-picker-open:after { + content: none; } + .wp-color-result:hover { + border: 1px solid #a4afb7; } + .wp-color-result:focus, .wp-color-result:active { + outline: 0; } + +.wp-picker-default.button, +.wp-picker-clear.button { + height: 26px; + width: 48px; + padding: 0; + background-color: #d5dadf; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin: 0; } + +.wp-picker-holder * { + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +.wp-picker-holder .iris-square-value { + -webkit-transition: none; + -o-transition: none; + transition: none; } + +.wp-picker-open ~ .wp-picker-holder { + clear: both; + margin-bottom: 15px; } + +#elementor-mode-switcher { + position: absolute; + left: 100%; + top: 50%; + width: 15px; + height: 50px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + background-color: #e6e9ec; + font-size: 15px; + -webkit-box-shadow: 3px 1px 5px rgba(0, 0, 0, 0.1); + box-shadow: 3px 1px 5px rgba(0, 0, 0, 0.1); + cursor: pointer; } + #elementor-mode-switcher:hover { + background-color: #D30C5C; + color: #FFFFFF; } + +body.elementor-editor-preview #elementor-mode-switcher { + background-color: #D30C5C; + color: #FFFFFF; } + +#elementor-mode-switcher-inner, #elementor-mode-switcher-preview { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; } + +#elementor-mode-switcher-preview { + cursor: pointer; } + #elementor-mode-switcher-preview .fa { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + +#elementor-mode-switcher-preview-input { + display: none; } + +.elementor-revision-item__wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border: 1px solid #d5dadf; + padding: 10px 15px; + margin-bottom: 10px; + font-size: 11px; } + .elementor-revision-item__wrapper.current { + font-weight: bold; } + .elementor-revision-item__wrapper .elementor-revision-item__tools-current { + color: #D30C5C; } + +.elementor-revision-item:hover:not(.elementor-revision-current-preview) { + background-color: rgba(230, 233, 236, 0.3); } + +.elementor-revision-item:not(:hover) .elementor-revision-item__tools-delete, .elementor-revision-item.elementor-revision-current-preview .elementor-revision-item__tools-delete { + display: none; } + +.elementor-revision-item-loading .elementor-revision-item__tools-current { + display: none; } + +.elementor-revision-item-loading .elementor-revision-item__tools-delete { + display: none; } + +.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner { + display: none; } + +.elementor-revision-item__gravatar { + -webkit-border-radius: 50%; + border-radius: 50%; + overflow: hidden; } + .elementor-revision-item__gravatar img { + display: block; } + +.elementor-revision-item__details { + padding-left: 15px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + cursor: pointer; } + +.elementor-revision-item__tools-delete { + cursor: pointer; } + +.elementor-revision-meta { + padding-top: 5px; + font-size: 10px; + font-weight: bold; } + +.elementor-revision-current-preview { + background-color: #e6e9ec; } + +#elementor-restore-autosave-dialog.dialog-widget { + background-color: rgba(0, 0, 0, 0.3); } + +#elementor-panel-revisions-loading { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + #elementor-panel-revisions-loading .eicon-loading { + font-size: 50px; + color: #a4afb7; } + +.elementor-history-item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border: 1px solid #d5dadf; + padding: 10px 15px; + margin-bottom: 10px; + font-size: 11px; + line-height: 1.4; + cursor: pointer; } + .elementor-history-item:hover { + background-color: rgba(230, 233, 236, 0.3); } + .elementor-history-item:hover .elementor-history-item__icon .fa:before { + content: '\f1da'; } + .elementor-history-item-applied { + color: #a4afb7; } + .elementor-history-item-current { + background: #e6e9ec; + cursor: default; } + .elementor-history-item-current .elementor-history-item__icon .fa:before, .elementor-history-item-current:hover .elementor-history-item__icon .fa:before { + content: '\f00c'; } + .elementor-history-item__details { + width: 95%; } + .elementor-history-item__title { + font-weight: bold; } + .elementor-history-item__subtitle, .elementor-history-item__action { + font-weight: lighter; } + .elementor-history-item__action { + font-style: italic; + text-decoration: underline; } + .elementor-history-item .__icon { + float: right; } + +.elementor-history-revisions-message { + font-size: 11px; + text-align: center; + padding-top: 5px; } + +#elementor-panel-history { + padding: 20px 20px 15px; } + #elementor-panel-history.elementor-empty .elementor-history-revisions-message { + padding-top: 20px; } + #elementor-panel-history:not(.elementor-empty) { + background-color: #fff; + margin-top: 10px; } + +#elementor-panel-history-no-items { + text-align: center; } + +#elementor-preview { + background-color: #333; + position: absolute; + height: 100%; + top: 0; + right: 0; + border: 0; } + .elementor-device-desktop #elementor-preview { + overflow-y: hidden; } + body:not(.elementor-device-desktop) #elementor-preview { + overflow-y: auto; } + +#elementor-preview-responsive-wrapper { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + -webkit-transition: all .5s ease 0s; + -o-transition: all .5s ease 0s; + transition: all .5s ease 0s; } + .elementor-device-desktop #elementor-preview-responsive-wrapper { + min-width: 1025px; + margin: 0 auto; + width: 100%; + height: 100%; } + .elementor-device-tablet #elementor-preview-responsive-wrapper { + width: 768px; + height: 1025px; + padding: 40px 10px 70px; } + .elementor-device-mobile #elementor-preview-responsive-wrapper { + width: 360px; + height: 640px; + padding: 40px 10px 70px; } + body:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper { + -webkit-border-radius: 30px; + border-radius: 30px; + background-color: #111; + margin: 30px auto 80px; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +#elementor-preview-iframe { + width: 100%; + height: 100%; + background-color: #fff; } + +.tipsy { + font-size: 10px; + position: absolute; + padding: 5px; + z-index: 100000; } + +.tipsy-inner { + background-color: #000; + color: #FFF; + max-width: 200px; + padding: 6px 12px 6px; + text-align: center; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.5); + box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.5); } + +.tipsy-arrow { + position: absolute; + width: 0; + height: 0; + line-height: 0; + border: 5px dashed #000; } + +.tipsy-arrow-n { + border-bottom-color: #000; } + +.tipsy-arrow-s { + border-top-color: #000; } + +.tipsy-arrow-e { + border-left-color: #000; } + +.tipsy-arrow-w { + border-right-color: #000; } + +.tipsy-n .tipsy-arrow, .tipsy-nw .tipsy-arrow { + border-left-color: transparent; + border-right-color: transparent; + top: 0; + border-bottom-style: solid; + border-top: none; } + +.tipsy-n .tipsy-arrow { + left: 50%; + margin-left: -5px; } + +.tipsy-nw .tipsy-arrow { + left: 10px; } + +.tipsy-ne .tipsy-arrow { + top: 0; + right: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; } + +.tipsy-s .tipsy-arrow, .tipsy-se .tipsy-arrow, .tipsy-sw .tipsy-arrow { + bottom: 0; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; } + +.tipsy-s .tipsy-arrow { + left: 50%; + margin-left: -5px; } + +.tipsy-sw .tipsy-arrow { + left: 10px; } + +.tipsy-se .tipsy-arrow { + right: 10px; } + +.tipsy-e .tipsy-arrow, .tipsy-w .tipsy-arrow { + top: 50%; + margin-top: -5px; + border-top-color: transparent; + border-bottom-color: transparent; } + +.tipsy-e .tipsy-arrow { + right: 0; + border-left-style: solid; + border-right: none; } + +.tipsy-w .tipsy-arrow { + left: 0; + border-right-style: solid; + border-left: none; } + +#elementor-template-library-modal a.elementor-template-library-blank-footer-link { + font-style: normal; + text-decoration: underline; + color: #39b54a; } + #elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover { + color: #2d8e3a; } + +#elementor-template-library-header-menu { + text-align: center; + color: #6d7882; + font-size: 13px; } + +.elementor-template-library-menu-item { + display: inline-block; + padding: 17px 0; + width: 115px; + cursor: pointer; } + .elementor-template-library-menu-item.elementor-active { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff)); + background-image: -webkit-linear-gradient(top, #f3f3f3, #fff); + background-image: -o-linear-gradient(top, #f3f3f3, #fff); + background-image: linear-gradient(to bottom, #f3f3f3, #fff); + border-bottom: 3px solid #9b0a46; } + +#elementor-template-library-header-actions { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + #elementor-template-library-header-actions > div { + padding-right: 16px; } + +#elementor-template-library-header-preview-insert-wrapper { + cursor: default; + padding: 0 10px; } + #elementor-template-library-header-preview-insert-wrapper .elementor-button { + padding: 8px 14px; + font-size: 11px; } + #elementor-template-library-header-preview-insert-wrapper .elementor-template-library-template-insert { + color: #fff; + background-color: #39b54a; } + +#elementor-template-library-header-preview-back { + padding: 16.5px 16.5px 15px 0; + border-right: 1px solid #e6e9ec; + cursor: pointer; + -webkit-transition: color .5s; + -o-transition: color .5s; + transition: color .5s; } + #elementor-template-library-header-preview-back:not(:hover) { + color: #a4afb7; } + #elementor-template-library-header-preview-back i { + padding-right: 10px; + font-size: 18px; } + #elementor-template-library-header-preview-back i:before { + content: ""; } + +#elementor-template-library-templates { + padding: 0 15px; } + #elementor-template-library-templates[data-template-source="local"] #elementor-template-library-templates-container { + -webkit-box-shadow: 1px 1px 20px 0 rgba(0, 0, 0, 0.03); + box-shadow: 1px 1px 20px 0 rgba(0, 0, 0, 0.03); + margin-top: 10px; + margin-bottom: 45px; } + #elementor-template-library-templates[data-template-source="local"] .elementor-template-library-order-input:checked + .elementor-template-library-order-label { + color: #6d7882; } + #elementor-template-library-templates[data-template-source="remote"] #elementor-template-library-templates-container { + margin: 10px -15px 0; } + #elementor-template-library-templates[data-template-source="remote"] .elementor-template-library-order-input:checked + .elementor-template-library-order-label { + color: #495157; } + #elementor-template-library-templates[data-template-source="empty"] #elementor-template-library-order-toolbar-local, #elementor-template-library-templates[data-template-source="empty"] #elementor-template-library-footer-banner { + display: none; } + #elementor-template-library-templates.elementor-templates-filter-active #elementor-template-library-footer-banner { + display: none; } + #elementor-template-library-templates .elementor-template-library-order-input { + display: none; } + #elementor-template-library-templates .elementor-template-library-order-input:checked + .elementor-template-library-order-label { + padding-right: 8px; } + #elementor-template-library-templates .elementor-template-library-order-input:checked + .elementor-template-library-order-label:after { + font-family: eicons; + content: '\e956'; + margin-left: 3px; } + #elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse + .elementor-template-library-order-label:after { + content: '\e955'; } + +#elementor-template-library-templates-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + #elementor-template-library-templates-container .elementor-template-library-template-local .elementor-template-library-template-insert { + text-transform: none; + font-size: 12px; } + +#elementor-template-library-toolbar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.elementor-template-library-filter-toolbar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +#elementor-template-library-filter-toolbar-remote { + font-size: 11px; } + +#elementor-template-library-order { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + border-right: 1px solid #d5dadf; } + +.elementor-template-library-order-label { + text-transform: uppercase; + padding-right: 22px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +label.elementor-template-library-order-label { + cursor: pointer; } + label.elementor-template-library-order-label:hover { + color: #556068; } + +#elementor-template-library-filter { + border-right: 1px solid #d5dadf; } + #elementor-template-library-filter .select2 { + text-align: left; + margin-right: 25px; } + #elementor-template-library-filter .select2-selection__rendered { + text-transform: capitalize; } + +#select2-elementor-template-library-filter-subtype-results .select2-results__option { + text-transform: capitalize; } + +#elementor-template-library-my-favorites { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: left; + padding-left: 20px; } + +#elementor-template-library-filter-my-favorites { + display: none; } + #elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label { + color: #495157; } + #elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label i:after { + color: #D30C5C; + content: '\f004'; } + +#elementor-template-library-filter-my-favorites-label { + cursor: pointer; + text-transform: uppercase; } + #elementor-template-library-filter-my-favorites-label:hover { + color: #556068; } + #elementor-template-library-filter-my-favorites-label:hover i:after { + color: #D30C5C; } + #elementor-template-library-filter-my-favorites-label i { + padding-right: 5px; } + #elementor-template-library-filter-my-favorites-label i:after { + color: #a4afb7; + content: '\f08a'; } + +#elementor-template-library-filter-text-wrapper { + width: 200px; + position: relative; } + #elementor-template-library-filter-text-wrapper:after { + content: '\e863'; + position: absolute; + top: 50%; + right: 0; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-family: eicons; } + +#elementor-template-library-filter-text { + border: none; + border-bottom: 1px solid #d5dadf; + -webkit-border-radius: 0; + border-radius: 0; + font-size: 11px; + padding: 8px 15px 8px 0; + -webkit-transition: border 0.5s; + -o-transition: border 0.5s; + transition: border 0.5s; } + #elementor-template-library-filter-text:focus { + border-color: #c2cbd2; } + #elementor-template-library-filter-text::-webkit-input-placeholder { + font-weight: 300; + text-transform: uppercase; } + #elementor-template-library-filter-text::-ms-input-placeholder { + font-weight: 300; + text-transform: uppercase; } + #elementor-template-library-filter-text::placeholder { + font-weight: 300; + text-transform: uppercase; } + #elementor-template-library-filter-text:focus { + border-color: #c2cbd2; } + +.elementor-template-library-template-remote { + margin: 15px; + padding: 8px; + background-color: #fff; + -webkit-box-shadow: 0 1px 20px 0 rgba(0, 0, 0, 0.07); + box-shadow: 0 1px 20px 0 rgba(0, 0, 0, 0.07); + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-template-library-template-remote:hover .elementor-template-library-template-name { + display: none; } + .elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-preview { + opacity: 0; } + .elementor-template-library-template-remote:not(:hover) .elementor-template-library-favorite, + .elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-action { + display: none; } + .elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before { + position: absolute; + content: 'premium'; + text-transform: uppercase; + top: 5px; + right: 5px; + background-color: #D30C5C; + color: #d5dadf; + padding: 2px 4px 0; + font-size: 9px; + -webkit-border-radius: 2px; + border-radius: 2px; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page) { + position: relative; + width: calc(33.333% - 30px); + overflow: hidden; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page) img { + display: block; + width: 100%; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page) .elementor-template-library-template-footer { + position: absolute; + width: 100%; + bottom: 0; + left: 0; + padding: 10px; + background-color: #fff; + -webkit-transition: -webkit-transform .5s; + transition: -webkit-transform .5s; + -o-transition: transform .5s; + transition: transform .5s; + transition: transform .5s, -webkit-transform .5s; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page) .elementor-template-library-template-name { + display: none; } + .elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(:hover) .elementor-template-library-template-footer { + -webkit-transform: translateY(100%); + transform: translateY(100%); } + .elementor-template-library-template-remote .elementor-template-library-template-body { + position: relative; } + @media (max-width: 1025px) { + .elementor-template-library-template-remote .elementor-template-library-template-body { + height: 300px; } } + .elementor-template-library-template-remote .elementor-template-library-template-screenshot { + height: 100%; + -webkit-background-size: cover; + background-size: cover; + background-position-x: 50%; + -webkit-box-shadow: inset 0px -2px 15px -6px rgba(0, 0, 0, 0.07); + box-shadow: inset 0px -2px 15px -6px rgba(0, 0, 0, 0.07); } + .elementor-template-library-template-remote .elementor-template-library-template-preview { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + -webkit-transition: opacity .5s; + -o-transition: opacity .5s; + transition: opacity .5s; + cursor: pointer; } + .elementor-template-library-template-remote .elementor-template-library-template-preview i { + font-size: 20px; + color: #d5dadf; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); } + .elementor-template-library-template-remote .elementor-template-library-template-action { + background-color: transparent; + text-transform: none; } + .elementor-template-library-template-remote .elementor-template-library-template-action i { + margin-right: 0; } + .elementor-template-library-template-remote .elementor-template-library-template-insert { + color: #39b54a; } + .elementor-template-library-template-remote .elementor-button-go-pro { + color: #fcb92c; } + .elementor-template-library-template-remote .elementor-template-library-template-footer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + margin-top: 10px; + font-size: 11px; + line-height: 1; } + .elementor-template-library-template-remote .elementor-template-library-template-name { + text-align: left; + color: #6d7882; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + padding-right: 5px; } + .elementor-template-library-template-remote .elementor-template-library-template-favorite-input { + display: none; } + .elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked + .elementor-template-library-template-favorite-label i:before { + content: '\f004'; + color: #D30C5C; } + .elementor-template-library-template-remote .elementor-template-library-template-favorite-label { + cursor: pointer; } + .elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i { + color: #D30C5C; } + +@media (max-width: 1439px) { + .elementor-template-library-template-page { + width: calc(25% - 30px); } } + +@media (min-width: 1440px) { + .elementor-template-library-template-page { + width: calc(20% - 30px); } } + +@media (max-width: 1025px) { + .elementor-template-library-template-page { + width: calc(33.333% - 30px); } } + +.elementor-template-library-template-page .elementor-template-library-template-body { + height: 200px; } + +#elementor-template-library-order-toolbar-local, +.elementor-template-library-template-local { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 0 25px; + text-align: left; } + +#elementor-template-library-order-toolbar-local { + margin-top: 30px; } + #elementor-template-library-order-toolbar-local .elementor-template-library-order-label { + line-height: 1; + font-size: 10px; + font-weight: 500; } + #elementor-template-library-order-toolbar-local .elementor-template-library-order-label:not(:hover) { + color: #a4afb7; } + +.elementor-template-library-template-local { + height: 50px; + width: 100%; + margin-top: 1px; + background-color: #fff; + -webkit-transition: background-color .3s linear; + -o-transition: background-color .3s linear; + transition: background-color .3s linear; } + .elementor-template-library-template-local:hover { + background-color: #fafbfb; } + .elementor-template-library-template-local:not(:hover) .elementor-template-library-template-insert { + background: none; + color: #a4afb7; } + .elementor-template-library-template-local:first-child { + -webkit-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; } + .elementor-template-library-template-local:last-child { + -webkit-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; } + .elementor-template-library-template-local .elementor-template-library-template-name { + font-weight: 500; } + .elementor-template-library-template-local .elementor-template-library-template-name, + .elementor-template-library-template-local .elementor-template-library-template-meta { + padding-right: 20px; } + .elementor-template-library-template-local .elementor-template-library-template-meta { + color: #a4afb7; } + .elementor-template-library-template-local .elementor-template-library-template-name, + .elementor-template-library-template-local .elementor-template-library-template-meta, + .elementor-template-library-template-local .elementor-template-library-template-preview, + .elementor-template-library-template-local .elementor-template-library-template-action { + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + .elementor-template-library-template-local .elementor-template-library-template-controls { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-template-library-template-local .elementor-template-library-template-controls > div { + cursor: pointer; + -webkit-transition: color .5s; + -o-transition: color .5s; + transition: color .5s; } + .elementor-template-library-template-local .elementor-template-library-template-controls > div:not(:hover) { + color: #a4afb7; } + .elementor-template-library-template-local .elementor-template-library-template-insert i { + margin-right: 3px; } + .elementor-template-library-template-local .elementor-template-library-template-control-title { + margin-left: 6px; } + .elementor-template-library-template-local .elementor-template-library-template-delete:hover { + color: #f00; } + .elementor-template-library-template-local .elementor-template-library-template-export:hover i { + color: #556068; } + .elementor-template-library-template-local .elementor-template-library-template-action { + padding: 8px 18px; + margin: 0 5%; } + .elementor-template-library-template-local .elementor-template-library-template-more { + display: none; + position: absolute; + background-color: #fff; + padding: 3px 20px; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 1px 3px 11px rgba(0, 0, 0, 0.3); + box-shadow: 1px 3px 11px rgba(0, 0, 0, 0.3); + top: 100%; + right: 0; + -webkit-transform: translateX(65%) translateY(-7px); + transform: translateX(65%) translateY(-7px); + z-index: 1; } + .elementor-template-library-template-local .elementor-template-library-template-more:before { + content: ''; + position: absolute; + border: solid transparent; + border-width: 8px 4px; + border-bottom-color: #fff; + -webkit-transform: translateY(-100%); + transform: translateY(-100%); } + .elementor-template-library-template-local .elementor-template-library-template-more > div { + margin: 10px 0; + font-size: 11px; } + .elementor-template-library-template-local .elementor-template-library-template-more-toggle { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: right; } + .elementor-template-library-template-local .elementor-template-library-template-more-toggle i { + font-size: 16px; } + +#elementor-template-library-preview { + height: 100%; + overflow: hidden; } + #elementor-template-library-preview iframe { + height: 150%; + -webkit-transform: scale(0.666) translateX(-25%) translateY(-25%); + transform: scale(0.666) translateX(-25%) translateY(-25%); } + @media (max-width: 1439px) { + #elementor-template-library-preview iframe { + width: 1440px; } } + @media (min-width: 1440px) { + #elementor-template-library-preview iframe { + width: 1710px; } } + +.elementor-template-library-blank-icon { + font-size: 65px; + margin-top: 45px; + color: #c2cbd2; + line-height: 1; } + .elementor-template-library-blank-icon img { + width: 70px; } + +.elementor-template-library-blank-title { + font-size: 30px; + margin-top: 40px; } + @media (max-width: 1439px) { + .elementor-template-library-blank-title { + font-size: 25px; } } + +.elementor-template-library-blank-message { + font-size: 18px; + color: #a4afb7; + margin-top: 15px; + font-weight: 300; } + @media (max-width: 1439px) { + .elementor-template-library-blank-message { + font-size: 16px; + margin-top: 10px; } } + +#elementor-template-library-save-template-form { + margin-top: 40px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + #elementor-template-library-save-template-form > * { + height: 55px; + font-size: 16px; } + +#elementor-template-library-save-template-name { + width: 500px; + background-color: #fff; + font-weight: 300; + color: #a4afb7; + padding-left: 25px; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; + border: none; } + +#elementor-template-library-save-template-submit { + width: 150px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + #elementor-template-library-save-template-submit:hover { + -webkit-box-shadow: none; + box-shadow: none; } + +#elementor-template-library-import-form { + width: 95%; + background-color: rgba(255, 255, 255, 0.5); + padding: 60px; + border: 2px dashed #d5dadf; + margin: 35px auto; + -webkit-transition: background-color 0.5s; + -o-transition: background-color 0.5s; + transition: background-color 0.5s; } + #elementor-template-library-import-form:hover { + background-color: rgba(255, 255, 255, 0.9); } + #elementor-template-library-import-form-or { + margin-top: 15px; + font-size: 18px; } + #elementor-template-library-import-form-label { + margin-top: 20px; + padding: 15px 35px; + display: inline-block; } + #elementor-template-library-import-form-input { + display: none; } + #elementor-template-library-import-form.elementor-drag-over { + border: 3px dashed #71d7f7; } + +#elementor-template-library-import .elementor-template-library-blank-icon { + margin-top: 0; } + +#elementor-template-library-import .elementor-template-library-blank-message { + margin-top: 20px; } + +.elementor-template-library-blank-footer { + position: absolute; + bottom: 70px; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + color: #a4afb7; + font-style: italic; } + @media (max-height: 700px) { + .elementor-template-library-blank-footer { + display: none; } } + +#elementor-template-library-footer-banner i { + color: #c2cbd2; + font-size: 56px; + margin-top: 40px; } + +#elementor-template-library-footer-banner .elementor-excerpt { + color: #a4afb7; + font-size: 15px; + font-weight: 500; + margin: 20px 0; } + +#elementor-template-library-templates-empty { + width: 100%; + margin-top: 40px; } + +#elementor-template-library-error-dialog .dialog-message { + text-align: start; } + +#elementor-template-library-error-info { + margin-top: 10px; } + +@media (max-width: 1439px) { + .elementor-template-library-local-column-1 { + width: 33%; } + .elementor-template-library-local-column-2 { + width: 10%; } + .elementor-template-library-local-column-3 { + width: 15%; } + .elementor-template-library-local-column-4 { + width: 15%; } + .elementor-template-library-local-column-5 { + width: 27%; } } + +@media (min-width: 1440px) { + .elementor-template-library-local-column-1 { + width: 25%; } + .elementor-template-library-local-column-2 { + width: 17%; } + .elementor-template-library-local-column-3 { + width: 17%; } + .elementor-template-library-local-column-4 { + width: 17%; } + .elementor-template-library-local-column-5 { + width: 24%; } } + +@media (max-width: 1024px) { + .elementor-template-library-local-column-3 { + display: none; } + .elementor-template-library-local-column-5 { + width: 41%; } } + +.elementor-tags-list { + display: none; + position: absolute; + width: 260px; + max-height: 300px; + overflow: auto; + padding-bottom: 5px; + background-color: #fff; + border: 1px solid #a4afb7; + -webkit-border-radius: 3px; + border-radius: 3px; + z-index: 1; } + .elementor-tags-list__group-title { + color: #495157; + font-weight: bold; + font-size: 12px; + padding: 10px 15px; } + .elementor-tags-list__item { + font-size: 10px; + padding: 6px 15px; + cursor: pointer; } + .elementor-tags-list__item:before { + content: '>'; + font-size: 8px; + padding-right: 5px; } + .elementor-tags-list__item:hover { + background-color: #e6e9ec; } + +.elementor-dynamic-cover { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + width: 100%; + height: 27px; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + .elementor-dynamic-cover__settings i { + color: #d5dadf; } + .elementor-dynamic-cover__settings i.fa-wrench { + cursor: pointer; } + .elementor-dynamic-cover__title { + padding: 0 8px; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; } + .elementor-dynamic-cover__remove { + color: #c2cbd2; + cursor: pointer; } + .elementor-control-type-wysiwyg .elementor-dynamic-cover { + margin-top: 10px; } + +.elementor-tag-settings-popup { + position: absolute; + width: 260px; + background-color: #e6e9ec; + -webkit-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); + box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); + z-index: 1; } + .elementor-tag-settings-popup:before { + content: ''; + position: absolute; + top: -20px; + left: 5px; + border: 10px solid transparent; + border-bottom-color: #fff; } + .elementor-tag-settings-popup .elementor-control-type-section:first-child { + margin: 0; } + +.elementor-tag-controls-stack-empty { + background-color: #fff; + padding: 10px; + font-size: 13px; + text-align: center; } + +.elementor-control-dynamic.elementor-label-inline .elementor-control-field { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + +.elementor-control-dynamic-switcher { + cursor: pointer; + font-size: 9px; } + .elementor-control-dynamic-switcher i { + padding-left: 5px; } + .elementor-control-dynamic-switcher-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-dynamic-switcher-wrapper { + width: 100%; + padding-bottom: 10px; } + +.elementor-control-dynamic-value .elementor-control-tag-area { + display: none; } + +.elementor-control-dynamic-value .elementor-control-dynamic-switcher { + color: #71d7f7; } + +#elementor-toast { + position: absolute; + width: 280px; + padding: 20px; + -webkit-border-radius: 5px; + border-radius: 5px; + color: #d5dadf; + background-color: rgba(0, 0, 0, 0.8); + z-index: 10000; } + #elementor-toast .dialog-message { + font-size: 13px; } + #elementor-toast .dialog-buttons-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + margin-top: 15px; } + #elementor-toast .dialog-button { + color: #fcb92c; + margin: 0 5px; + text-transform: uppercase; + cursor: pointer; } + #elementor-toast .dialog-button:last-child { + margin-right: 0; } + +.elementor-context-menu { + position: absolute; + width: 200px; + background-color: #fff; + border: 1px solid #e6e9ec; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.09); + box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.09); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + z-index: 3; } + .elementor-context-menu-list__group { + padding: 5px 0; } + .elementor-context-menu-list__group:not(:last-child) { + border-bottom: 1px solid #e6e9ec; } + .elementor-context-menu-list__item { + padding: 5px 10px; + padding-right: 20px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + cursor: pointer; } + .elementor-context-menu-list__item--disabled { + cursor: default; + color: #d5dadf; } + .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover { + background-color: #71d7f7; } + .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover > * { + color: #fff; } + .elementor-context-menu-list__item__icon { + width: 20px; + color: #c2cbd2; } + .elementor-context-menu-list__item__title { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + .elementor-context-menu-list__item__shortcut { + color: #d5dadf; } + .elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover { + background-color: #d72b3f; } + .elementor-context-menu .eicon-pro-icon { + color: #fcb92c; } + +.elementor-right-click-introduction { + position: absolute; + width: 250px; + padding: 30px 20px; + background-color: #fff; + -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.07); + box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.07); + text-align: center; + -webkit-border-radius: 3px; + border-radius: 3px; } + .elementor-right-click-introduction:before { + content: ''; + position: absolute; + border: solid transparent; + border-width: 7px 5px; + border-bottom-color: #fff; + top: -14px; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + .elementor-right-click-introduction .dialog-header { + color: #6d7882; + font-size: 16px; } + .elementor-right-click-introduction .dialog-message { + font-size: 13px; + line-height: 1.6; + margin-top: 10px; + color: #a4afb7; } + .elementor-right-click-introduction .dialog-buttons-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + margin-top: 25px; } + .elementor-right-click-introduction .dialog-button { + font-size: 11px; } + .elementor-right-click-introduction .dialog-ok { + padding: 7px 27px; + text-transform: capitalize; } + .elementor-right-click-introduction .dialog-learn-more { + color: #39b54a; + margin-right: 15px; + cursor: pointer; } + +#elementor-hotkeys { + text-align: left; } + #elementor-hotkeys__content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 100%; + overflow: hidden; + margin-bottom: 30px; } + @media (max-width: 1024px) { + #elementor-hotkeys__content { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } } + #elementor-hotkeys__actions .elementor-hotkeys__list { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; } + @media (max-width: 1024px) { + #elementor-hotkeys__actions .elementor-hotkeys__list { + -webkit-border-radius: 3px; + border-radius: 3px; } } + @media (min-width: 1025px) { + #elementor-hotkeys__actions .elementor-hotkeys__header, + #elementor-hotkeys__actions .elementor-hotkeys__list { + padding-right: 25px; } } + @media (min-width: 1440px) { + #elementor-hotkeys__actions .elementor-hotkeys__header, + #elementor-hotkeys__actions .elementor-hotkeys__list { + padding-right: 50px; } } + #elementor-hotkeys__navigation .elementor-hotkeys__list { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + @media (max-width: 1024px) { + #elementor-hotkeys__navigation .elementor-hotkeys__list { + -webkit-border-radius: 3px; + border-radius: 3px; } } + @media (min-width: 1025px) { + #elementor-hotkeys__navigation .elementor-hotkeys__header { + padding-left: 25px; } } + @media (min-width: 1440px) { + #elementor-hotkeys__navigation .elementor-hotkeys__header { + padding-left: 50px; } } + @media (min-width: 1025px) { + #elementor-hotkeys__navigation .elementor-hotkeys__list { + padding-left: 15px; } } + @media (min-width: 1440px) { + #elementor-hotkeys__navigation .elementor-hotkeys__list { + padding-left: 40px; } } + +.elementor-hotkeys__col { + width: 50%; } + @media (max-width: 1024px) { + .elementor-hotkeys__col { + width: 100%; } } + +.elementor-hotkeys__header, .elementor-hotkeys__list { + width: 100%; } + +.elementor-hotkeys__header { + padding: 10px 30px; + font-weight: 500; } + @media (max-width: 479px) { + .elementor-hotkeys__header { + padding-right: 10px; + padding-left: 10px; } } + +.elementor-hotkeys__list { + background-color: #ffffff; + height: calc(100% - 42px); + padding: 10px 20px; } + @media (max-width: 479px) { + .elementor-hotkeys__list { + padding: 0; } } + @media (max-width: 1024px) { + .elementor-hotkeys__list { + margin-bottom: 30px; } } + @media (max-width: 1024px) { + .elementor-hotkeys__list { + height: auto; } } + +.elementor-hotkeys__item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 20px 10px; + border-bottom: 1px solid #eceeef; } + .elementor-hotkeys__item:last-child { + margin-bottom: 30px; } + @media (max-width: 479px) { + .elementor-hotkeys__item:last-child { + margin-bottom: 0; } } + .elementor-hotkeys__item--label { + font-size: 13px; + font-weight: 400; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .elementor-hotkeys__item--shortcut { + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .elementor-hotkeys__item--shortcut span { + position: relative; + background-color: #eceeef; + padding: 5px 12px; + margin-right: 27px; + -webkit-border-radius: 3px; + border-radius: 3px; } + @media (max-width: 479px) { + .elementor-hotkeys__item--shortcut span { + padding: 4px 9px; + margin-right: 23px; } } + .elementor-hotkeys__item--shortcut span:after { + content: '+'; + position: absolute; + right: -18px; + width: 9px; + text-align: center; } + @media (max-width: 479px) { + .elementor-hotkeys__item--shortcut span:after { + right: -16px; } } + .elementor-hotkeys__item--shortcut span:last-child { + margin-right: 0; } + .elementor-hotkeys__item--shortcut span:last-child:after { + display: none; } + +.ui-resizable-n { + top: -5px; } + +.ui-resizable-e { + right: -5px; } + +.ui-resizable-s { + bottom: -5px; } + +.ui-resizable-w { + left: -5px; } + +.ui-resizable-ne { + top: -5px; + right: -5px; } + +.ui-resizable-nw { + top: -5px; + left: -5px; } + +.ui-resizable-se { + bottom: -5px; + right: -5px; } + +.ui-resizable-sw { + bottom: -5px; + left: -5px; } + +.ui-resizable-n, .ui-resizable-s { + left: 0; + height: 10px; + width: 100%; + cursor: ns-resize; } + +.ui-resizable-e, .ui-resizable-w { + top: 0; + height: 100%; + width: 10px; + cursor: ew-resize; } + +.ui-resizable-ne, .ui-resizable-nw, .ui-resizable-se, .ui-resizable-sw { + height: 15px; + width: 15px; } + +.ui-resizable-nw, .ui-resizable-se { + cursor: nwse-resize; } + +.ui-resizable-ne, .ui-resizable-sw { + cursor: nesw-resize; } + +.ui-resizable-handle { + position: absolute; } + +.ui-resizable-resizing { + pointer-events: none; } + +#elementor-navigator { + position: fixed; + top: 100px; + width: 240px; + height: 339px; + right: 30px; + background-color: #fff; + -webkit-box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; + z-index: 2; + display: none; } + body.elementor-navigator-docked #elementor-navigator { + top: 0; + right: 0; + height: 100%; } + body:not(.elementor-navigator-docked) #elementor-navigator { + -webkit-border-radius: 5px; + border-radius: 5px; } + #elementor-navigator__inner { + height: 100%; + background-color: #e6e9ec; } + #elementor-navigator__header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 12px 10px; + background-color: #fff; + border-bottom: 1px solid #e6e9ec; + cursor: move; } + #elementor-navigator__close, #elementor-navigator__toggle-all { + -webkit-transition: color .5s; + -o-transition: color .5s; + transition: color .5s; + cursor: pointer; } + #elementor-navigator__close:not(:hover), #elementor-navigator__toggle-all:not(:hover) { + color: #a4afb7; } + #elementor-navigator__toggle-all { + font-size: 13px; } + #elementor-navigator__close { + font-size: 11px; } + #elementor-navigator__elements { + height: calc(100% - 49px); + overflow: auto; + position: relative; } + .elementor-navigator-docked #elementor-navigator__elements { + height: calc(100% - 35px); } + #elementor-navigator__footer { + position: absolute; + width: 100%; + left: 0; + bottom: 0; + text-align: center; + background-color: #fff; + border-top: 1px solid #e6e9ec; + color: #a4afb7; } + .elementor-navigator-docked #elementor-navigator__footer { + display: none; } + +.elementor-navigator__item { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: 32px; + padding-right: 4px; + font-size: 12px; + border-bottom: 1px solid #e6e9ec; + cursor: pointer; } + .elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i { + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); } + .elementor-navigator__item > * { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .elementor-navigator__item + .elementor-navigator__elements { + display: none; } + +.elementor-navigator__elements .elementor-empty-view { + padding: 10px; + border-bottom: 1px solid #e6e9ec; } + .elementor-navigator__elements .elementor-empty-view__title { + margin-left: 23px; + color: #c2cbd2; + font-size: 10px; + font-style: italic; } + +.elementor-navigator__elements .ui-sortable-helper { + background-color: #fff; + -webkit-box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1); + box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1); + -webkit-transform: rotate(4deg); + transform: rotate(4deg); + border: 1px solid #e6e9ec; + pointer-events: none; } + +.elementor-navigator__elements .ui-sortable-placeholder { + background-color: #f1f3f5; } + +.elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view { + border-top: 2px solid #71d7f7; } + .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view .elementor-empty-view__title { + display: none; } + .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view + .ui-sortable-placeholder { + display: none; } + +.elementor-navigator__element:not(.elementor-navigator__element--has-children) .elementor-navigator__element__list-toggle { + visibility: hidden; } + +.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item .elementor-navigator__element__toggle { + color: #71d7f7; } + +.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item:not(:hover) .elementor-navigator__element__toggle { + display: none; } + +.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item.elementor-editing { + background-color: #71d7f7; } + .elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item.elementor-editing > * { + color: #fff; } + +.elementor-navigator__element__list-toggle { + margin-right: 7px; + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + -o-transition: transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; + color: #a4afb7; } + +.elementor-navigator__element__element-type { + margin-right: 8px; } + +.elementor-navigator__element__title { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + overflow: hidden; } + .elementor-navigator__element__title__text { + white-space: nowrap; + -webkit-user-select: text; } + .elementor-navigator__element__title__text[contenteditable="true"] { + outline: none; + color: #6d7882; + background-color: #fff; + padding: 2px 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); } + .elementor-navigator__element__title__text:not([contenteditable="true"]) { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; } + +.elementor-navigator__element__toggle { + text-align: right; + font-size: 13px; + padding: 0 5px; } + +.elementor-navigator__element--hidden .elementor-navigator__element__title, +.elementor-navigator__element--hidden .elementor-navigator__element__toggle { + opacity: .5; } + +.elementor-navigator__element-column { + background-color: #fafbfb; } + .elementor-navigator__element-column > .elementor-navigator__item .elementor-navigator__element__element-type { + color: #a4afb7; } + +.elementor-navigator__element-section { + background-color: #fff; } diff --git a/modules/creativeelements/views/css/editor.min.css b/modules/creativeelements/views/css/editor.min.css new file mode 100644 index 00000000..9be0d8c9 --- /dev/null +++ b/modules/creativeelements/views/css/editor.min.css @@ -0,0 +1 @@ +@charset "UTF-8";*,:after,:before{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}body,html{height:100%}html{background-color:#f1f1f1}iframe,img{border:0}li{list-style:none}a{text-decoration:none}body{color:#6d7882;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px;font-weight:400;line-height:1;text-decoration:none;text-transform:none;overflow:hidden}body:after{content:'';position:absolute;top:0;right:0;height:100%;width:0;background-color:#71d7f7;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}body a{color:#71d7f7}body a:hover{color:#d30c5c}body.elementor-editor-active #elementor-preview{right:0}@media (max-width:1439px){body.elementor-editor-active #elementor-preview{left:280px}}@media (min-width:1440px){body.elementor-editor-active #elementor-preview{left:300px}}body.elementor-editor-active #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-editor-preview #elementor-preview{left:0}body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-navigator--dock-hint:after{width:30px}#elementor-panel:not(.ui-resizable-resizing),#elementor-preview:not(.ui-resizable-resizing){-webkit-transition:left .5s,width .5s;-o-transition:left .5s,width .5s;transition:left .5s,width .5s}#elementor-loading{position:fixed;top:0;left:0;bottom:0;right:0;background:#f1f3f5;z-index:9999}#elementor-preview-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fff}#elementor-preview-loading i{color:#d5dadf;font-size:50px}.select2-container{z-index:9999}.select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.select2-container.select2-container--focus .select2-selection--multiple,.select2-container.select2-container--focus .select2-selection--single,.select2-container.select2-container--open .select2-selection--multiple,.select2-container.select2-container--open .select2-selection--single,.select2-dropdown{border-color:#a4afb7}.select2-dropdown .select2-search__field{outline:0}.select2-selection__placeholder{color:#a4afb7}#elementor-fatal-error-dialog button.dialog-ok{color:#71d7f7}#elementor-fatal-error-dialog .dialog-header{color:#6d7882}#elementor-flexbox-attention-dialog .dialog-cancel{color:#39b54a}#elementor-flexbox-attention-dialog .dialog-ok{color:#6d7882}.elementor-nerd-box{padding:30px;text-align:center}.elementor-nerd-box-icon{font-size:52px;color:#a4afb7}.elementor-nerd-box-title{margin-top:20px;font-size:16px;font-weight:700;line-height:1.4}.elementor-nerd-box-message{margin-top:20px;line-height:1.8;font-size:11px}.elementor-nerd-box .elementor-button.elementor-nerd-box-link{background-color:#fcb92c;color:#fff;padding:7px 25px;margin-top:20px;-webkit-box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-nerd-box .elementor-button.elementor-nerd-box-link:hover{background-color:#fdca5e}.eicon-nerd:hover:before{content:'\e965'}.eicon-nerd:active:before{content:'\e964'}.elementor-loader-wrapper{position:absolute;width:300px;left:50%;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-loader{-webkit-border-radius:7px;border-radius:7px;padding:40px;height:150px;width:150px;background-color:rgba(255,255,255,.9);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:2px 2px 20px 4px rgba(0,0,0,.02);box-shadow:2px 2px 20px 4px rgba(0,0,0,.02)}.elementor-loader-boxes{height:100%;width:100%;position:relative}.elementor-loader-box{position:absolute;background-color:#d5dadf;-webkit-animation:1.8s linear infinite load;animation:1.8s linear infinite load}.elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}.elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}.elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}.elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}.elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%,100%{opacity:.3}50%{opacity:1}}@keyframes load{0%,100%{opacity:.3}50%{opacity:1}}.elementor-loading-title{color:#a4afb7;text-align:center;text-transform:uppercase;margin-top:30px;letter-spacing:7px;text-indent:7px;font-size:10px;width:100%}.elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-weight:500;text-transform:uppercase;outline:0;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-right:10px}.elementor-input-style,input,select,textarea{-webkit-border-radius:3px;border-radius:3px;font-size:12px;width:100%;background:0 0;-webkit-box-shadow:none;box-shadow:none;color:#495157;border:1px solid;outline:0}.elementor-input-style:not(:focus),input:not(:focus),select:not(:focus),textarea:not(:focus){border-color:#d5dadf}.elementor-input-style:focus,input:focus,select:focus,textarea:focus{border-color:#a4afb7}.elementor-input-style::-webkit-input-placeholder,input::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a4afb7}.elementor-input-style::-ms-input-placeholder,input::-ms-input-placeholder,select::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a4afb7}.elementor-input-style::placeholder,input::placeholder,select::placeholder,textarea::placeholder{color:#a4afb7}.elementor-error input,.elementor-error select,.elementor-error textarea{border-color:#b01b1b}.elementor-input-style,input,textarea{padding:5px 8px}.elementor-input-style,textarea{resize:vertical}input[type=checkbox],input[type=radio]{border:1px solid #d5dadf;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-transition:border-color .05s ease-in-out;-o-transition:border-color .05s ease-in-out;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=radio]:focus{border-color:#a4afb7}input[disabled]{background-color:#e6e9ec;cursor:not-allowed;opacity:1}select{height:27px}.ps{overflow:hidden!important;overflow-anchor:none;-ms-touch-action:auto;touch-action:auto}.ps__rail-y{display:none;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;left:initial!important;position:absolute}.ps--active-y>.ps__rail-y{display:block;background-color:transparent}.ps--focus>.ps__rail-y,.ps--scrolling-y>.ps__rail-y,.ps:hover>.ps__rail-y{opacity:.6}.ps .ps__rail-y.ps--clicking,.ps .ps__rail-y:focus,.ps .ps__rail-y:hover{background-color:#eee;opacity:.9}.ps__thumb-y{background-color:#aaa;-webkit-border-radius:6px;border-radius:6px;-webkit-transition:background-color .2s linear,width .2s ease-in-out;-o-transition:background-color .2s linear,width .2s ease-in-out;transition:background-color .2s linear,width .2s ease-in-out;width:6px;right:2px;position:absolute}.ps__rail-y.ps--clicking .ps__thumb-y,.ps__rail-y:focus>.ps__thumb-y,.ps__rail-y:hover>.ps__thumb-y{background-color:#999;width:11px}#nprogress{pointer-events:none}#nprogress .bar{background:#39b54a;position:fixed;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;-webkit-box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}#nprogress .spinner{display:none;position:fixed;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;box-sizing:border-box;border:2px solid transparent;border-top-color:#39b54a;border-left-color:#39b54a;-webkit-border-radius:50%;border-radius:50%;-webkit-animation:.4s linear infinite nprogress-spinner;animation:.4s linear infinite nprogress-spinner}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}#nprogress .bar,#nprogress .spinner{z-index:100000}.elementor-panel{position:fixed;height:100%;top:0;bottom:0;overflow:visible;background-color:#e6e9ec;z-index:1;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px}.elementor-editor-active .elementor-panel{left:0}.elementor-editor-preview .elementor-panel>.ui-resizable-e,.elementor-editor-preview .elementor-panel>.ui-resizable-w{display:none}@media (max-width:1439px){.elementor-editor-preview .elementor-panel{left:-280px}.elementor-panel{width:280px}}@media (min-width:1440px){.elementor-editor-preview .elementor-panel{left:-300px}.elementor-panel{width:300px}}.elementor-panel .ps-scrollbar-y-rail{z-index:2}.elementor-panel ::-moz-selection{background:#5bc0de;color:#fff}.elementor-panel ::selection{background:#5bc0de;color:#fff}.elementor-panel a{color:#d30c5c}.elementor-panel h1,.elementor-panel h2,.elementor-panel h3,.elementor-panel h4,.elementor-panel h5,.elementor-panel h6{font-size:100%;font-weight:400}.elementor-panel abbr,.elementor-panel acronym{border:0;font-variant:normal}.elementor-panel sup{vertical-align:text-top}.elementor-panel sub{vertical-align:text-bottom}.elementor-panel img{max-width:100%;height:auto;border:0}.elementor-panel ::-moz-focus-inner{padding:0;border:0}.elementor-panel :focus{outline:0}.elementor-panel .elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel .elementor-panel-box-content{padding:20px 20px 10px}.elementor-panel .elementor-button{display:inline-block}.elementor-panel .elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:left}.elementor-panel .elementor-panel-alert a{color:inherit}.elementor-panel .elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel .elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel .elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel .elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-panel .elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-panel .elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-panel .elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-panel .elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-panel .elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-panel .elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-panel .elementor-control-field-description,.elementor-panel .elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-panel .elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:10000;background-color:#fff}.elementor-panel .elementor-controls-popover:before{content:'';position:absolute;top:-16px;right:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-panel .elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-panel .elementor-controls-popover div.elementor-control:before{content:none}.elementor-panel #elementor-panel-get-pro-elements .elementor-nerd-box-message{text-transform:uppercase}.elementor-panel .select2-container{width:100%!important}.elementor-panel #elementor-controls .pojo-widget-button-collapse{display:none}.elementor-panel #elementor-panel-header{display:table;height:40px;width:100%;background-color:#d30c5c;color:#fff}.elementor-panel #elementor-panel-header>*{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-header-button{width:40px}.elementor-panel .elementor-header-button .elementor-icon{cursor:pointer;display:block;font-size:19px;height:40px;line-height:40px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar{font-size:18px}.elementor-panel .elementor-header-button .elementor-icon:hover{color:#d5dadf}.elementor-panel #elementor-panel-header-title{font-size:15px}.elementor-panel #elementor-panel-header-title img{width:66px}body:not(.elementor-controls-ready) .elementor-panel #elementor-panel-page-elements{height:100%;overflow:hidden}.elementor-panel #elementor-panel-elements-navigation .elementor-panel-navigation-tab{text-align:center;padding:10px 0;font-size:11px;text-transform:uppercase;cursor:pointer}.elementor-panel #elementor-panel-elements{overflow:hidden;padding:0 5px}.elementor-panel #elementor-panel-elements-loading{position:absolute;top:0;left:0;height:100%;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;background-color:rgba(255,255,255,.5);z-index:1}body.elementor-controls-ready .elementor-panel #elementor-panel-elements-loading{display:none}.elementor-panel #elementor-panel-elements-loading .eicon-loading{font-size:25px;color:#71d7f7}.elementor-panel .elementor-element-wrapper{float:left;width:50%;padding:5px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-panel .elementor-element{-webkit-border-radius:3px;border-radius:3px;background-color:#fff;cursor:move}.elementor-panel .elementor-element:hover{-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2)}.elementor-panel .elementor-element:hover .icon,.elementor-panel .elementor-element:hover .title{color:#d30c5c}.elementor-panel .elementor-element .icon{font-size:28px;padding-top:15px;color:#556068}.elementor-panel .elementor-element .elementor-element-title-wrapper{display:table;width:100%}.elementor-panel .elementor-element .title{font-size:11px;color:#556068;display:table-cell;vertical-align:middle;height:40px}.elementor-panel #elementor-panel-elements-search-wrapper{position:relative;margin:10px 10px 5px}.elementor-panel #elementor-panel-elements-search-wrapper i{position:absolute;right:0;top:50%;color:#a4afb7;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:right 1s;-o-transition:right 1s;transition:right 1s}.elementor-panel #elementor-panel-elements-search-input{background-color:rgba(255,255,255,.7);font-size:11px;padding:10px 27px 10px 10px;font-style:italic;color:#a4afb7;border:none;-webkit-transition:1s;-o-transition:1s;transition:1s;-webkit-border-radius:3px;border-radius:3px;appearance:none;-webkit-appearance:none;-moz-appearance:none}.elementor-panel #elementor-panel-elements-search-input+i{right:10px}.elementor-panel #elementor-panel-elements-search-input:focus{background-color:#fff;padding-left:15px}.elementor-panel #elementor-panel-elements-search-input:focus+i{right:15px}.elementor-panel .elementor-panel-category{position:relative}.elementor-panel .elementor-panel-category:first-child .elementor-panel-category-title{padding-top:14px}.elementor-panel .elementor-panel-category.elementor-active .elementor-panel-category-title:before{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.elementor-panel .elementor-panel-category:not(.elementor-active):after{content:'';position:absolute;left:15px;right:15px;bottom:0;height:8px;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.03)),to(transparent));background:-webkit-linear-gradient(rgba(0,0,0,.03),transparent);background:-o-linear-gradient(rgba(0,0,0,.03),transparent);background:linear-gradient(rgba(0,0,0,.03),transparent);-webkit-transform:translateY(100%);transform:translateY(100%)}.elementor-panel .elementor-panel-category-title{margin:0 15px;padding:20px 0;position:relative;text-transform:uppercase;font-size:11px;cursor:pointer}.elementor-panel .elementor-panel-category-title:before{content:"";font-family:eicons;position:absolute;right:0;-webkit-transition:-webkit-transform .3s;transition:transform .3s;-o-transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.elementor-panel .elementor-panel-category-items{overflow:hidden;padding:0 5px;display:none}.elementor-panel .elementor-panel-scheme-title{padding:10px 20px;margin-top:10px}.elementor-panel .elementor-panel-scheme-description{padding:20px 20px 0}.elementor-panel .elementor-panel-scheme-buttons{padding:0 20px;display:table;table-layout:fixed;width:100%;height:40px;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1)}.elementor-panel .elementor-panel-scheme-buttons .elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:11px;font-weight:400}.elementor-panel .elementor-panel-scheme-button-wrapper{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-panel-scheme-button-wrapper:first-child{text-align:left}.elementor-panel .elementor-panel-scheme-button-wrapper:last-child{text-align:right}.elementor-panel .elementor-panel-scheme-save .elementor-button{padding:6px 18px}.elementor-panel .elementor-panel-scheme-discard .elementor-button,.elementor-panel .elementor-panel-scheme-reset .elementor-button{color:#a4afb7;background:0 0}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-items{position:relative;display:grid;grid-template-columns:repeat(4,50px);-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active){float:none}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{top:10px}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{border-width:0 4px 0 5px}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:4px}[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:10px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{border-width:0 7px 0 5px}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:6px}[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:9px}}.elementor-panel .elementor-panel-scheme-color-title{text-align:center;text-transform:uppercase;margin:10px 0;color:#c2cbd2;font-size:8px}.elementor-panel .elementor-panel-scheme-typography-item{display:table;table-layout:fixed;width:100%;margin-bottom:15px}.elementor-panel .elementor-panel-scheme-typography-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-scheme-typography-item-value input,.elementor-panel .elementor-panel-scheme-typography-item-value select{width:100%}.elementor-panel .elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-scheme-typography-items{display:none}.elementor-panel .elementor-panel-scheme-color-system-scheme{margin-bottom:10px}.elementor-panel .elementor-panel-scheme-color-system-scheme .elementor-title{font-size:11px;color:#a4afb7;font-style:italic;margin-top:5px}.elementor-panel .elementor-panel-scheme-color-system-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;overflow:hidden;padding:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf;cursor:pointer}.elementor-panel .elementor-panel-scheme-color-system-items:hover{border:1px solid #a4afb7}.elementor-panel .elementor-panel-scheme-color-system-item{height:20px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-panel #elementor-panel-schemes-disabled a:hover{text-decoration:underline}.elementor-panel #elementor-panel-page-menu{padding:25px 15px}.elementor-panel .elementor-panel-menu-group-title{text-transform:uppercase;font-size:11px}.elementor-panel .elementor-panel-menu-items{margin:15px 0 25px;-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-menu-item{display:table;width:100%;height:40px;cursor:pointer;margin-bottom:1px;background-color:#fff}.elementor-panel .elementor-panel-menu-item:hover{background-color:rgba(255,255,255,.8)}.elementor-panel .elementor-panel-menu-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-menu-item-icon{text-align:center;width:50px;color:#a4afb7}.elementor-panel .elementor-panel-menu-item-title{font-weight:500}.elementor-panel .elementor-panel-menu-item-title>span{color:#39b54a}.elementor-panel .elementor-panel-menu-item a{color:#6d7882}.elementor-panel .elementor-panel-menu-item-exit-to-dashboard{background-color:#0085ba;color:#fff;text-transform:uppercase;font-size:12px}.elementor-panel .elementor-panel-menu-item-exit-to-dashboard:hover{background-color:#0073a1}.elementor-panel .elementor-panel-menu-item-exit-to-dashboard .elementor-panel-menu-item-icon,.elementor-panel .elementor-panel-menu-item-exit-to-dashboard .elementor-panel-menu-item-title{color:#fff}.elementor-panel .elementor-control.elementor-control-clear_page{background-color:transparent}.elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-panel .elementor-panel-navigation{background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);display:table;table-layout:fixed;width:100%}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab{display:table-cell}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(to bottom,#f3f3f3,#fff);border-bottom:3px solid #d30c5c}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a{display:block;text-align:center;padding:12px 0 8px;font-size:10px;color:#6d7882}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a:before{font-family:FontAwesome;font-size:16px;display:block;margin-bottom:6px}.elementor-panel .elementor-tab-control-content a:before{content:'\f040'}.elementor-panel .elementor-tab-control-style a:before{content:'\f042'}.elementor-panel .elementor-tab-control-advanced a:before,.elementor-panel .elementor-tab-control-general_style a:before,.elementor-panel .elementor-tab-control-settings a:before{content:'\f013'}.elementor-panel .elementor-tab-control-responsive a:before{content:'\f10a'}.elementor-panel .elementor-tab-control-column a:before,.elementor-panel .elementor-tab-control-layout a:before{content:'\f0db'}.elementor-panel .elementor-tab-control-lightbox a:before{content:'\f2d2'}.elementor-panel #elementor-panel-footer{position:absolute;bottom:0;left:0;right:0;height:40px;background-color:#495157}.elementor-panel #elementor-panel-footer-tools{display:table;table-layout:fixed;width:100%;height:100%}.elementor-panel .elementor-panel-footer-tool{display:table-cell;vertical-align:middle;text-align:center;cursor:pointer;color:#a4afb7;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update{border-right:1px solid #2d8739;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update i{margin-right:5px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options{float:left;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i{margin:auto}.elementor-panel .elementor-panel-footer-tool.elementor-open{color:#fff}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open):hover{color:#d5dadf}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open) .elementor-panel-footer-sub-menu-wrapper{display:none}.elementor-panel .elementor-panel-footer-sub-menu-wrapper{position:absolute;bottom:100%;left:0;width:100%;background-color:#556068;padding:10px;-webkit-box-shadow:-2px -5px 8px rgba(0,0,0,.1);box-shadow:-2px -5px 8px rgba(0,0,0,.1);cursor:default;z-index:10000}.elementor-panel .elementor-panel-footer-sub-menu{-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-footer-sub-menu-item{background-color:#495157;display:table;table-layout:fixed;width:100%;cursor:pointer}.elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled .elementor-icon,.elementor-panel .elementor-panel-footer-sub-menu-item.elementor-disabled .elementor-title{color:#6d7882}.elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child){margin-bottom:1px}.elementor-panel .elementor-panel-footer-sub-menu-item[data-device-mode=mobile-landscape] .fa-mobile{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-panel .elementor-panel-footer-sub-menu-item:hover{background-color:rgba(0,0,0,.2)}.elementor-panel .elementor-panel-footer-sub-menu-item.active{background-color:rgba(0,0,0,.3)}.elementor-panel .elementor-panel-footer-sub-menu-item>*{display:table-cell;height:40px;vertical-align:middle}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-icon{width:40px;color:#a4afb7}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-title{text-align:left;color:#d5dadf}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-description{width:95px;text-align:left;font-size:11px;font-style:italic;color:#a4afb7}.elementor-panel #elementor-panel-footer-help-title{text-align:left;padding:10px 0;color:#d5dadf}.elementor-panel #elementor-panel-footer-responsive>i{display:block;height:100%;line-height:40px}.elementor-panel #elementor-panel-footer-saver-publish{width:80px}.elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state i{margin-right:0}.elementor-panel #elementor-panel-footer-saver-publish .elementor-button-state #elementor-panel-saver-button-publish-label{display:none}.elementor-panel #elementor-panel-footer-saver-options{width:35px;border-left:1px solid #495157}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper{font-size:11px;font-style:italic;color:#a4afb7;padding:5px 0 15px}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper:not(.elementor-state-active) .elementor-state-icon{display:none}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time{border-bottom:1px dotted transparent;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;cursor:pointer}.elementor-panel #elementor-panel-footer-saver-options .elementor-last-edited-wrapper time:hover{border-bottom-color:inherit}.elementor-panel .elementor-disabled{cursor:default}.elementor-panel #elementor-panel-saver-button-preview a{color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish,.elementor-panel #elementor-panel-saver-button-save-options{font-size:11px;text-transform:uppercase;height:26px}.elementor-panel #elementor-panel-saver-button-publish.elementor-disabled,.elementor-panel #elementor-panel-saver-button-save-options.elementor-disabled{background-color:#556068;color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish{width:100%;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-panel #elementor-panel-saver-button-save-options{width:25px}#elementor-panel-inner{position:relative;height:100%;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-shadow:0 0 5px 0 rgba(0,0,0,.2)}#elementor-panel-content-wrapper{position:absolute;bottom:40px;top:40px;left:0;width:100%}.elementor-panel-container{clear:both;padding-left:15px;padding-right:15px}.media-modal.wp-core-ui input{width:auto}.media-modal.wp-core-ui fieldset{padding:0;border:0}.media-modal.wp-core-ui .wp-clearfix::after{content:'';display:table;clear:both}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control .elementor-control-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.elementor-control .elementor-control-title{font-size:12px;line-height:1;margin-right:5px}.elementor-control .elementor-control-spinner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-control.elementor-control-type-divider{padding:0;background-color:transparent}.elementor-control.elementor-control-type-divider .elementor-control-content{border-width:1px 0 0;border-color:#e6e9ec;border-style:solid;background-color:#fff;height:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{content:'';height:1px;display:block;margin-bottom:15px;background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:'';position:absolute;height:1px;width:100%;top:0;left:0;background-color:#e6e9ec}.elementor-control.elementor-control-separator-after:after{content:'';position:absolute;height:1px;width:100%;bottom:0;left:0;background-color:#e6e9ec}.elementor-control.elementor-control-separator-after+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:#495157;font-size:12px;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:5px;padding-right:20px;cursor:pointer}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:'\e955';font-size:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:5px;pointer-events:none}.elementor-control .select2-container{width:100%!important;outline:0}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-container.select2-container--default .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection{outline:0}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before{content:'\f0d7'}.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;margin-left:auto}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s;cursor:pointer}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:not(:first-child){margin-left:5px}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.rtl .elementor-control-align .elementor-choices,.rtl .elementor-control-position .elementor-choices,.rtl .elementor-control-text_align .elementor-choices{direction:ltr}.rtl .elementor-control-align .elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2),.rtl .elementor-control-position .elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2),.rtl .elementor-control-text_align .elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.rtl .elementor-control-align .elementor-choices input:not(:checked)+.elementor-choices-label:last-child,.rtl .elementor-control-position .elementor-choices input:not(:checked)+.elementor-choices-label:last-child,.rtl .elementor-control-text_align .elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-control-direction-ltr{direction:ltr}.elementor-control-direction-rtl{direction:rtl}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-button .elementor-control-input-wrapper{text-align:right}.elementor-control-type-button .elementor-button{width:auto;height:26px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-group-control-css-filter .elementor-slider{height:6px;-webkit-box-shadow:0 0 1px 1px inset rgba(0,0,0,.2);box-shadow:0 0 1px 1px inset rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0;margin-bottom:5px}.elementor-group-control-blur .elementor-slider{background:url("../images/blur.png") center/cover;-webkit-background-size:cover}.elementor-group-control-contrast .elementor-slider{background:url("../images/contrast.png") 0 0/100% 100%;-webkit-background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(red),color-stop(orange),color-stop(yellow),color-stop(greenyellow),color-stop(limegreen),color-stop(deepskyblue),color-stop(blue),color-stop(95%,#9400d3));background-image:-webkit-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%);background-image:-o-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%);background-image:linear-gradient(to right,red,orange,#ff0,#adff2f,#32cd32,#00bfff,#00f,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(gray),to(red));background-image:-webkit-linear-gradient(left,gray,red);background-image:-o-linear-gradient(left,gray,red);background-image:linear-gradient(to right,gray,red)}.elementor-group-control-brightness .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(black),to(white));background-image:-webkit-linear-gradient(left,#000,#fff);background-image:-o-linear-gradient(left,#000,#fff);background-image:linear-gradient(to right,#000,#fff)}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:0;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:left;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-right:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-hidden{display:none!important}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:left}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:left;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:right;height:27px;width:65px}.elementor-control-type-media .elementor-control-input-wrapper{padding:7px;border:1px solid;-webkit-transition:.2s ease-in-out;-o-transition:.2s ease-in-out;transition:.2s ease-in-out}.elementor-control-type-media .elementor-control-input-wrapper:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-input-wrapper:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-input-wrapper:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-input-wrapper:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media{cursor:pointer}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-area{background-image:-webkit-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-webkit-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);-webkit-background-size:16px 16px;background-size:16px 16px;background-position:0 0,8px 8px;background-color:#f6f6f6;overflow:hidden}.elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete{-webkit-box-shadow:none;box-shadow:none;bottom:-30px}.elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image{opacity:.9}.elementor-control-type-media .elementor-control-media-area i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:rgba(255,255,255,.7);font-size:21px}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase;-webkit-transition:.2s ease-in-out;-o-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-box-shadow:0 0 3px 3px rgba(0,0,0,.1);box-shadow:0 0 3px 3px rgba(0,0,0,.1)}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:center}.elementor-control-type-number .elementor-control-input-wrapper{max-width:80px}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:rtl}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-right:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding-right:10px;padding-left:10px;padding-bottom:15px}.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:left;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-right:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section.elementor-open{padding-bottom:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-slider--multiple{margin-bottom:14px}.elementor-control-type-slider--multiple .elementor-slider{margin-top:12px;width:98%}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle{-webkit-border-radius:0;border-radius:0;width:10px;-webkit-transform:translateY(calc(50% - 14px)) translateX(4px);transform:translateY(calc(50% - 14px)) translateX(4px)}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle:after{content:'';position:absolute;top:2px;height:12px;width:11px;-webkit-transform:rotate(45deg);transform:rotate(45deg);background-color:#fff;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-lower:after{left:5px;-webkit-box-shadow:2px -2px 3px 0 rgba(0,0,0,.1);box-shadow:2px -2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider--handles-range .elementor-slider .noUi-handle-upper:after{right:5px;-webkit-box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1);box-shadow:-2px 2px 3px 0 rgba(0,0,0,.1)}.elementor-control-type-slider:not(.elementor-control-type-slider--multiple) .elementor-slider{display:inline-block;width:70%}.elementor-slider{margin:10px auto;height:4px;background-color:#d5dadf;-webkit-border-radius:5px;border-radius:5px;position:relative;cursor:pointer}.elementor-slider-input{width:30%;float:right}.elementor-slider-input input{max-width:80%;float:right;padding:5px}.elementor-slider__extra{position:relative}.elementor-slider__labels{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-slider__label{font-size:9px;color:#c2cbd2}.elementor-slider__scales{position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-webkit-justify-content:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;width:100%;margin-top:4px}.elementor-slider__scale{width:1px;height:21px;background-color:#a4afb7}.elementor-slider .noUi-handle{height:16px;width:16px;background-color:#fff;right:0;-webkit-transform:translateY(calc(50% - 14px)) translateX(8px);transform:translateY(calc(50% - 14px)) translateX(8px);position:absolute;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.3);box-shadow:0 1px 5px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%}.elementor-slider .noUi-connects{position:absolute;width:100%;height:5px}.elementor-slider .noUi-connect{position:absolute;z-index:0;top:0;left:0;height:100%;width:100%;will-change:transform;-webkit-transform-origin:0 0;transform-origin:0 0;background-color:#a4afb7}.elementor-slider .noUi-tooltip{position:absolute;top:calc(100% + 5px);left:calc(50% - 4px);-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:10px}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-right:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:'';position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px rgba(127,127,127,.1);box-shadow:inset 0 2px 4px rgba(127,127,127,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:right}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:opacity .15s ease-out,background .15s ease-out;-o-transition:opacity .15s ease-out,background .15s ease-out;transition:opacity .15s ease-out,background .15s ease-out}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px rgba(255,255,255,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:27px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-right:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-left:1px solid #a4afb7;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;width:12px;height:12px;top:7px;right:13px;z-index:1;background:#fff}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-autocomplete-menu{position:absolute;background:#fff;color:#495157;border:1px solid #a4afb7;margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:.3s ease-in-out;-o-transition:.3s ease-in-out;transition:.3s ease-in-out;cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline;padding:5px 8px;font-size:12px;width:100%;line-height:1.2;cursor:pointer}.elementor-autocomplete-menu .ui-menu-item.ui-state-active,.elementor-autocomplete-menu .ui-menu-item.ui-state-focus,.elementor-autocomplete-menu .ui-menu-item.ui-state-hover{background:#e6e9ec}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-top:2px}.wp-picker-container.wp-picker-active{position:absolute;z-index:10000;top:-9px;right:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container .iris-picker .iris-picker-inner{width:100%}.wp-picker-container:not(.wp-picker-active){float:right}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:120px;max-width:136px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}#elementor-mode-switcher{position:absolute;left:100%;top:50%;width:15px;height:50px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#e6e9ec;font-size:15px;-webkit-box-shadow:3px 1px 5px rgba(0,0,0,.1);box-shadow:3px 1px 5px rgba(0,0,0,.1);cursor:pointer}#elementor-mode-switcher:hover,body.elementor-editor-preview #elementor-mode-switcher{background-color:#d30c5c;color:#fff}#elementor-mode-switcher-inner,#elementor-mode-switcher-preview{width:100%;height:100%;position:absolute;top:0;left:0}#elementor-mode-switcher-preview{cursor:pointer}#elementor-mode-switcher-preview .fa{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}#elementor-mode-switcher-preview-input{display:none}.elementor-revision-item__wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px}.elementor-revision-item__wrapper.current{font-weight:700}.elementor-revision-item__wrapper .elementor-revision-item__tools-current{color:#d30c5c}.elementor-revision-item:hover:not(.elementor-revision-current-preview){background-color:rgba(230,233,236,.3)}.elementor-revision-item-loading .elementor-revision-item__tools-current,.elementor-revision-item-loading .elementor-revision-item__tools-delete,.elementor-revision-item.elementor-revision-current-preview .elementor-revision-item__tools-delete,.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner,.elementor-revision-item:not(:hover) .elementor-revision-item__tools-delete{display:none}.elementor-revision-item__gravatar{-webkit-border-radius:50%;border-radius:50%;overflow:hidden}.elementor-revision-item__gravatar img{display:block}.elementor-revision-item__details{padding-left:15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;cursor:pointer}.elementor-revision-item__tools-delete{cursor:pointer}.elementor-revision-meta{padding-top:5px;font-size:10px;font-weight:700}.elementor-revision-current-preview{background-color:#e6e9ec}#elementor-restore-autosave-dialog.dialog-widget{background-color:rgba(0,0,0,.3)}#elementor-panel-revisions-loading{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}#elementor-panel-revisions-loading .eicon-loading{font-size:50px;color:#a4afb7}.elementor-history-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px;line-height:1.4;cursor:pointer}.elementor-history-item:hover{background-color:rgba(230,233,236,.3)}.elementor-history-item:hover .elementor-history-item__icon .fa:before{content:'\f1da'}.elementor-history-item-applied{color:#a4afb7}.elementor-history-item-current{background:#e6e9ec;cursor:default}.elementor-history-item-current .elementor-history-item__icon .fa:before,.elementor-history-item-current:hover .elementor-history-item__icon .fa:before{content:'\f00c'}.elementor-history-item__details{width:95%}.elementor-history-item__title{font-weight:700}.elementor-history-item__action,.elementor-history-item__subtitle{font-weight:lighter}.elementor-history-item__action{font-style:italic;text-decoration:underline}.elementor-history-item .__icon{float:right}.elementor-history-revisions-message{font-size:11px;text-align:center;padding-top:5px}#elementor-panel-history{padding:20px 20px 15px}#elementor-panel-history.elementor-empty .elementor-history-revisions-message{padding-top:20px}#elementor-panel-history:not(.elementor-empty){background-color:#fff;margin-top:10px}#elementor-panel-history-no-items{text-align:center}#elementor-preview{background-color:#333;position:absolute;height:100%;top:0;right:0;border:0}.elementor-device-desktop #elementor-preview{overflow-y:hidden}body:not(.elementor-device-desktop) #elementor-preview{overflow-y:auto}#elementor-preview-responsive-wrapper{position:absolute;top:0;bottom:0;left:0;right:0;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-device-desktop #elementor-preview-responsive-wrapper{min-width:1025px;margin:0 auto;width:100%;height:100%}.elementor-device-tablet #elementor-preview-responsive-wrapper{width:768px;height:1025px;padding:40px 10px 70px}.elementor-device-mobile #elementor-preview-responsive-wrapper{width:360px;height:640px;padding:40px 10px 70px}body:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper{-webkit-border-radius:30px;border-radius:30px;background-color:#111;margin:30px auto 80px;-webkit-box-sizing:content-box;box-sizing:content-box}#elementor-preview-iframe{width:100%;height:100%;background-color:#fff}.tipsy{font-size:10px;position:absolute;padding:5px;z-index:100000}.tipsy-inner{background-color:#000;color:#fff;max-width:200px;padding:6px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.5);box-shadow:0 0 5px 0 rgba(0,0,0,.5)}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-arrow-n{border-bottom-color:#000}.tipsy-arrow-s{border-top-color:#000}.tipsy-arrow-e{border-left-color:#000}.tipsy-arrow-w{border-right-color:#000}.tipsy-n .tipsy-arrow,.tipsy-nw .tipsy-arrow{border-left-color:transparent;border-right-color:transparent;top:0;border-bottom-style:solid;border-top:none}.tipsy-n .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-nw .tipsy-arrow{left:10px}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow,.tipsy-se .tipsy-arrow,.tipsy-sw .tipsy-arrow{bottom:0;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-sw .tipsy-arrow{left:10px}.tipsy-se .tipsy-arrow{right:10px}.tipsy-e .tipsy-arrow,.tipsy-w .tipsy-arrow{top:50%;margin-top:-5px;border-top-color:transparent;border-bottom-color:transparent}.tipsy-e .tipsy-arrow{right:0;border-left-style:solid;border-right:none}.tipsy-w .tipsy-arrow{left:0;border-right-style:solid;border-left:none}#elementor-template-library-modal a.elementor-template-library-blank-footer-link{font-style:normal;text-decoration:underline;color:#39b54a}#elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover{color:#2d8e3a}#elementor-template-library-header-menu{text-align:center;color:#6d7882;font-size:13px}.elementor-template-library-menu-item{display:inline-block;padding:17px 0;width:115px;cursor:pointer}.elementor-template-library-menu-item.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(to bottom,#f3f3f3,#fff);border-bottom:3px solid #9b0a46}#elementor-template-library-header-actions{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-template-library-header-actions>div{padding-right:16px}#elementor-template-library-header-preview-insert-wrapper{cursor:default;padding:0 10px}#elementor-template-library-header-preview-insert-wrapper .elementor-button{padding:8px 14px;font-size:11px}#elementor-template-library-header-preview-insert-wrapper .elementor-template-library-template-insert{color:#fff;background-color:#39b54a}#elementor-template-library-header-preview-back{padding:16.5px 16.5px 15px 0;border-right:1px solid #e6e9ec;cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}#elementor-template-library-header-preview-back:not(:hover){color:#a4afb7}#elementor-template-library-header-preview-back i{padding-right:10px;font-size:18px}#elementor-template-library-header-preview-back i:before{content:""}#elementor-template-library-templates{padding:0 15px}#elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container{-webkit-box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);margin-top:10px;margin-bottom:45px}#elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#6d7882}#elementor-template-library-templates[data-template-source=remote] #elementor-template-library-templates-container{margin:10px -15px 0}#elementor-template-library-templates[data-template-source=remote] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#495157}#elementor-template-library-templates .elementor-template-library-order-input,#elementor-template-library-templates.elementor-templates-filter-active #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-order-toolbar-local{display:none}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label{padding-right:8px}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label:after{font-family:eicons;content:'\e956';margin-left:3px}#elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse+.elementor-template-library-order-label:after{content:'\e955'}#elementor-template-library-templates-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}#elementor-template-library-templates-container .elementor-template-library-template-local .elementor-template-library-template-insert{text-transform:none;font-size:12px}#elementor-template-library-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-template-library-filter-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}#elementor-template-library-filter-toolbar-remote{font-size:11px}#elementor-template-library-order{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-right:1px solid #d5dadf}.elementor-template-library-order-label{text-transform:uppercase;padding-right:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}label.elementor-template-library-order-label{cursor:pointer}label.elementor-template-library-order-label:hover{color:#556068}#elementor-template-library-filter{border-right:1px solid #d5dadf}#elementor-template-library-filter .select2{text-align:left;margin-right:25px}#elementor-template-library-filter .select2-selection__rendered,#select2-elementor-template-library-filter-subtype-results .select2-results__option{text-transform:capitalize}#elementor-template-library-my-favorites{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left;padding-left:20px}#elementor-template-library-filter-my-favorites{display:none}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label{color:#495157}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label i:after{color:#d30c5c;content:'\f004'}#elementor-template-library-filter-my-favorites-label{cursor:pointer;text-transform:uppercase}#elementor-template-library-filter-my-favorites-label:hover{color:#556068}#elementor-template-library-filter-my-favorites-label:hover i:after{color:#d30c5c}#elementor-template-library-filter-my-favorites-label i{padding-right:5px}#elementor-template-library-filter-my-favorites-label i:after{color:#a4afb7;content:'\f08a'}#elementor-template-library-filter-text-wrapper{width:200px;position:relative}#elementor-template-library-filter-text-wrapper:after{content:'\e863';position:absolute;top:50%;right:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-family:eicons}#elementor-template-library-filter-text{border:none;border-bottom:1px solid #d5dadf;-webkit-border-radius:0;border-radius:0;font-size:11px;padding:8px 15px 8px 0;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s}#elementor-template-library-filter-text::-webkit-input-placeholder{font-weight:300;text-transform:uppercase}#elementor-template-library-filter-text::-ms-input-placeholder{font-weight:300;text-transform:uppercase}#elementor-template-library-filter-text::placeholder{font-weight:300;text-transform:uppercase}#elementor-template-library-filter-text:focus{border-color:#c2cbd2}.elementor-template-library-template-remote{margin:15px;padding:8px;background-color:#fff;-webkit-box-shadow:0 1px 20px 0 rgba(0,0,0,.07);box-shadow:0 1px 20px 0 rgba(0,0,0,.07);-webkit-border-radius:3px;border-radius:3px}.elementor-template-library-template-remote:hover .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-preview{opacity:0}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-favorite,.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-action{display:none}.elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before{position:absolute;content:'premium';text-transform:uppercase;top:5px;right:5px;background-color:#d30c5c;color:#d5dadf;padding:2px 4px 0;font-size:9px;-webkit-border-radius:2px;border-radius:2px}.elementor-template-library-template-remote:not(.elementor-template-library-template-page){position:relative;width:calc(33.333% - 30px);overflow:hidden}.elementor-template-library-template-remote:not(.elementor-template-library-template-page) img{display:block;width:100%}.elementor-template-library-template-remote:not(.elementor-template-library-template-page) .elementor-template-library-template-footer{position:absolute;width:100%;bottom:0;left:0;padding:10px;background-color:#fff;-webkit-transition:-webkit-transform .5s;transition:transform .5s;-o-transition:transform .5s;transition:transform .5s,-webkit-transform .5s}.elementor-template-library-template-remote:not(.elementor-template-library-template-page) .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(.elementor-template-library-template-page):not(:hover) .elementor-template-library-template-footer{-webkit-transform:translateY(100%);transform:translateY(100%)}.elementor-template-library-template-remote .elementor-template-library-template-body{position:relative}@media (max-width:1025px){.elementor-template-library-template-remote .elementor-template-library-template-body{height:300px}}.elementor-template-library-template-remote .elementor-template-library-template-screenshot{height:100%;-webkit-background-size:cover;background-size:cover;background-position-x:50%;-webkit-box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07);box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07)}.elementor-template-library-template-remote .elementor-template-library-template-preview{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-preview i{font-size:20px;color:#d5dadf;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-template-library-template-remote .elementor-template-library-template-action{background-color:transparent;text-transform:none}.elementor-template-library-template-remote .elementor-template-library-template-action i{margin-right:0}.elementor-template-library-template-remote .elementor-template-library-template-insert{color:#39b54a}.elementor-template-library-template-remote .elementor-button-go-pro{color:#fcb92c}.elementor-template-library-template-remote .elementor-template-library-template-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:10px;font-size:11px;line-height:1}.elementor-template-library-template-remote .elementor-template-library-template-name{text-align:left;color:#6d7882;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-right:5px}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input{display:none}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked+.elementor-template-library-template-favorite-label i:before{content:'\f004';color:#d30c5c}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label{cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i{color:#d30c5c}@media (max-width:1439px){.elementor-template-library-template-page{width:calc(25% - 30px)}#elementor-template-library-preview iframe{width:1440px}}@media (min-width:1440px){.elementor-template-library-template-page{width:calc(20% - 30px)}}@media (max-width:1025px){.elementor-template-library-template-page{width:calc(33.333% - 30px)}}.elementor-template-library-template-page .elementor-template-library-template-body{height:200px}#elementor-template-library-order-toolbar-local,.elementor-template-library-template-local{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0 25px;text-align:left}#elementor-template-library-order-toolbar-local{margin-top:30px}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label{line-height:1;font-size:10px;font-weight:500}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label:not(:hover){color:#a4afb7}.elementor-template-library-template-local{height:50px;width:100%;margin-top:1px;background-color:#fff;-webkit-transition:background-color .3s linear;-o-transition:background-color .3s linear;transition:background-color .3s linear}.elementor-template-library-template-local:hover{background-color:#fafbfb}.elementor-template-library-template-local:not(:hover) .elementor-template-library-template-insert{background:0 0;color:#a4afb7}.elementor-template-library-template-local:first-child{-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-template-library-template-local:last-child{-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.elementor-template-library-template-local .elementor-template-library-template-name{font-weight:500}.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name{padding-right:20px}.elementor-template-library-template-local .elementor-template-library-template-meta{color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-action,.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name,.elementor-template-library-template-local .elementor-template-library-template-preview{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-template-library-template-local .elementor-template-library-template-controls{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-template-library-template-local .elementor-template-library-template-controls>div{cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}.elementor-template-library-template-local .elementor-template-library-template-controls>div:not(:hover){color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-insert i{margin-right:3px}.elementor-template-library-template-local .elementor-template-library-template-control-title{margin-left:6px}.elementor-template-library-template-local .elementor-template-library-template-delete:hover{color:red}.elementor-template-library-template-local .elementor-template-library-template-export:hover i{color:#556068}.elementor-template-library-template-local .elementor-template-library-template-action{padding:8px 18px;margin:0 5%}.elementor-template-library-template-local .elementor-template-library-template-more{display:none;position:absolute;background-color:#fff;padding:3px 20px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:1px 3px 11px rgba(0,0,0,.3);box-shadow:1px 3px 11px rgba(0,0,0,.3);top:100%;right:0;-webkit-transform:translateX(65%) translateY(-7px);transform:translateX(65%) translateY(-7px);z-index:1}.elementor-template-library-template-local .elementor-template-library-template-more:before{content:'';position:absolute;border:solid transparent;border-width:8px 4px;border-bottom-color:#fff;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.elementor-template-library-template-local .elementor-template-library-template-more>div{margin:10px 0;font-size:11px}.elementor-template-library-template-local .elementor-template-library-template-more-toggle{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-template-library-template-local .elementor-template-library-template-more-toggle i{font-size:16px}#elementor-template-library-preview{height:100%;overflow:hidden}#elementor-template-library-preview iframe{height:150%;-webkit-transform:scale(.666) translateX(-25%) translateY(-25%);transform:scale(.666) translateX(-25%) translateY(-25%)}.elementor-template-library-blank-icon{font-size:65px;margin-top:45px;color:#c2cbd2;line-height:1}.elementor-template-library-blank-icon img{width:70px}.elementor-template-library-blank-title{font-size:30px;margin-top:40px}@media (max-width:1439px){.elementor-template-library-blank-title{font-size:25px}}.elementor-template-library-blank-message{font-size:18px;color:#a4afb7;margin-top:15px;font-weight:300}#elementor-template-library-save-template-form{margin-top:40px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}#elementor-template-library-save-template-form>*{height:55px;font-size:16px}#elementor-template-library-save-template-name{width:500px;background-color:#fff;font-weight:300;color:#a4afb7;padding-left:25px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;border:none}#elementor-template-library-save-template-submit{width:150px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}#elementor-template-library-save-template-submit:hover{-webkit-box-shadow:none;box-shadow:none}#elementor-template-library-import-form{width:95%;background-color:rgba(255,255,255,.5);padding:60px;border:2px dashed #d5dadf;margin:35px auto;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}#elementor-template-library-import-form:hover{background-color:rgba(255,255,255,.9)}#elementor-template-library-import-form-or{margin-top:15px;font-size:18px}#elementor-template-library-import-form-label{margin-top:20px;padding:15px 35px;display:inline-block}#elementor-template-library-import-form-input{display:none}#elementor-template-library-import-form.elementor-drag-over{border:3px dashed #71d7f7}#elementor-template-library-import .elementor-template-library-blank-icon{margin-top:0}#elementor-template-library-import .elementor-template-library-blank-message{margin-top:20px}.elementor-template-library-blank-footer{position:absolute;bottom:70px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#a4afb7;font-style:italic}@media (max-height:700px){.elementor-template-library-blank-footer{display:none}}#elementor-template-library-footer-banner i{color:#c2cbd2;font-size:56px;margin-top:40px}#elementor-template-library-footer-banner .elementor-excerpt{color:#a4afb7;font-size:15px;font-weight:500;margin:20px 0}#elementor-template-library-templates-empty{width:100%;margin-top:40px}#elementor-template-library-error-dialog .dialog-message{text-align:start}#elementor-template-library-error-info{margin-top:10px}@media (max-width:1439px){.elementor-template-library-blank-message{font-size:16px;margin-top:10px}.elementor-template-library-local-column-1{width:33%}.elementor-template-library-local-column-2{width:10%}.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:15%}.elementor-template-library-local-column-5{width:27%}}@media (min-width:1440px){#elementor-template-library-preview iframe{width:1710px}.elementor-template-library-local-column-1{width:25%}.elementor-template-library-local-column-2,.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:17%}.elementor-template-library-local-column-5{width:24%}}@media (max-width:1024px){.elementor-template-library-local-column-3{display:none}.elementor-template-library-local-column-5{width:41%}}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px;z-index:1}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:'>';font-size:8px;padding-right:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3);z-index:1}.elementor-tag-settings-popup:before{content:'';position:absolute;top:-20px;left:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-left:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}#elementor-toast{position:absolute;width:280px;padding:20px;-webkit-border-radius:5px;border-radius:5px;color:#d5dadf;background-color:rgba(0,0,0,.8);z-index:10000}#elementor-toast .dialog-message{font-size:13px}#elementor-toast .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-top:15px}#elementor-toast .dialog-button{color:#fcb92c;margin:0 5px;text-transform:uppercase;cursor:pointer}#elementor-toast .dialog-button:last-child{margin-right:0}.elementor-context-menu{position:absolute;width:200px;background-color:#fff;border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.09);box-shadow:0 2px 10px 0 rgba(0,0,0,.09);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:3}.elementor-context-menu-list__group{padding:5px 0}.elementor-context-menu-list__group:not(:last-child){border-bottom:1px solid #e6e9ec}.elementor-context-menu-list__item{padding:5px 20px 5px 10px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer}.elementor-context-menu-list__item--disabled{cursor:default;color:#d5dadf}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover{background-color:#71d7f7}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover>*{color:#fff}.elementor-context-menu-list__item__icon{width:20px;color:#c2cbd2}.elementor-context-menu-list__item__title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-context-menu-list__item__shortcut{color:#d5dadf}.elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover{background-color:#d72b3f}.elementor-context-menu .eicon-pro-icon{color:#fcb92c}.elementor-right-click-introduction{position:absolute;width:250px;padding:30px 20px;background-color:#fff;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.07);box-shadow:0 2px 10px 0 rgba(0,0,0,.07);text-align:center;-webkit-border-radius:3px;border-radius:3px}.elementor-right-click-introduction:before{content:'';position:absolute;border:solid transparent;border-width:7px 5px;border-bottom-color:#fff;top:-14px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.elementor-right-click-introduction .dialog-header{color:#6d7882;font-size:16px}.elementor-right-click-introduction .dialog-message{font-size:13px;line-height:1.6;margin-top:10px;color:#a4afb7}.elementor-right-click-introduction .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:25px}.elementor-right-click-introduction .dialog-button{font-size:11px}.elementor-right-click-introduction .dialog-ok{padding:7px 27px;text-transform:capitalize}.elementor-right-click-introduction .dialog-learn-more{color:#39b54a;margin-right:15px;cursor:pointer}#elementor-hotkeys{text-align:left}#elementor-hotkeys__content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;overflow:hidden;margin-bottom:30px}#elementor-hotkeys__actions .elementor-hotkeys__list{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}@media (max-width:1024px){#elementor-hotkeys__content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}#elementor-hotkeys__actions .elementor-hotkeys__list{-webkit-border-radius:3px;border-radius:3px}}#elementor-hotkeys__navigation .elementor-hotkeys__list{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}@media (min-width:1025px){#elementor-hotkeys__actions .elementor-hotkeys__header,#elementor-hotkeys__actions .elementor-hotkeys__list{padding-right:25px}#elementor-hotkeys__navigation .elementor-hotkeys__header{padding-left:25px}}@media (min-width:1440px){#elementor-hotkeys__actions .elementor-hotkeys__header,#elementor-hotkeys__actions .elementor-hotkeys__list{padding-right:50px}#elementor-hotkeys__navigation .elementor-hotkeys__header{padding-left:50px}}@media (min-width:1025px){#elementor-hotkeys__navigation .elementor-hotkeys__list{padding-left:15px}}@media (min-width:1440px){#elementor-hotkeys__navigation .elementor-hotkeys__list{padding-left:40px}}.elementor-hotkeys__col{width:50%}.elementor-hotkeys__header,.elementor-hotkeys__list{width:100%}.elementor-hotkeys__header{padding:10px 30px;font-weight:500}@media (max-width:479px){.elementor-hotkeys__header{padding-right:10px;padding-left:10px}}.elementor-hotkeys__list{background-color:#fff;height:calc(100% - 42px);padding:10px 20px}@media (max-width:479px){.elementor-hotkeys__list{padding:0}}@media (max-width:1024px){#elementor-hotkeys__navigation .elementor-hotkeys__list{-webkit-border-radius:3px;border-radius:3px}.elementor-hotkeys__col{width:100%}.elementor-hotkeys__list{margin-bottom:30px;height:auto}}.elementor-hotkeys__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:20px 10px;border-bottom:1px solid #eceeef}.elementor-hotkeys__item:last-child{margin-bottom:30px}.elementor-hotkeys__item--label{font-size:13px;font-weight:400;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-hotkeys__item--shortcut{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-hotkeys__item--shortcut span{position:relative;background-color:#eceeef;padding:5px 12px;margin-right:27px;-webkit-border-radius:3px;border-radius:3px}.elementor-hotkeys__item--shortcut span:after{content:'+';position:absolute;right:-18px;width:9px;text-align:center}@media (max-width:479px){.elementor-hotkeys__item:last-child{margin-bottom:0}.elementor-hotkeys__item--shortcut span{padding:4px 9px;margin-right:23px}.elementor-hotkeys__item--shortcut span:after{right:-16px}}.elementor-hotkeys__item--shortcut span:last-child{margin-right:0}.elementor-hotkeys__item--shortcut span:last-child:after{display:none}.ui-resizable-n{top:-5px}.ui-resizable-e{right:-5px}.ui-resizable-s{bottom:-5px}.ui-resizable-w{left:-5px}.ui-resizable-ne{top:-5px;right:-5px}.ui-resizable-nw{top:-5px;left:-5px}.ui-resizable-se{bottom:-5px;right:-5px}.ui-resizable-sw{bottom:-5px;left:-5px}.ui-resizable-n,.ui-resizable-s{left:0;height:10px;width:100%;cursor:ns-resize}.ui-resizable-e,.ui-resizable-w{top:0;height:100%;width:10px;cursor:ew-resize}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{height:15px;width:15px}.ui-resizable-nw,.ui-resizable-se{cursor:nwse-resize}.ui-resizable-ne,.ui-resizable-sw{cursor:nesw-resize}.ui-resizable-handle{position:absolute}.ui-resizable-resizing{pointer-events:none}#elementor-navigator{position:fixed;top:100px;width:240px;height:339px;right:30px;background-color:#fff;-webkit-box-shadow:0 2px 20px 0 rgba(0,0,0,.1);box-shadow:0 2px 20px 0 rgba(0,0,0,.1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;z-index:2;display:none}body.elementor-navigator-docked #elementor-navigator{top:0;right:0;height:100%}body:not(.elementor-navigator-docked) #elementor-navigator{-webkit-border-radius:5px;border-radius:5px}#elementor-navigator__inner{height:100%;background-color:#e6e9ec}#elementor-navigator__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:12px 10px;background-color:#fff;border-bottom:1px solid #e6e9ec;cursor:move}#elementor-navigator__close,#elementor-navigator__toggle-all{-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}#elementor-navigator__close:not(:hover),#elementor-navigator__toggle-all:not(:hover){color:#a4afb7}#elementor-navigator__toggle-all{font-size:13px}#elementor-navigator__close{font-size:11px}#elementor-navigator__elements{height:calc(100% - 49px);overflow:auto;position:relative}.elementor-navigator-docked #elementor-navigator__elements{height:calc(100% - 35px)}#elementor-navigator__footer{position:absolute;width:100%;left:0;bottom:0;text-align:center;background-color:#fff;border-top:1px solid #e6e9ec;color:#a4afb7}.elementor-navigator-docked #elementor-navigator__footer{display:none}.elementor-navigator__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:32px;padding-right:4px;font-size:12px;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-navigator__item>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-navigator__item+.elementor-navigator__elements{display:none}.elementor-navigator__elements .elementor-empty-view{padding:10px;border-bottom:1px solid #e6e9ec}.elementor-navigator__elements .elementor-empty-view__title{margin-left:23px;color:#c2cbd2;font-size:10px;font-style:italic}.elementor-navigator__elements .ui-sortable-helper{background-color:#fff;-webkit-box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);-webkit-transform:rotate(4deg);transform:rotate(4deg);border:1px solid #e6e9ec;pointer-events:none}.elementor-navigator__elements .ui-sortable-placeholder{background-color:#f1f3f5}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view{border-top:2px solid #71d7f7}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view .elementor-empty-view__title,.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view+.ui-sortable-placeholder{display:none}.elementor-navigator__element:not(.elementor-navigator__element--has-children) .elementor-navigator__element__list-toggle{visibility:hidden}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item .elementor-navigator__element__toggle{color:#71d7f7}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item:not(:hover) .elementor-navigator__element__toggle{display:none}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item.elementor-editing{background-color:#71d7f7}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item.elementor-editing>*{color:#fff}.elementor-navigator__element__list-toggle{margin-right:7px;-webkit-transition:-webkit-transform .3s;transition:transform .3s;-o-transition:transform .3s;transition:transform .3s,-webkit-transform .3s;color:#a4afb7}.elementor-navigator__element__element-type{margin-right:8px}.elementor-navigator__element__title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden}.elementor-navigator__element__title__text{white-space:nowrap;-webkit-user-select:text}.elementor-navigator__element__title__text[contenteditable=true]{outline:0;color:#6d7882;background-color:#fff;padding:2px 3px;-webkit-box-shadow:0 0 4px rgba(0,0,0,.2);box-shadow:0 0 4px rgba(0,0,0,.2)}.elementor-navigator__element__title__text:not([contenteditable=true]){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-navigator__element__toggle{text-align:right;font-size:13px;padding:0 5px}.elementor-navigator__element--hidden .elementor-navigator__element__title,.elementor-navigator__element--hidden .elementor-navigator__element__toggle{opacity:.5}.elementor-navigator__element-column{background-color:#fafbfb}.elementor-navigator__element-column>.elementor-navigator__item .elementor-navigator__element__element-type{color:#a4afb7}.elementor-navigator__element-section{background-color:#fff} \ No newline at end of file diff --git a/modules/creativeelements/views/css/frontend-edit.css b/modules/creativeelements/views/css/frontend-edit.css new file mode 100644 index 00000000..6f03a5f7 --- /dev/null +++ b/modules/creativeelements/views/css/frontend-edit.css @@ -0,0 +1,65 @@ +.ce-edit-wrapper { + position: relative; } +a.ce-edit-btn { + display: inline-block; + position: absolute; + top: 2px; + right: 2px; + padding: 0 !important; + width: 25px; + height: 25px; + line-height: 25px; + font-size: 13px; + background: #D30C5C; + text-align: center; + border-radius: 3px; + box-sizing: border-box; + z-index: 101; + transition: 0.3s opacity; + opacity: 0; } +.ce-edit-wrapper:hover a.ce-edit-btn { + opacity: 0.5; } +.ce-edit-wrapper a.ce-edit-btn:hover { + opacity: 1; } +a.ce-edit-btn:link, +a.ce-edit-btn:hover, +a.ce-edit-btn:active, +a.ce-edit-btn:visited { + color: #fff !important; } +i.ce-icon { + position: relative; + display: inline-block; + height: 10px; + width: 10px; } +i.ce-icon:before, +i.ce-icon:after { + content: ''; + position: absolute; + margin: 0; + left: 1px; + top: 0; + width: 8px; + height: 6px; + border-width: 2px 0; + border-style: solid; + border-color: inherit; + box-sizing: content-box; } +i.ce-icon:after { + top: 4px; + width: 6px; + height: 0; + border-width: 2px 0 0; } +.ce-edit-outline { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 100; + outline: 1px dashed #D30C5C; + box-shadow: 0 0 0 1px #fff; + pointer-events: none; + transition: 0.3s opacity; + opacity: 0; } +.ce-edit-btn:hover + .ce-edit-outline { + opacity: 1; } \ No newline at end of file diff --git a/modules/creativeelements/views/css/frontend-msie.css b/modules/creativeelements/views/css/frontend-msie.css new file mode 100644 index 00000000..baee54ee --- /dev/null +++ b/modules/creativeelements/views/css/frontend-msie.css @@ -0,0 +1,95 @@ +.elementor-msie .elementor-grid { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .elementor-msie .elementor-grid .elementor-grid-item { + word-break: break-word; } + +.elementor-msie .elementor-grid-1 .elementor-grid-item { + width: 100%; } + +.elementor-msie .elementor-grid-2 .elementor-grid-item { + width: 50%; } + +.elementor-msie .elementor-grid-3 .elementor-grid-item { + width: 33.3333333333%; } + +.elementor-msie .elementor-grid-4 .elementor-grid-item { + width: 25%; } + +.elementor-msie .elementor-grid-5 .elementor-grid-item { + width: 20%; } + +.elementor-msie .elementor-grid-6 .elementor-grid-item { + width: 16.6666666667%; } + +.elementor-msie .elementor-grid-7 .elementor-grid-item { + width: 14.2857142857%; } + +.elementor-msie .elementor-grid-8 .elementor-grid-item { + width: 12.5%; } + +.elementor-msie .elementor-grid-9 .elementor-grid-item { + width: 11.1111111111%; } + +.elementor-msie .elementor-grid-10 .elementor-grid-item { + width: 10%; } + +.elementor-msie .elementor-grid-11 .elementor-grid-item { + width: 9.0909090909%; } + +.elementor-msie .elementor-grid-12 .elementor-grid-item { + width: 8.3333333333%; } + +@media (max-width: 1024px) { + .elementor-msie .elementor-grid-tablet-1 .elementor-grid-item { + width: 100%; } + .elementor-msie .elementor-grid-tablet-2 .elementor-grid-item { + width: 50%; } + .elementor-msie .elementor-grid-tablet-3 .elementor-grid-item { + width: 33.3333333333%; } + .elementor-msie .elementor-grid-tablet-4 .elementor-grid-item { + width: 25%; } + .elementor-msie .elementor-grid-tablet-5 .elementor-grid-item { + width: 20%; } + .elementor-msie .elementor-grid-tablet-6 .elementor-grid-item { + width: 16.6666666667%; } + .elementor-msie .elementor-grid-tablet-7 .elementor-grid-item { + width: 14.2857142857%; } + .elementor-msie .elementor-grid-tablet-8 .elementor-grid-item { + width: 12.5%; } + .elementor-msie .elementor-grid-tablet-9 .elementor-grid-item { + width: 11.1111111111%; } + .elementor-msie .elementor-grid-tablet-10 .elementor-grid-item { + width: 10%; } + .elementor-msie .elementor-grid-tablet-11 .elementor-grid-item { + width: 9.0909090909%; } + .elementor-msie .elementor-grid-tablet-12 .elementor-grid-item { + width: 8.3333333333%; } } + +@media (max-width: 767px) { + .elementor-msie .elementor-grid-mobile-1 .elementor-grid-item { + width: 100%; } + .elementor-msie .elementor-grid-mobile-2 .elementor-grid-item { + width: 50%; } + .elementor-msie .elementor-grid-mobile-3 .elementor-grid-item { + width: 33.3333333333%; } + .elementor-msie .elementor-grid-mobile-4 .elementor-grid-item { + width: 25%; } + .elementor-msie .elementor-grid-mobile-5 .elementor-grid-item { + width: 20%; } + .elementor-msie .elementor-grid-mobile-6 .elementor-grid-item { + width: 16.6666666667%; } + .elementor-msie .elementor-grid-mobile-7 .elementor-grid-item { + width: 14.2857142857%; } + .elementor-msie .elementor-grid-mobile-8 .elementor-grid-item { + width: 12.5%; } + .elementor-msie .elementor-grid-mobile-9 .elementor-grid-item { + width: 11.1111111111%; } + .elementor-msie .elementor-grid-mobile-10 .elementor-grid-item { + width: 10%; } + .elementor-msie .elementor-grid-mobile-11 .elementor-grid-item { + width: 9.0909090909%; } + .elementor-msie .elementor-grid-mobile-12 .elementor-grid-item { + width: 8.3333333333%; } } diff --git a/modules/creativeelements/views/css/frontend-msie.min.css b/modules/creativeelements/views/css/frontend-msie.min.css new file mode 100644 index 00000000..d9f45a0d --- /dev/null +++ b/modules/creativeelements/views/css/frontend-msie.min.css @@ -0,0 +1 @@ +.elementor-msie .elementor-grid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-msie .elementor-grid .elementor-grid-item{word-break:break-word}.elementor-msie .elementor-grid-1 .elementor-grid-item{width:100%}.elementor-msie .elementor-grid-2 .elementor-grid-item{width:50%}.elementor-msie .elementor-grid-3 .elementor-grid-item{width:33.3333333333%}.elementor-msie .elementor-grid-4 .elementor-grid-item{width:25%}.elementor-msie .elementor-grid-5 .elementor-grid-item{width:20%}.elementor-msie .elementor-grid-6 .elementor-grid-item{width:16.6666666667%}.elementor-msie .elementor-grid-7 .elementor-grid-item{width:14.2857142857%}.elementor-msie .elementor-grid-8 .elementor-grid-item{width:12.5%}.elementor-msie .elementor-grid-9 .elementor-grid-item{width:11.1111111111%}.elementor-msie .elementor-grid-10 .elementor-grid-item{width:10%}.elementor-msie .elementor-grid-11 .elementor-grid-item{width:9.0909090909%}.elementor-msie .elementor-grid-12 .elementor-grid-item{width:8.3333333333%}@media (max-width:1024px){.elementor-msie .elementor-grid-tablet-1 .elementor-grid-item{width:100%}.elementor-msie .elementor-grid-tablet-2 .elementor-grid-item{width:50%}.elementor-msie .elementor-grid-tablet-3 .elementor-grid-item{width:33.3333333333%}.elementor-msie .elementor-grid-tablet-4 .elementor-grid-item{width:25%}.elementor-msie .elementor-grid-tablet-5 .elementor-grid-item{width:20%}.elementor-msie .elementor-grid-tablet-6 .elementor-grid-item{width:16.6666666667%}.elementor-msie .elementor-grid-tablet-7 .elementor-grid-item{width:14.2857142857%}.elementor-msie .elementor-grid-tablet-8 .elementor-grid-item{width:12.5%}.elementor-msie .elementor-grid-tablet-9 .elementor-grid-item{width:11.1111111111%}.elementor-msie .elementor-grid-tablet-10 .elementor-grid-item{width:10%}.elementor-msie .elementor-grid-tablet-11 .elementor-grid-item{width:9.0909090909%}.elementor-msie .elementor-grid-tablet-12 .elementor-grid-item{width:8.3333333333%}}@media (max-width:767px){.elementor-msie .elementor-grid-mobile-1 .elementor-grid-item{width:100%}.elementor-msie .elementor-grid-mobile-2 .elementor-grid-item{width:50%}.elementor-msie .elementor-grid-mobile-3 .elementor-grid-item{width:33.3333333333%}.elementor-msie .elementor-grid-mobile-4 .elementor-grid-item{width:25%}.elementor-msie .elementor-grid-mobile-5 .elementor-grid-item{width:20%}.elementor-msie .elementor-grid-mobile-6 .elementor-grid-item{width:16.6666666667%}.elementor-msie .elementor-grid-mobile-7 .elementor-grid-item{width:14.2857142857%}.elementor-msie .elementor-grid-mobile-8 .elementor-grid-item{width:12.5%}.elementor-msie .elementor-grid-mobile-9 .elementor-grid-item{width:11.1111111111%}.elementor-msie .elementor-grid-mobile-10 .elementor-grid-item{width:10%}.elementor-msie .elementor-grid-mobile-11 .elementor-grid-item{width:9.0909090909%}.elementor-msie .elementor-grid-mobile-12 .elementor-grid-item{width:8.3333333333%}} \ No newline at end of file diff --git a/modules/creativeelements/views/css/frontend-rtl.css b/modules/creativeelements/views/css/frontend-rtl.css new file mode 100644 index 00000000..7209810e --- /dev/null +++ b/modules/creativeelements/views/css/frontend-rtl.css @@ -0,0 +1,5524 @@ +.dialog-widget-content { + background-color: #fff; + position: absolute; + border-radius: 3px; + box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); + overflow: hidden; } + +.dialog-message { + font-size: 12px; + line-height: 1.5; + box-sizing: border-box; } + +.dialog-type-lightbox { + position: fixed; + height: 100%; + width: 100%; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.8); + z-index: 9999; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .dialog-type-lightbox .dialog-widget-content { + margin: auto; + width: 375px; } + .dialog-type-lightbox .dialog-header { + font-size: 15px; + color: #495157; + padding: 30px 0 10px; + font-weight: 500; } + .dialog-type-lightbox .dialog-message { + padding: 0 30px 30px; + min-height: 50px; } + .dialog-type-lightbox:not(.elementor-popup-modal) .dialog-header, + .dialog-type-lightbox:not(.elementor-popup-modal) .dialog-message { + text-align: center; } + .dialog-type-lightbox .dialog-buttons-wrapper { + border-top: 1px solid #e6e9ec; + text-align: center; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button { + font-family: Roboto; + width: 50%; + border: none; + background: none; + font-size: 15px; + cursor: pointer; + padding: 13px 0; + outline: 0; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:first-child { + color: #6d7882; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:hover { + background-color: #f4f6f7; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-ok { + color: #b01b1b; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-take_over { + color: #39b54a; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:active { + background-color: rgba(230, 233, 236, 0.5); } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button::-moz-focus-inner { + border: 0; } + +.dialog-close-button { + cursor: pointer; + position: absolute; + top: 30px; + left: 30px; + font-size: 15px; + line-height: 1; } + .dialog-close-button:not(:hover) { + opacity: .4; } + +.dialog-alert-widget .dialog-buttons-wrapper > button { + width: 100%; } + +.dialog-confirm-widget .dialog-button:first-child { + border-left: 1px solid #e6e9ec; } + +.dialog-prevent-scroll { + overflow: hidden; + max-height: 100vh; } + +@media (max-width: 767px) { + .dialog-close-button { + top: 15px; + right: 15px; } + body.admin-bar .dialog-close-button { + top: 40px; } } + +.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio { + padding-bottom: 42.8571%; } + +.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio { + padding-bottom: 56.25%; } + +.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio { + padding-bottom: 75%; } + +.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio { + padding-bottom: 66.6666%; } + +.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio { + padding-bottom: 100%; } + +.elementor-aspect-ratio-916 .elementor-fit-aspect-ratio { + padding-bottom: 177.8%; } + +.elementor-fit-aspect-ratio { + position: relative; + height: 0; } + .elementor-fit-aspect-ratio iframe { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + border: 0; + background-color: #000; } + .elementor-fit-aspect-ratio video { + width: 100%; } + +.flatpickr-calendar { + width: 280px; } + .flatpickr-calendar .flatpickr-current-month span.cur-month { + font-weight: 300; } + .flatpickr-calendar .dayContainer { + width: 280px; + min-width: 280px; + max-width: 280px; } + .flatpickr-calendar .flatpickr-days { + width: 280px; } + .flatpickr-calendar .flatpickr-day { + max-width: 37px; + height: 37px; + line-height: 37px; } + +.elementor-templates-modal .dialog-widget-content { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + background-color: #f1f3f5; + width: 100%; } + @media (max-width: 1439px) { + .elementor-templates-modal .dialog-widget-content { + max-width: 990px; } } + @media (min-width: 1440px) { + .elementor-templates-modal .dialog-widget-content { + max-width: 1200px; } } + +.elementor-templates-modal .dialog-header { + padding: 0; + background-color: #fff; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + position: relative; + z-index: 1; } + +.elementor-templates-modal .dialog-buttons-wrapper { + display: none; } + +.elementor-templates-modal .dialog-message { + height: 750px; + max-height: 85vh; + overflow: auto; + padding-top: 25px; } + +.elementor-templates-modal .dialog-content { + height: 100%; } + +.elementor-templates-modal .dialog-loading { + display: none; } + +.elementor-templates-modal__header { + display: flex; + align-items: center; + justify-content: space-between; + height: 50px; } + .elementor-templates-modal__header__logo { + line-height: 1; + text-transform: uppercase; + font-weight: bold; + cursor: pointer; } + .elementor-templates-modal__header__logo-area { + text-align: right; + padding-right: 15px; } + .elementor-templates-modal__header__logo-area > * { + display: flex; + align-items: center; } + .elementor-templates-modal__header__logo__icon-wrapper { + padding: 4px 7px 6px; + background-image: linear-gradient(-135deg, #f2295b, #434363); + border-radius: 2px; + margin-left: 10px; } + .elementor-templates-modal__header__logo__title { + padding-top: 2px; } + .elementor-templates-modal__header__logo i { + color: #fff; + font-size: 10px; } + .elementor-templates-modal__header__items-area { + display: flex; + flex-direction: row-reverse; } + .elementor-templates-modal__header__item { + position: relative; + display: flex; + align-items: center; + justify-content: center; + box-sizing: content-box; } + .elementor-templates-modal__header__item > i { + font-size: 20px; + transition: color .5s; + cursor: pointer; } + .elementor-templates-modal__header__item > i:not(:hover) { + color: #a4afb7; } + .elementor-templates-modal__header__close--normal { + width: 45px; + border-right: 1px solid #e6e9ec; } + .elementor-templates-modal__header__close--normal i { + font-size: 18px; } + .elementor-templates-modal__header__close--skip { + padding: 10px; + padding-right: 20px; + margin-left: 10px; + color: #fff; + background-color: #a4afb7; + font-size: 11px; + font-weight: normal; + line-height: 1; + text-transform: uppercase; + border-radius: 2px; + cursor: pointer; } + .elementor-templates-modal__header__close--skip > i { + font-size: inherit; + padding-right: 10px; + margin-right: 15px; + border-right: 1px solid; } + .elementor-templates-modal__header__close--skip > i:not(:hover) { + color: #fff; } + +.elementor-hidden { + display: none; } + +.elementor-screen-only, +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + position: absolute; + top: -10000em; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; } + +.elementor-clearfix:after { + content: ''; + display: block; + clear: both; + width: 0; + height: 0; } + +.elementor { + -webkit-hyphens: manual; + -ms-hyphens: manual; + hyphens: manual; } + .elementor *, .elementor *:before, .elementor *:after { + box-sizing: border-box; } + .elementor a { + box-shadow: none; + text-decoration: none; } + .elementor hr { + margin: 0; + background-color: transparent; } + .elementor img { + height: auto; + max-width: 100%; + border: none; + border-radius: 0; + box-shadow: none; } + .elementor .elementor-widget:not(.elementor-widget-text-editor) figure { + margin: 0; } + .elementor embed, + .elementor iframe, + .elementor object, + .elementor video { + max-width: 100%; + width: 100%; + margin: 0; + line-height: 1; + border: none; } + .elementor .elementor-custom-embed { + line-height: 0; } + .elementor .elementor-background-video-container, + .elementor .elementor-background-holder, + .elementor .elementor-background { + height: 100%; + width: 100%; + top: 0; + left: 0; + position: absolute; + overflow: hidden; + z-index: 0; } + .elementor .elementor-background-video-container { + transition: opacity 1s; + pointer-events: none; } + .elementor .elementor-background-video-container.elementor-loading { + opacity: 0; } + .elementor .elementor-background-video-embed { + max-width: none; } + .elementor .elementor-background-video-embed, .elementor .elementor-background-video-hosted { + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); } + .elementor .elementor-background-video { + position: absolute; + max-width: none; + top: 50%; + left: 50%; + transform: translateY(-50%) translateX(-50%); } + .elementor .elementor-html5-video { + object-fit: cover; } + .elementor .elementor-background-overlay { + height: 100%; + width: 100%; + top: 0; + left: 0; + position: absolute; } + +.elementor-widget-wrap > .elementor-element.elementor-absolute { + position: absolute; } + +.elementor-widget-wrap > .elementor-element.elementor-fixed { + position: fixed; } + +.elementor-widget-wrap .elementor-element.elementor-widget__width-auto, +.elementor-widget-wrap .elementor-element.elementor-widget__width-initial, +.elementor-widget-wrap .elementor-element.elementor-widget__width-calc { + max-width: 100%; } + +@media (max-width: 1024px) { + .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-auto, + .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-initial, + .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-calc { + max-width: 100%; } } + +@media (max-width: 767px) { + .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-auto, + .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-initial, + .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-calc { + max-width: 100%; } } + +.elementor-element.elementor-absolute, .elementor-element.elementor-fixed { + z-index: 1; } + +.elementor-invisible { + visibility: hidden; } + +.elementor-align-center { + text-align: center; } + .elementor-align-center .elementor-button { + width: auto; } + +.elementor-align-right { + text-align: right; } + .elementor-align-right .elementor-button { + width: auto; } + +.elementor-align-left { + text-align: left; } + .elementor-align-left .elementor-button { + width: auto; } + +.elementor-align-justify .elementor-button { + width: 100%; } + +.elementor-custom-embed-play { + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); } + .elementor-custom-embed-play i { + font-size: 100px; + color: #fff; + opacity: 0.8; + text-shadow: 1px 0 6px rgba(0, 0, 0, 0.3); + transition: all .5s; } + .elementor-custom-embed-play.elementor-playing i { + font-family: 'FontAwesome'; + animation: fa-spin 2s infinite linear; } + .elementor-custom-embed-play.elementor-playing i:before { + content: "\f1ce"; } + +.elementor-swiper-button { + position: absolute; + display: inline-flex; + z-index: 1; + cursor: pointer; + font-size: 32px; + color: rgba(238, 238, 238, 0.9); + top: 50%; + transform: translateY(-50%); } + .elementor-swiper-button.swiper-button-disabled { + opacity: 0.3; } + +.elementor-tag { + display: inline-flex; } + +@media (max-width: 1024px) { + .elementor-tablet-align-center { + text-align: center; } + .elementor-tablet-align-center .elementor-button { + width: auto; } + .elementor-tablet-align-right { + text-align: right; } + .elementor-tablet-align-right .elementor-button { + width: auto; } + .elementor-tablet-align-left { + text-align: left; } + .elementor-tablet-align-left .elementor-button { + width: auto; } + .elementor-tablet-align-justify .elementor-button { + width: 100%; } } + +@media (max-width: 767px) { + .elementor-mobile-align-center { + text-align: center; } + .elementor-mobile-align-center .elementor-button { + width: auto; } + .elementor-mobile-align-right { + text-align: right; } + .elementor-mobile-align-right .elementor-button { + width: auto; } + .elementor-mobile-align-left { + text-align: left; } + .elementor-mobile-align-left .elementor-button { + width: auto; } + .elementor-mobile-align-justify .elementor-button { + width: 100%; } } + +.elementor-section { + position: relative; } + .elementor-section .elementor-container { + display: flex; + margin-right: auto; + margin-left: auto; + position: relative; } + .elementor-section.elementor-section-boxed > .elementor-container { + max-width: 1140px; } + .elementor-section.elementor-section-stretched { + position: relative; + width: 100%; } + .elementor-section.elementor-section-items-top > .elementor-container { + align-items: flex-start; } + .elementor-section.elementor-section-items-middle > .elementor-container { + align-items: center; } + .elementor-section.elementor-section-items-bottom > .elementor-container { + align-items: flex-end; } + @media (min-width: 768px) { + .elementor-section.elementor-section-height-full { + height: 100vh; } + .elementor-section.elementor-section-height-full > .elementor-container { + height: 100%; } } + +.elementor-section-content-top > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap { + align-items: flex-start; } + +.elementor-section-content-middle > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap { + align-items: center; } + +.elementor-section-content-bottom > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap { + align-items: flex-end; } + +.elementor-row { + width: 100%; + display: flex; } + @media (max-width: 1024px) { + .elementor-row { + flex-wrap: wrap; } } + +.elementor-column-wrap { + width: 100%; + position: relative; + display: flex; } + +.elementor-widget-wrap { + position: relative; + width: 100%; + flex-wrap: wrap; + align-content: flex-start; } + .elementor-html .elementor-widget-wrap, + .elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap { + display: flex; } + .elementor-widget-wrap > .elementor-element { + width: 100%; } + +.elementor-widget { + position: relative; } + .elementor-widget:not(:last-child) { + margin-bottom: 20px; } + .elementor-widget:not(:last-child).elementor-widget__width-auto, + .elementor-widget:not(:last-child).elementor-widget__width-initial, + .elementor-widget:not(:last-child).elementor-widget__width-calc, + .elementor-widget:not(:last-child).elementor-absolute { + margin-bottom: 0; } + +.elementor-column { + position: relative; + min-height: 1px; + display: flex; } + +.elementor-column-gap-narrow > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 5px; } + +.elementor-column-gap-default > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 10px; } + +.elementor-column-gap-extended > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 15px; } + +.elementor-column-gap-wide > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 20px; } + +.elementor-column-gap-wider > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 30px; } + +.elementor-inner-section .elementor-column-gap-no .elementor-element-populated { + padding: 0; } + +@media (min-width: 768px) { + .elementor-column.elementor-col-10, .elementor-column[data-col="10"] { + width: 10%; } + .elementor-column.elementor-col-11, .elementor-column[data-col="11"] { + width: 11.111%; } + .elementor-column.elementor-col-12, .elementor-column[data-col="12"] { + width: 12.5%; } + .elementor-column.elementor-col-14, .elementor-column[data-col="14"] { + width: 14.285%; } + .elementor-column.elementor-col-16, .elementor-column[data-col="16"] { + width: 16.666%; } + .elementor-column.elementor-col-20, .elementor-column[data-col="20"] { + width: 20%; } + .elementor-column.elementor-col-25, .elementor-column[data-col="25"] { + width: 25%; } + .elementor-column.elementor-col-30, .elementor-column[data-col="30"] { + width: 30%; } + .elementor-column.elementor-col-33, .elementor-column[data-col="33"] { + width: 33.333%; } + .elementor-column.elementor-col-40, .elementor-column[data-col="40"] { + width: 40%; } + .elementor-column.elementor-col-50, .elementor-column[data-col="50"] { + width: 50%; } + .elementor-column.elementor-col-60, .elementor-column[data-col="60"] { + width: 60%; } + .elementor-column.elementor-col-66, .elementor-column[data-col="66"] { + width: 66.666%; } + .elementor-column.elementor-col-70, .elementor-column[data-col="70"] { + width: 70%; } + .elementor-column.elementor-col-75, .elementor-column[data-col="75"] { + width: 75%; } + .elementor-column.elementor-col-80, .elementor-column[data-col="80"] { + width: 80%; } + .elementor-column.elementor-col-83, .elementor-column[data-col="83"] { + width: 83.333%; } + .elementor-column.elementor-col-90, .elementor-column[data-col="90"] { + width: 90%; } + .elementor-column.elementor-col-100, .elementor-column[data-col="100"] { + width: 100%; } } + +@media (max-width: 479px) { + .elementor-column.elementor-xs-10 { + width: 10%; } + .elementor-column.elementor-xs-11 { + width: 11.111%; } + .elementor-column.elementor-xs-12 { + width: 12.5%; } + .elementor-column.elementor-xs-14 { + width: 14.285%; } + .elementor-column.elementor-xs-16 { + width: 16.666%; } + .elementor-column.elementor-xs-20 { + width: 20%; } + .elementor-column.elementor-xs-25 { + width: 25%; } + .elementor-column.elementor-xs-30 { + width: 30%; } + .elementor-column.elementor-xs-33 { + width: 33.333%; } + .elementor-column.elementor-xs-40 { + width: 40%; } + .elementor-column.elementor-xs-50 { + width: 50%; } + .elementor-column.elementor-xs-60 { + width: 60%; } + .elementor-column.elementor-xs-66 { + width: 66.666%; } + .elementor-column.elementor-xs-70 { + width: 70%; } + .elementor-column.elementor-xs-75 { + width: 75%; } + .elementor-column.elementor-xs-80 { + width: 80%; } + .elementor-column.elementor-xs-83 { + width: 83.333%; } + .elementor-column.elementor-xs-90 { + width: 90%; } + .elementor-column.elementor-xs-100 { + width: 100%; } } + +@media (max-width: 767px) { + .elementor-column.elementor-sm-10 { + width: 10%; } + .elementor-column.elementor-sm-11 { + width: 11.111%; } + .elementor-column.elementor-sm-12 { + width: 12.5%; } + .elementor-column.elementor-sm-14 { + width: 14.285%; } + .elementor-column.elementor-sm-16 { + width: 16.666%; } + .elementor-column.elementor-sm-20 { + width: 20%; } + .elementor-column.elementor-sm-25 { + width: 25%; } + .elementor-column.elementor-sm-30 { + width: 30%; } + .elementor-column.elementor-sm-33 { + width: 33.333%; } + .elementor-column.elementor-sm-40 { + width: 40%; } + .elementor-column.elementor-sm-50 { + width: 50%; } + .elementor-column.elementor-sm-60 { + width: 60%; } + .elementor-column.elementor-sm-66 { + width: 66.666%; } + .elementor-column.elementor-sm-70 { + width: 70%; } + .elementor-column.elementor-sm-75 { + width: 75%; } + .elementor-column.elementor-sm-80 { + width: 80%; } + .elementor-column.elementor-sm-83 { + width: 83.333%; } + .elementor-column.elementor-sm-90 { + width: 90%; } + .elementor-column.elementor-sm-100 { + width: 100%; } } + +@media (min-width: 768px) and (max-width: 1024px) { + .elementor-column.elementor-md-10 { + width: 10%; } + .elementor-column.elementor-md-11 { + width: 11.111%; } + .elementor-column.elementor-md-12 { + width: 12.5%; } + .elementor-column.elementor-md-14 { + width: 14.285%; } + .elementor-column.elementor-md-16 { + width: 16.666%; } + .elementor-column.elementor-md-20 { + width: 20%; } + .elementor-column.elementor-md-25 { + width: 25%; } + .elementor-column.elementor-md-30 { + width: 30%; } + .elementor-column.elementor-md-33 { + width: 33.333%; } + .elementor-column.elementor-md-40 { + width: 40%; } + .elementor-column.elementor-md-50 { + width: 50%; } + .elementor-column.elementor-md-60 { + width: 60%; } + .elementor-column.elementor-md-66 { + width: 66.666%; } + .elementor-column.elementor-md-70 { + width: 70%; } + .elementor-column.elementor-md-75 { + width: 75%; } + .elementor-column.elementor-md-80 { + width: 80%; } + .elementor-column.elementor-md-83 { + width: 83.333%; } + .elementor-column.elementor-md-90 { + width: 90%; } + .elementor-column.elementor-md-100 { + width: 100%; } } + +@media (min-width: 768px) and (max-width: 1024px) { + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(1) { + order: 10; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(2) { + order: 9; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(3) { + order: 8; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(4) { + order: 7; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(5) { + order: 6; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(6) { + order: 5; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(7) { + order: 4; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(8) { + order: 3; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(9) { + order: 2; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(10) { + order: 1; } } + +@media (max-width: 767px) { + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(1) { + order: 10; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(2) { + order: 9; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(3) { + order: 8; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(4) { + order: 7; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(5) { + order: 6; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(6) { + order: 5; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(7) { + order: 4; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(8) { + order: 3; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(9) { + order: 2; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(10) { + order: 1; } + .elementor-column { + width: 100%; } } + +.elementor-section-tabbed > .elementor-container, +.elementor-section-tabbed > .elementor-container > .elementor-row { + flex-wrap: wrap; } +.elementor-nav-tabs.elementor-nav--layout-horizontal { + width: 100%; } +.elementor-nav-tabs + .elementor-row > .elementor-column { + min-width: 100%; } + .elementor-nav-tabs + .elementor-row > .elementor-column:not(.elementor-active) { + position: absolute; + top: -1000000px; + visibility: hidden; + pointer-events: none; } +.elementor-nav-tabs > .elementor-nav { + overflow: hidden; } + .elementor-nav-tabs > .elementor-nav::-webkit-scrollbar { + display: none; } +.elementor-section-tabbed { + counter-reset: ce-tab; } +.elementor-section-tabbed li.menu-item-type-column { + counter-increment: ce-tab; } +.elementor-section-tabbed .ce-tab-num::after { + content: "Tab #" counter(ce-tab); } + +ul.elementor-icon-list-items.elementor-inline-items { + display: flex; + flex-wrap: wrap; } + ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item { + word-break: break-word; } + +.elementor-grid .elementor-grid-item { + word-break: break-word; + min-width: 0; } + +.elementor-grid-0 .elementor-grid { + display: flex; + overflow: hidden; + flex-wrap: wrap; } + +.elementor-grid-1 .elementor-grid { + grid-template-columns: repeat(1, 1fr); + display: grid; } + +.elementor-grid-2 .elementor-grid { + grid-template-columns: repeat(2, 1fr); + display: grid; } + +.elementor-grid-3 .elementor-grid { + grid-template-columns: repeat(3, 1fr); + display: grid; } + +.elementor-grid-4 .elementor-grid { + grid-template-columns: repeat(4, 1fr); + display: grid; } + +.elementor-grid-5 .elementor-grid { + grid-template-columns: repeat(5, 1fr); + display: grid; } + +.elementor-grid-6 .elementor-grid { + grid-template-columns: repeat(6, 1fr); + display: grid; } + +.elementor-grid-7 .elementor-grid { + grid-template-columns: repeat(7, 1fr); + display: grid; } + +.elementor-grid-8 .elementor-grid { + grid-template-columns: repeat(8, 1fr); + display: grid; } + +.elementor-grid-9 .elementor-grid { + grid-template-columns: repeat(9, 1fr); + display: grid; } + +.elementor-grid-10 .elementor-grid { + grid-template-columns: repeat(10, 1fr); + display: grid; } + +.elementor-grid-11 .elementor-grid { + grid-template-columns: repeat(11, 1fr); + display: grid; } + +.elementor-grid-12 .elementor-grid { + grid-template-columns: repeat(12, 1fr); + display: grid; } + +@media (max-width: 1024px) { + .elementor-grid-tablet-0 .elementor-grid { + display: flex; + overflow: hidden; + flex-wrap: wrap; } + .elementor-grid-tablet-1 .elementor-grid { + grid-template-columns: repeat(1, 1fr); + display: grid; } + .elementor-grid-tablet-2 .elementor-grid { + grid-template-columns: repeat(2, 1fr); + display: grid; } + .elementor-grid-tablet-3 .elementor-grid { + grid-template-columns: repeat(3, 1fr); + display: grid; } + .elementor-grid-tablet-4 .elementor-grid { + grid-template-columns: repeat(4, 1fr); + display: grid; } + .elementor-grid-tablet-5 .elementor-grid { + grid-template-columns: repeat(5, 1fr); + display: grid; } + .elementor-grid-tablet-6 .elementor-grid { + grid-template-columns: repeat(6, 1fr); + display: grid; } + .elementor-grid-tablet-7 .elementor-grid { + grid-template-columns: repeat(7, 1fr); + display: grid; } + .elementor-grid-tablet-8 .elementor-grid { + grid-template-columns: repeat(8, 1fr); + display: grid; } + .elementor-grid-tablet-9 .elementor-grid { + grid-template-columns: repeat(9, 1fr); + display: grid; } + .elementor-grid-tablet-10 .elementor-grid { + grid-template-columns: repeat(10, 1fr); + display: grid; } + .elementor-grid-tablet-11 .elementor-grid { + grid-template-columns: repeat(11, 1fr); + display: grid; } + .elementor-grid-tablet-12 .elementor-grid { + grid-template-columns: repeat(12, 1fr); + display: grid; } } + +@media (max-width: 767px) { + .elementor-grid-mobile-0 .elementor-grid { + display: flex; + overflow: hidden; + flex-wrap: wrap; } + .elementor-grid-mobile-1 .elementor-grid { + grid-template-columns: repeat(1, 1fr); + display: grid; } + .elementor-grid-mobile-2 .elementor-grid { + grid-template-columns: repeat(2, 1fr); + display: grid; } + .elementor-grid-mobile-3 .elementor-grid { + grid-template-columns: repeat(3, 1fr); + display: grid; } + .elementor-grid-mobile-4 .elementor-grid { + grid-template-columns: repeat(4, 1fr); + display: grid; } + .elementor-grid-mobile-5 .elementor-grid { + grid-template-columns: repeat(5, 1fr); + display: grid; } + .elementor-grid-mobile-6 .elementor-grid { + grid-template-columns: repeat(6, 1fr); + display: grid; } + .elementor-grid-mobile-7 .elementor-grid { + grid-template-columns: repeat(7, 1fr); + display: grid; } + .elementor-grid-mobile-8 .elementor-grid { + grid-template-columns: repeat(8, 1fr); + display: grid; } + .elementor-grid-mobile-9 .elementor-grid { + grid-template-columns: repeat(9, 1fr); + display: grid; } + .elementor-grid-mobile-10 .elementor-grid { + grid-template-columns: repeat(10, 1fr); + display: grid; } + .elementor-grid-mobile-11 .elementor-grid { + grid-template-columns: repeat(11, 1fr); + display: grid; } + .elementor-grid-mobile-12 .elementor-grid { + grid-template-columns: repeat(12, 1fr); + display: grid; } } + +@media (min-width: 1025px) { + #elementor-device-mode:after { + content: 'desktop'; } } + +@media (min-width: 768px) and (max-width: 1024px) { + #elementor-device-mode:after { + content: 'tablet'; } } + +@media (max-width: 767px) { + #elementor-device-mode:after { + content: 'mobile'; } } + +.elementor-form-fields-wrapper { + display: flex; + flex-wrap: wrap; } + .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > textarea, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > .elementor-select-wrapper, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group .elementor-field-subgroup { + flex-basis: 100%; + max-width: 100%; } + .elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group .elementor-select-wrapper { + flex-grow: 1; } + +.elementor-field-group { + flex-wrap: wrap; + align-items: center; } + .elementor-field-group.elementor-field-type-submit { + align-items: flex-end; } + .elementor-field-group .elementor-field-textual { + width: 100%; + max-width: 100%; + border: 1px solid #818a91; + background-color: transparent; + color: #373a3c; + vertical-align: middle; + flex-grow: 1; } + .elementor-field-group .elementor-field-textual:focus { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset; + outline: 0; } + .elementor-field-group .elementor-field-textual::-webkit-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-field-textual:-ms-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-field-textual:-moz-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-field-textual::-ms-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-field-textual::placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-select-wrapper { + display: flex; + position: relative; + width: 100%; } + .elementor-field-group .elementor-select-wrapper select { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + color: inherit; + font-size: inherit; + font-family: inherit; + font-weight: inherit; + font-style: inherit; + text-transform: inherit; + letter-spacing: inherit; + line-height: inherit; + flex-basis: 100%; + padding-left: 20px; } + .elementor-field-group .elementor-select-wrapper:before { + content: '\f0d7'; + font-family: 'FontAwesome'; + font-size: 15px; + position: absolute; + top: 50%; + transform: translateY(-50%); + left: 10px; + pointer-events: none; } + .elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before { + content: ''; } + +.elementor-field-subgroup { + display: flex; + flex-wrap: wrap; } + .elementor-field-subgroup .elementor-field-option label { + display: inline-block; } + .elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option { + padding-left: 10px; } + .elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option { + flex-basis: 100%; } + +.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option input, +.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option label, +.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option input, +.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option label, +.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option input, +.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option label { + display: inline; } + +.elementor-field-label { + text-align: right; + cursor: pointer; } + .elementor-mark-required .elementor-field-label:after { + content: '*'; + color: red; + padding-right: 0.2em; } + +.elementor-field-textual { + line-height: 1.4; } + .elementor-field-textual.elementor-size-xs { + font-size: 13px; + min-height: 33px; + padding: 4px 12px; + border-radius: 2px; } + .elementor-field-textual.elementor-size-sm { + font-size: 15px; + min-height: 40px; + padding: 5px 14px; + border-radius: 3px; } + .elementor-field-textual.elementor-size-md { + font-size: 16px; + min-height: 47px; + padding: 6px 16px; + border-radius: 4px; } + .elementor-field-textual.elementor-size-lg { + font-size: 18px; + min-height: 59px; + padding: 7px 20px; + border-radius: 5px; } + .elementor-field-textual.elementor-size-xl { + font-size: 20px; + min-height: 72px; + padding: 8px 24px; + border-radius: 6px; } + +.elementor-button-align-center .elementor-field-type-submit { + justify-content: center; } + +.elementor-button-align-stretch .elementor-field-type-submit button { + flex-basis: 100%; } + +.elementor-button-align-start .elementor-field-type-submit { + justify-content: flex-end; } + +.elementor-button-align-end .elementor-field-type-submit { + justify-content: flex-start; } + +@media screen and (max-width: 1024px) { + .elementor-tablet-button-align-center .elementor-field-type-submit { + justify-content: center; } + .elementor-tablet-button-align-stretch .elementor-field-type-submit button { + flex-basis: 100%; } + .elementor-tablet-button-align-start .elementor-field-type-submit { + justify-content: flex-end; } + .elementor-tablet-button-align-end .elementor-field-type-submit { + justify-content: flex-start; } } + +@media screen and (max-width: 767px) { + .elementor-mobile-button-align-center .elementor-field-type-submit { + justify-content: center; } + .elementor-mobile-button-align-stretch .elementor-field-type-submit button { + flex-basis: 100%; } + .elementor-mobile-button-align-start .elementor-field-type-submit { + justify-content: flex-end; } + .elementor-mobile-button-align-end .elementor-field-type-submit { + justify-content: flex-start; } } + +.elementor-error .elementor-field { + border-color: #d9534f; } + +.elementor-error .help-inline { + color: #d9534f; + font-size: 0.9em; } + +.elementor-message { + margin: 10px 0; + font-size: 1em; + line-height: 1; } + .elementor-message:before { + content: "\f00c"; + display: inline-block; + font-family: fontawesome; + font-weight: normal; + font-style: normal; + vertical-align: middle; + margin-right: 5px; } + .elementor-message.elementor-message-danger { + color: #d9534f; } + .elementor-message.elementor-message-danger:before { + content: "\f00d"; } + .elementor-message.form-message-success { + color: #5cb85c; } + +.elementor-form .elementor-button { + padding-top: 0; + padding-bottom: 0; + border: 0 none; } + .elementor-form .elementor-button > span { + display: flex; + justify-content: center; } + .elementor-form .elementor-button .elementor-align-icon-right { + order: 0; } + .elementor-form .elementor-button .elementor-align-icon-left { + order: 2; } + .elementor-form .elementor-button.elementor-size-xs { + min-height: 33px; } + .elementor-form .elementor-button.elementor-size-sm { + min-height: 40px; } + .elementor-form .elementor-button.elementor-size-md { + min-height: 47px; } + .elementor-form .elementor-button.elementor-size-lg { + min-height: 59px; } + .elementor-form .elementor-button.elementor-size-xl { + min-height: 72px; } + +.elementor .elementor-section-wrap, +.elementor-element .elementor-widget-container { + transition: + opacity var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s), + background var(--e-background-transition-duration, .3s), + border var(--e-border-transition-duration, .3s), + border-radius var(--e-border-transition-duration, .3s), + box-shadow var(--e-border-transition-duration, .3s); } +.e-transform-hover .elementor-widget-container { + transition: + transform var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s), + opacity var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s), + background var(--e-background-transition-duration, .3s), + border var(--e-border-transition-duration, .3s), + border-radius var(--e-border-transition-duration, .3s), + box-shadow var(--e-border-transition-duration, .3s); } +.elementor-overflow-hidden .elementor-widget-container { + overflow: hidden; } +.elementor-element .elementor-widget-container:empty { + display: none; } + +.elementor-widget-text-path { + font-size: 20px; + text-align: var(--alignment, right); } + .elementor-widget-text-path svg { + width: var(--width, 500px); + max-width: 100%; + height: auto; + overflow: visible; + word-spacing: var(--word-spacing, normal); + transform: rotate(var(--rotate, 0)); } + .elementor-widget-text-path svg path { + vector-effect: non-scaling-stroke; + /* Prevent stroke size scaling when resizing the SVG. */ + fill: var(--path-fill, transparent); + stroke: var(--stroke-color, transparent); + stroke-width: var(--stroke-width, 1px); + transition: var(--stroke-transition, .3s) all; } + .elementor-widget-text-path svg:hover path { + --path-fill: var(--path-fill-hover); + --stroke-color: var(--stroke-color-hover); + --stroke-width: var(--stroke-width-hover); } + .elementor-widget-text-path svg text { + --fill: var(--text-color); + fill: var(--fill); + direction: var(--direction, rtl); + transition: var(--transition, .3s) all; } + .elementor-widget-text-path svg text:hover { + --color: var(--text-color-hover, var(--text-color)); + --fill: var(--color); + color: var(--color); } + +.elementor-accordion { + text-align: right; } + .elementor-accordion .elementor-accordion-item { + border: 1px solid #D4D4D4; } + .elementor-accordion .elementor-accordion-item + .elementor-accordion-item { + border-top: none; } + .elementor-accordion .elementor-tab-title { + margin: 0; + padding: 15px 20px; + font-weight: bold; + line-height: 1; + cursor: pointer; + outline: none; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon { + display: inline-block; + width: 1.5em; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right { + float: right; + text-align: right; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left { + float: left; + text-align: left; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed { + display: block; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened { + display: none; } + .elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed { + display: none; } + .elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened { + display: block; } + .elementor-accordion .elementor-tab-content { + display: none; + padding: 15px 20px; + border-top: 1px solid #D4D4D4; } + +@media (max-width: 767px) { + .elementor-accordion .elementor-tab-title { + padding: 12px 15px; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon { + width: 1.2em; } + .elementor-accordion .elementor-tab-content { + padding: 7px 15px; } } + +.elementor-alert { + padding: 15px; + border-left: 5px solid transparent; + position: relative; + text-align: right; } + .elementor-alert .elementor-alert-title { + display: block; + font-weight: bold; } + .elementor-alert .elementor-alert-description { + font-size: 13px; } + .elementor-alert button.elementor-alert-dismiss { + position: absolute; + left: 10px; + top: 10px; + padding: 3px; + font-size: 20px; + line-height: 1; + background: transparent; + color: inherit !important; + border: none; + cursor: pointer; } + .elementor-alert.elementor-alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bcdff1; } + .elementor-alert.elementor-alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #cae6be; } + .elementor-alert.elementor-alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #f9f0c3; } + .elementor-alert.elementor-alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #e8c4c4; } + +@media (max-width: 767px) { + .elementor-alert { + padding: 10px; } + .elementor-alert button.elementor-alert-dismiss { + right: 7px; + top: 7px; } } + +.elementor-tab-title a { + color: inherit !important; } + +.elementor-button { + display: inline-block; + border: none; + line-height: 1; + background-color: #818a91; + color: #fff; + text-align: center; + transition: all 0.5s; } + a.elementor-button:not(#e), + a.elementor-button:not(#e):hover, + a.elementor-button:not(#e):focus, + a.elementor-button:not(#e):visited { + color: #fff; } + + .elementor-button-content-wrapper { + display: flex; + gap: 5px; + justify-content: center; + align-items: baseline; } + .elementor-button-icon { + flex-grow: 0; + order: 5; } + .elementor-button-text { + flex-grow: 1; + order: 10; + display: inline-block; } + + .elementor-button.elementor-size-xs { + font-size: 13px; + padding: 10px 20px; + border-radius: 2px; } + .elementor-button.elementor-size-sm { + font-size: 15px; + padding: 12px 24px; + border-radius: 3px; } + .elementor-button.elementor-size-md { + font-size: 16px; + padding: 15px 30px; + border-radius: 4px; } + .elementor-button.elementor-size-lg { + font-size: 18px; + padding: 20px 40px; + border-radius: 5px; } + .elementor-button.elementor-size-xl { + font-size: 20px; + padding: 25px 50px; + border-radius: 6px; } + .elementor-button .elementor-align-icon-right { + order: 5; } + .elementor-button .elementor-align-icon-left { + order: 15; } + .elementor-button .elementor-button-text { + display: inline-block; } + .elementor-button span { + text-decoration: inherit; } + +.elementor-element.elementor-button-info .elementor-button { + background-color: #5bc0de; } + +.elementor-element.elementor-button-success .elementor-button { + background-color: #5cb85c; } + +.elementor-element.elementor-button-warning .elementor-button { + background-color: #f0ad4e; } + +.elementor-element.elementor-button-danger .elementor-button { + background-color: #d9534f; } + +.elementor-widget-button .elementor-button .elementor-button-info { + background-color: #5bc0de; } + +.elementor-widget-button .elementor-button .elementor-button-success { + background-color: #5cb85c; } + +.elementor-widget-button .elementor-button .elementor-button-warning { + background-color: #f0ad4e; } + +.elementor-widget-button .elementor-button .elementor-button-danger { + background-color: #d9534f; } + +.elementor-counter .elementor-counter-number-wrapper { + display: flex; + font-size: 69px; + font-weight: 600; + color: #222222; + line-height: 1; } + +.elementor-counter .elementor-counter-number-prefix, .elementor-counter .elementor-counter-number-suffix { + flex-grow: 1; + white-space: pre-wrap; } + +.elementor-counter .elementor-counter-number-prefix { + text-align: left; } + +.elementor-counter .elementor-counter-number-suffix { + text-align: right; } + +.elementor-counter .elementor-counter-title { + text-align: center; + font-size: 19px; + font-weight: 400; + color: #666666; + line-height: 2.5; } + +.elementor-widget-divider .elementor-divider { + line-height: 0; + font-size: 0; } + +.elementor-widget-divider .elementor-divider-separator { + display: inline-block; } + +.elementor-image-gallery--layout-grid .elementor-image-gallery { + flex-flow: row wrap; } +.elementor-image-gallery--layout-masonry .elementor-image-gallery { + max-height: 1000px; + overflow: hidden; + flex-flow: column wrap; } +.elementor-image-gallery { + display: flex; } + .elementor-image-gallery figure { + text-align: center; + width: 100%; + margin: 0 auto; } + .elementor-image-gallery img { + width: 100%; + margin: 0 auto; } + .elementor-image-gallery figcaption { + margin: 0; } + +.elementor-widget-google_maps iframe { + height: 300px; } + +.elementor-widget-heading .elementor-heading-title { + padding: 0; + margin: 0; + line-height: 1; } + .elementor-widget-heading .elementor-heading-title > a { + color: inherit !important; + font-size: inherit !important; } + .elementor-widget-heading .elementor-heading-title.elementor-size-small { + font-size: 15px; } + .elementor-widget-heading .elementor-heading-title.elementor-size-medium { + font-size: 19px; } + .elementor-widget-heading .elementor-heading-title.elementor-size-large { + font-size: 29px; } + .elementor-widget-heading .elementor-heading-title.elementor-size-xl { + font-size: 39px; } + .elementor-widget-heading .elementor-heading-title.elementor-size-xxl { + font-size: 59px; } + +.elementor-icon-wrapper { + line-height: 0; } +.elementor-icon { + display: inline-block; + line-height: 1; + transition: all 0.5s; + color: #818a91; + font-size: 50px; + text-align: center; } + .elementor-icon:hover { + color: #818a91; } + .elementor-icon i { + width: 1em; + height: 1em; + position: relative; + display: block; } + .elementor-icon i:before { + position: absolute; + left: 50%; + transform: translateX(-50%); } + +.elementor-view-stacked .elementor-icon { + padding: .5em; + background-color: #818a91; + color: #fff; } + +.elementor-view-framed .elementor-icon { + padding: .5em; + color: #818a91; + border: 3px solid #818a91; + background-color: transparent; } + +.elementor-shape-circle .elementor-icon { + border-radius: 50%; } + +@media (min-width: 768px) { + .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper { + display: flex; } + .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon { + display: inline-flex; + flex: 0 0 auto; } + .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper { + text-align: left; + flex-direction: row; } + .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper { + text-align: right; + flex-direction: row-reverse; } + .elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img { + margin: auto; } + .elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper { + align-items: flex-start; } + .elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper { + align-items: center; } + .elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper { + align-items: flex-end; } } + +@media (max-width: 767px) { + .elementor-widget-icon-box .elementor-icon-box-icon { + margin-left: auto !important; + margin-right: auto !important; + margin-bottom: 15px; } } + +.elementor-widget-icon-box .elementor-icon-box-wrapper { + text-align: center; } + +.elementor-widget-icon-box .elementor-icon-box-title a { + color: inherit !important; } + +.elementor-widget-icon-box .elementor-icon-box-content { + flex-grow: 1; } + +.elementor-widget-icon-box .elementor-icon-box-description { + margin: 0; } + +.elementor-widget.elementor-icon-list--layout-inline .elementor-widget-container { + overflow: hidden; } + +.elementor-widget .elementor-icon-list-items.elementor-inline-items { + margin-right: -8px; + margin-left: -8px; } + .elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item { + margin-right: 8px; + margin-left: 8px; } + .elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after { + width: auto; + left: auto; + right: auto; + position: relative; + height: 100%; + top: 50%; + transform: translateY(-50%); + border-top: 0; + border-bottom: 0; + border-right: 0; + border-left-width: 1px; + border-style: solid; + left: -8px; } + +.elementor-widget .elementor-icon-list-items { + list-style-type: none; + margin: 0; + padding: 0; } + +.elementor-widget .elementor-icon-list-item { + margin: 0; + padding: 0; + position: relative; } + .elementor-widget .elementor-icon-list-item:after { + position: absolute; + bottom: 0; + width: 100%; } + .elementor-widget .elementor-icon-list-item, .elementor-widget .elementor-icon-list-item a { + display: flex; + align-items: flex-start; } + .elementor-widget .elementor-icon-list-item a { + width: 100%; } + +.elementor-widget .elementor-icon-list-icon + .elementor-icon-list-text { + align-self: center; + padding-right: 5px; } + +.elementor-widget .elementor-icon-list-icon { + flex-shrink: 0; } + +.elementor-widget.elementor-align-center .elementor-icon-list-item, .elementor-widget.elementor-align-center .elementor-icon-list-item a { + justify-content: center; } + +.elementor-widget.elementor-align-center .elementor-icon-list-item:after { + margin: auto; } + +.elementor-widget.elementor-align-center .elementor-inline-items { + justify-content: center; } + +.elementor-widget.elementor-align-left .elementor-icon-list-item, .elementor-widget.elementor-align-left .elementor-icon-list-item a { + justify-content: flex-end; + text-align: left; } + +.elementor-widget.elementor-align-left .elementor-inline-items { + justify-content: flex-end; } + +.elementor-widget.elementor-align-right .elementor-icon-list-item, .elementor-widget.elementor-align-right .elementor-icon-list-item a { + justify-content: flex-start; + text-align: right; } + +.elementor-widget.elementor-align-right .elementor-icon-list-items { + justify-content: flex-start; } + +.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after { + right: 0; } + +.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after { + left: 0; } + +@media (max-width: 1024px) { + .elementor-widget.elementor-tablet-align-center .elementor-icon-list-items { + justify-content: center; } + .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a { + justify-content: center; } + .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after { + margin: auto; } + .elementor-widget.elementor-tablet-align-left .elementor-icon-list-items { + justify-content: flex-end; } + .elementor-widget.elementor-tablet-align-left .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a { + justify-content: flex-end; + text-align: left; } + .elementor-widget.elementor-tablet-align-right .elementor-icon-list-items { + justify-content: flex-start; } + .elementor-widget.elementor-tablet-align-right .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a { + justify-content: flex-start; + text-align: right; } + .elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after { + right: 0; } + .elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after { + left: 0; } } + +@media (max-width: 767px) { + .elementor-widget.elementor-mobile-align-center .elementor-icon-list-items { + justify-content: center; } + .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a { + justify-content: center; } + .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after { + margin: auto; } + .elementor-widget.elementor-mobile-align-left .elementor-icon-list-items { + justify-content: flex-end; } + .elementor-widget.elementor-mobile-align-left .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a { + justify-content: flex-end; + text-align: left; } + .elementor-widget.elementor-mobile-align-right .elementor-icon-list-items { + justify-content: flex-start; } + .elementor-widget.elementor-mobile-align-right .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a { + justify-content: flex-start; + text-align: right; } + .elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after { + right: 0; } + .elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after { + left: 0; } } + +.elementor-widget-image { + text-align: center; } + .elementor-widget-image .elementor-image > a, + .elementor-widget-image .elementor-image figure > a { + display: inline-block; } + .elementor-widget-image .elementor-image > a img[src$=".svg"], + .elementor-widget-image .elementor-image figure > a img[src$=".svg"] { + width: 48px; } + .elementor-widget-image .elementor-image img { + vertical-align: middle; + display: inline-block; } + .elementor-widget-image .elementor-image.elementor-image-shape-circle { + border-radius: 50%; } + +.elementor-widget-image-box .elementor-image-box-content { + width: 100%; } + +@media (min-width: 768px) { + .elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper, .elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper { + display: flex; } + .elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper { + text-align: left; + flex-direction: row; } + .elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper { + text-align: right; + flex-direction: row-reverse; } + .elementor-widget-image-box.elementor-position-top .elementor-image-box-img { + margin: auto; } + .elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper { + align-items: flex-start; } + .elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper { + align-items: center; } + .elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper { + align-items: flex-end; } } + +@media (max-width: 767px) { + .elementor-widget-image-box .elementor-image-box-img { + margin-left: auto !important; + margin-right: auto !important; + margin-bottom: 15px; } } + +.elementor-widget-image-box .elementor-image-box-img { + display: inline-block; } + +.elementor-widget-image-box .elementor-image-box-title a { + color: inherit !important; } + +.elementor-widget-image-box .elementor-image-box-wrapper { + text-align: center; } + +.elementor-widget-image-box .elementor-image-box-description { + margin: 0; } + +.elementor-image-carousel-wrapper .slick-image-stretch:not(.slick-variable-width) .slick-slide .slick-slide-image { + width: 100%; + object-fit: cover; } + +.elementor-image-gallery figure img { + display: block; } + +.elementor-image-gallery figure figcaption { + width: 100%; } + +.swiper-container .swiper-slide figure { + line-height: 0; } + .swiper-container .swiper-slide figure img { + width: 100%; } + +body.elementor-page .elementor-widget-menu-anchor { + margin-bottom: 0; } + +.elementor-widget-progress { + text-align: right; } + +.elementor-progress-wrapper { + position: relative; + background-color: #eeeeee; + color: #ffffff; + height: 30px; + line-height: 30px; + border-radius: 2px; } + +.elementor-progress-bar { + display: flex; + background-color: #818a91; + width: 0; + font-size: 11px; + height: 100%; + border-radius: 2px; + transition: width 1s ease-in-out; } + +.elementor-progress-text { + flex-grow: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding-right: 15px; } + +.elementor-progress-percentage { + padding-left: 15px; } + +.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar { + background-color: #5bc0de; } + +.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar { + background-color: #5cb85c; } + +.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar { + background-color: #f0ad4e; } + +.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar { + background-color: #d9534f; } + +.elementor-progress .elementor-title { + display: block; } + +@media (max-width: 767px) { + .elementor-progress-wrapper { + height: 25px; + line-height: 25px; } + .elementor-progress-text { + padding-right: 10px; } } + +.elementor-social-icons-wrapper { + font-size: 0; } + +.elementor-social-icon { + font-size: 25px; + text-align: center; + padding: 0.5em; + margin-left: 5px; + cursor: pointer; } + .elementor-social-icon i { + color: white; } + .elementor-social-icon:last-child { + margin: 0; } + .elementor-social-icon:hover { + opacity: .9; + color: white; } + .elementor-social-icon-android { + background-color: #A4C639; } + .elementor-social-icon-apple { + background-color: #999999; } + .elementor-social-icon-behance { + background-color: #1769ff; } + .elementor-social-icon-bitbucket { + background-color: #205081; } + .elementor-social-icon-codepen { + background-color: #000000; } + .elementor-social-icon-delicious { + background-color: #3399ff; } + .elementor-social-icon-deviantart { + background-color: #05cc47; } + .elementor-social-icon-digg { + background-color: #005be2; } + .elementor-social-icon-dribbble { + background-color: #ea4c89; } + .elementor-social-icon-envelope { + background-color: #ea4335; } + .elementor-social-icon-facebook { + background-color: #3b5998; } + .elementor-social-icon-flickr { + background-color: #0063dc; } + .elementor-social-icon-foursquare { + background-color: #2d5be3; } + .elementor-social-icon-freecodecamp { + background-color: #006400; } + .elementor-social-icon-github { + background-color: #333333; } + .elementor-social-icon-gitlab { + background-color: #e24329; } + .elementor-social-icon-globe { + background-color: #818a91; } + .elementor-social-icon-google-plus { + background-color: #dd4b39; } + .elementor-social-icon-houzz { + background-color: #7ac142; } + .elementor-social-icon-instagram { + background-color: #262626; } + .elementor-social-icon-jsfiddle { + background-color: #487AA2; } + .elementor-social-icon-link { + background-color: #818a91; } + .elementor-social-icon-linkedin { + background-color: #0077b5; } + .elementor-social-icon-medium { + background-color: #00ab6b; } + .elementor-social-icon-meetup { + background-color: #ec1c40; } + .elementor-social-icon-mixcloud { + background-color: #273a4b; } + .elementor-social-icon-odnoklassniki { + background-color: #F4731C; } + .elementor-social-icon-pinterest { + background-color: #bd081c; } + .elementor-social-icon-product-hunt { + background-color: #da552f; } + .elementor-social-icon-reddit { + background-color: #ff4500; } + .elementor-social-icon-rss { + background-color: #f26522; } + .elementor-social-icon-shopping-cart { + background-color: #4CAF50; } + .elementor-social-icon-skype { + background-color: #00AFF0; } + .elementor-social-icon-slideshare { + background-color: #0077b5; } + .elementor-social-icon-snapchat { + background-color: #fffc00; } + .elementor-social-icon-soundcloud { + background-color: #ff8800; } + .elementor-social-icon-spotify { + background-color: #2ebd59; } + .elementor-social-icon-stack-overflow { + background-color: #fe7a15; } + .elementor-social-icon-steam { + background-color: #00adee; } + .elementor-social-icon-stumbleupon { + background-color: #EB4924; } + .elementor-social-icon-telegram { + background-color: #2CA5E0; } + .elementor-social-icon-thumb-tack { + background-color: #1aa1d8; } + .elementor-social-icon-tripadvisor { + background-color: #589442; } + .elementor-social-icon-tumblr { + background-color: #35465c; } + .elementor-social-icon-twitch { + background-color: #6441A5; } + .elementor-social-icon-twitter { + background-color: #1DA1F2; } + .elementor-social-icon-vimeo { + background-color: #1ab7ea; } + .elementor-social-icon-vk { + background-color: #45668e; } + .elementor-social-icon-weibo { + background-color: #df2029; } + .elementor-social-icon-weixin { + background-color: #7bb32e; } + .elementor-social-icon-whatsapp { + background-color: #25d366; } + .elementor-social-icon-wordpress { + background-color: #21759b; } + .elementor-social-icon-xing { + background-color: #026466; } + .elementor-social-icon-yelp { + background-color: #af0606; } + .elementor-social-icon-youtube { + background-color: #cd201f; } + .elementor-social-icon-500px { + background-color: #0099e5; } + +.elementor-shape-rounded .elementor-icon.elementor-social-icon { + border-radius: 10%; } + +.elementor-shape-circle .elementor-icon.elementor-social-icon { + border-radius: 50%; } + +.elementor-star-rating { + color: #CCD6DF; + font-family: FontAwesome; + display: inline-block; } + .elementor-star-rating i { + display: inline-block; + position: relative; + font-style: normal; + line-height: 1; + cursor: default; } + .elementor-star-rating i:before { + content: '\f005'; + display: block; + font-size: inherit; + font-family: inherit; + position: absolute; + overflow: hidden; + color: #f0ad4e; + top: 0; + right: 0; } + .elementor-star-rating .elementor-star-empty:before, + .elementor-star-rating .elementor-star-0:before { + content: none; } + .elementor-star-rating .elementor-star-1:before { + width: 10%; } + .elementor-star-rating .elementor-star-2:before { + width: 20%; } + .elementor-star-rating .elementor-star-3:before { + width: 30%; } + .elementor-star-rating .elementor-star-4:before { + width: 40%; } + .elementor-star-rating .elementor-star-5:before { + width: 50%; } + .elementor-star-rating .elementor-star-6:before { + width: 60%; } + .elementor-star-rating .elementor-star-7:before { + width: 70%; } + .elementor-star-rating .elementor-star-8:before { + width: 80%; } + .elementor-star-rating .elementor-star-9:before { + width: 90%; } + .elementor-star-rating__wrapper { + display: flex; + align-items: center; } + .elementor-star-rating__title { + margin-left: 10px; } + .elementor-star-rating--align-right .elementor-star-rating__wrapper { + text-align: right; + justify-content: flex-start; } + .elementor-star-rating--align-left .elementor-star-rating__wrapper { + text-align: left; + justify-content: flex-end; } + .elementor-star-rating--align-center .elementor-star-rating__wrapper { + text-align: center; + justify-content: center; } + .elementor-star-rating--align-justify .elementor-star-rating__title { + margin-left: auto; } + +.last-star { + letter-spacing: 0; } + +.elementor--star-style-star_unicode .elementor-star-rating { + font-family: 'Arial', 'Helvetica', sans-serif; } + .elementor--star-style-star_unicode .elementor-star-rating i:not(.elementor-star-empty, .elementor-star-0):before + content: '\002605'; } + +.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper { + width: 25%; + flex-shrink: 0; } + +.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active { + border-left-style: none; } + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after { + height: 999em; + width: 0; + left: 0; + border-left-style: solid; } + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before { + top: 0; + transform: translateY(-100%); } + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after { + top: 100%; } + +.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title { + display: table-cell; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active { + border-bottom-style: none; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after { + bottom: 0; + height: 0; + width: 999em; + border-bottom-style: solid; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before { + right: 100%; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after { + left: 100%; } + +.elementor-widget-tabs .elementor-tab-title, +.elementor-widget-tabs .elementor-tab-title:before, +.elementor-widget-tabs .elementor-tab-title:after, +.elementor-widget-tabs .elementor-tab-content, +.elementor-widget-tabs .elementor-tabs-content-wrapper { + border: 1px none #D4D4D4; } + +.elementor-widget-tabs .elementor-tabs { + text-align: right; } + +.elementor-widget-tabs .elementor-tabs-wrapper { + overflow: hidden; } + +.elementor-widget-tabs .elementor-tab-title { + cursor: pointer; + outline: none; } + +.elementor-widget-tabs .elementor-tab-desktop-title { + position: relative; + padding: 20px 25px; + font-weight: bold; + line-height: 1; + border: solid transparent; } + .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active { + border-color: #D4D4D4; } + .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after { + display: block; + content: ''; + position: absolute; } + +.elementor-widget-tabs .elementor-tab-mobile-title { + padding: 10px 10px; + cursor: pointer; } + +.elementor-widget-tabs .elementor-tab-content { + padding: 20px; + display: none; } + +@media (max-width: 767px) { + .elementor-tabs .elementor-tab-title, + .elementor-tabs .elementor-tab-content { + border-style: solid; + border-bottom-style: none; } + .elementor-tabs .elementor-tabs-wrapper { + display: none; } + .elementor-tabs .elementor-tabs-content-wrapper { + border-bottom-style: solid; } + .elementor-tabs .elementor-tab-content { + padding: 10px; } } + +@media (min-width: 768px) { + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs { + display: flex; } + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper { + flex-grow: 1; + border-style: solid; + border-right-style: none; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content { + border-style: solid; + border-top-style: none; } + .elementor-tabs .elementor-tab-mobile-title { + display: none; } } + +.elementor-testimonial-wrapper { + overflow: hidden; + text-align: center; } + .elementor-testimonial-wrapper .elementor-testimonial-content { + font-size: 1.3em; + margin-bottom: 20px; } + .elementor-testimonial-wrapper .elementor-testimonial-name { + line-height: 1.5; + color: inherit; } + .elementor-testimonial-wrapper .elementor-testimonial-job { + font-size: 0.85em; + color: inherit; } + .elementor-testimonial-wrapper.elementor-testimonial-text-align-left { + text-align: left; } + .elementor-testimonial-wrapper.elementor-testimonial-text-align-right { + text-align: right; } + .elementor-testimonial-wrapper .elementor-testimonial-meta { + width: 100%; + line-height: 1; } + .elementor-testimonial-wrapper .elementor-testimonial-meta-inner { + display: inline-block; } + .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details, + .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image { + display: table-cell; + vertical-align: middle; } + .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img { + width: 60px; + height: 60px; + border-radius: 50%; + object-fit: cover; + max-width: none; } + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image { + padding-left: 15px; } + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details { + text-align: right; } + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details, + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image { + display: block; } + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image { + margin-bottom: 20px; } + +.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap { + background-color: #818a91; + color: #fff; } + +.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap { + color: #818a91; + border: 3px solid; + background-color: transparent; } + +.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap { + margin-top: 8px; } + .elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter { + width: 1em; + height: 1em; } + +.elementor-widget-text-editor .elementor-drop-cap { + float: right; + text-align: center; + line-height: 1; + font-size: 50px; } + .elementor-widget-text-editor .elementor-drop-cap-letter { + display: inline-block; } + +.elementor-toggle { + text-align: right; } + .elementor-toggle .elementor-tab-title { + font-weight: bold; + line-height: 1; + margin: 0; + padding: 15px; + border-bottom: 1px solid #D4D4D4; + cursor: pointer; + outline: none; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon { + display: inline-block; + width: 1em; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right { + float: right; + text-align: right; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left { + float: left; + text-align: left; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed { + display: block; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened { + display: none; } + .elementor-toggle .elementor-tab-title.elementor-active { + border-bottom: none; } + .elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed { + display: none; } + .elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened { + display: block; } + .elementor-toggle .elementor-tab-content { + padding: 15px; + border-bottom: 1px solid #D4D4D4; + display: none; } + +@media (max-width: 767px) { + .elementor-toggle .elementor-tab-title { + padding: 12px; } + .elementor-toggle .elementor-tab-content { + padding: 12px 10px; } } + +.elementor-widget-video .elementor-widget-container { + overflow: hidden; + transform: translate3d(0, 0, 0); } + +.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-size: cover; + background-position: 50%; } + +.elementor-widget-video .elementor-custom-embed-image-overlay { + cursor: pointer; + text-align: center; } + .elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i { + opacity: 1; } + .elementor-widget-video .elementor-custom-embed-image-overlay img { + display: block; + width: 100%; } + .elementor-widget-video .elementor-custom-embed-image-overlay:not([data-elementor-lightbox]) img { + height: 100%; + object-fit: cover; } + +.elementor-widget-video .elementor-video { + object-fit: cover; } + +.slick-slider { + position: relative; + display: block; + box-sizing: border-box; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -ms-touch-action: pan-y; + touch-action: pan-y; + -webkit-tap-highlight-color: transparent; } + +.slick-list { + position: relative; + overflow: hidden; + display: block; + margin: 0; + padding: 0; } + .slick-list:focus { + outline: none; } + .slick-list.dragging { + cursor: pointer; } + +.slick-slider .slick-track, +.slick-slider .slick-list { + transform: translate3d(0, 0, 0); } + +.slick-track { + position: relative; + left: 0; + top: 0; + display: block; } + .slick-track:before, .slick-track:after { + content: ""; + display: table; } + .slick-track:after { + clear: both; } + .slick-loading .slick-track { + visibility: hidden; } + +.slick-slide { + float: left; + height: 100%; + min-height: 1px; + display: none; } + .elementor-slick-slider[dir="rtl"] .slick-slide { + float: right; } + .slick-slide img { + display: block; } + .slick-slide.slick-loading img { + display: none; } + .slick-slide.dragging img { + pointer-events: none; } + .slick-initialized .slick-slide { + display: block; } + .slick-loading .slick-slide { + visibility: hidden; } + .slick-vertical .slick-slide { + display: block; + height: auto; + border: 1px solid transparent; } + +.slick-arrow.slick-hidden { + display: none; } + +.elementor-slick-slider .slick-loading .slick-list { + background: #fff; } + .elementor-slick-slider .slick-loading .slick-list:after { + content: '\f1ce'; + font-family: FontAwesome; + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + animation: fa-spin 2s infinite linear; + font-size: 25px; + color: #a4afb7; } + +.elementor-slick-slider .slick-prev, +.elementor-slick-slider .slick-next { + font-size: 0; + line-height: 0; + position: absolute; + top: 50%; + display: block; + width: 20px; + padding: 0; + transform: translate(0, -50%); + cursor: pointer; + color: transparent; + border: none; + outline: none; + background: transparent; } + .elementor-slick-slider .slick-prev:hover, .elementor-slick-slider .slick-prev:focus, + .elementor-slick-slider .slick-next:hover, + .elementor-slick-slider .slick-next:focus { + color: transparent; + outline: none; + background: transparent; } + .elementor-slick-slider .slick-prev:hover:before, .elementor-slick-slider .slick-prev:focus:before, + .elementor-slick-slider .slick-next:hover:before, + .elementor-slick-slider .slick-next:focus:before { + opacity: 1; } + .elementor-slick-slider .slick-prev.slick-disabled:before, + .elementor-slick-slider .slick-next.slick-disabled:before { + opacity: .25; } + .elementor-slick-slider .slick-prev:before, + .elementor-slick-slider .slick-next:before { + font-family: 'FontAwesome'; + font-size: 35px; + line-height: 1; + opacity: .75; + color: white; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.elementor-slick-slider .slick-prev { + left: -25px; } + [dir="rtl"] .elementor-slick-slider .slick-prev { + left: auto; + right: -25px; } + .elementor-slick-slider .slick-prev:before { + content: '\f104'; } + [dir="rtl"] .elementor-slick-slider .slick-prev:before { + content: '\f105'; } + +.elementor-slick-slider .slick-next { + right: -25px; } + [dir="rtl"] .elementor-slick-slider .slick-next { + left: -25px; + right: auto; } + .elementor-slick-slider .slick-next:before { + content: '\f105'; } + [dir="rtl"] .elementor-slick-slider .slick-next:before { + content: '\f104'; } + +.elementor-slick-slider .slick-dotted.slick-slider { + margin-bottom: 30px; } + +.elementor-slick-slider ul.slick-dots { + position: absolute; + bottom: -25px; + display: block; + width: 100%; + padding: 0; + margin: 0; + list-style: none; + text-align: center; + line-height: 1; } + .elementor-slick-slider ul.slick-dots li { + position: relative; + display: inline-block; + width: 20px; + height: 20px; + margin: 0; + padding: 0; + cursor: pointer; } + .elementor-slick-slider ul.slick-dots li button { + font-size: 0; + line-height: 0; + display: block; + width: 20px; + height: 20px; + padding: 5px; + cursor: pointer; + color: transparent; + border: 0; + outline: none; + background: transparent; } + .elementor-slick-slider ul.slick-dots li button:hover, .elementor-slick-slider ul.slick-dots li button:focus { + outline: none; } + .elementor-slick-slider ul.slick-dots li button:hover:before, .elementor-slick-slider ul.slick-dots li button:focus:before { + opacity: 1; } + .elementor-slick-slider ul.slick-dots li button:before { + font-family: 'FontAwesome'; + font-size: 6px; + line-height: 20px; + position: absolute; + top: 0; + left: 0; + width: 20px; + height: 20px; + content: '\f111'; + text-align: center; + opacity: .25; + color: black; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .elementor-slick-slider ul.slick-dots li.slick-active button:before { + opacity: .75; + color: black; } + +.elementor-slick-slider .slick-arrows-inside .slick-prev { + left: 20px; } + [dir="rtl"] .elementor-slick-slider .slick-arrows-inside .slick-prev { + left: auto; + right: 20px; } + +.elementor-slick-slider .slick-arrows-inside .slick-next { + right: 20px; } + [dir="rtl"] .elementor-slick-slider .slick-arrows-inside .slick-next { + left: 20px; + right: auto; } + +.elementor-slick-slider .slick-dots-inside .slick-dots { + bottom: 5px; } + +.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider { + margin-bottom: 0; } + +.elementor-slick-slider .slick-slider .slick-prev, +.elementor-slick-slider .slick-slider .slick-next { + z-index: 1; } + +.elementor-slick-slider .slick-slide img { + margin: auto; } + +/** + * Swiper 3.4.2 + * Customized by Elementor team + */ +.swiper-container { + margin-left: auto; + margin-right: auto; + position: relative; + overflow: hidden; + /* Fix of Webkit flickering */ + z-index: 1; } + +.swiper-container-no-flexbox .swiper-slide { + float: left; } + +.swiper-container-vertical > .swiper-wrapper { + flex-direction: column; } + +.swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: flex; + transition-property: transform; + box-sizing: content-box; } + +.swiper-container-android .swiper-slide, .swiper-wrapper { + transform: translate3d(0px, 0, 0); } + +.swiper-container-multirow > .swiper-wrapper { + flex-wrap: wrap; } + +.swiper-container-free-mode > .swiper-wrapper { + transition-timing-function: ease-out; + margin: 0 auto; } + +.swiper-slide { + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; } + +/* Auto Height */ +.swiper-container-autoheight { + height: auto; } + .swiper-container-autoheight .swiper-slide { + height: auto; } + .swiper-container-autoheight .swiper-wrapper { + align-items: flex-start; + transition-property: transform, height; } + +/* a11y */ +.swiper-container .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; } + +/* IE10 Windows Phone 8 Fixes */ +.swiper-wp8-horizontal { + -ms-touch-action: pan-y; + touch-action: pan-y; } + +.swiper-wp8-vertical { + -ms-touch-action: pan-x; + touch-action: pan-x; } + +/* Arrows */ +.swiper-button-prev, .swiper-button-next { + position: absolute; + top: 50%; + width: 27px; + height: 44px; + margin-top: -22px; + z-index: 10; + cursor: pointer; + background-size: 27px 44px; + background: no-repeat center; } + +.swiper-button-prev.swiper-button-disabled, .swiper-button-next.swiper-button-disabled { + opacity: 0.35; + cursor: auto; + pointer-events: none; } + +.swiper-button-prev, .swiper-container-rtl .swiper-button-next { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); + left: 10px; + right: auto; } + +.swiper-button-prev.swiper-button-black, .swiper-container-rtl .swiper-button-next.swiper-button-black { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-button-prev.swiper-button-white, .swiper-container-rtl .swiper-button-next.swiper-button-white { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-button-next, .swiper-container-rtl .swiper-button-prev { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); + right: 10px; + left: auto; } + +.swiper-button-next.swiper-button-black, .swiper-container-rtl .swiper-button-prev.swiper-button-black { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-button-next.swiper-button-white, .swiper-container-rtl .swiper-button-prev.swiper-button-white { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); } + +/* Pagination Styles */ +.swiper-pagination { + position: absolute; + text-align: center; + transition: 300ms; + transform: translate3d(0, 0, 0); + z-index: 10; } + .swiper-pagination.swiper-pagination-hidden { + opacity: 0; } + +/* Common Styles */ +.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets { + bottom: 10px; + left: 0; + width: 100%; } + +/* Bullets */ +.swiper-pagination-bullet { + width: 6px; + height: 6px; + display: inline-block; + border-radius: 50%; + background: #000; + opacity: 0.2; } + +.swiper-pagination-fraction { + color: #000; } + +button.swiper-pagination-bullet { + border: none; + margin: 0; + padding: 0; + box-shadow: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; } + +.swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; } + +.swiper-pagination-white .swiper-pagination-bullet { + background: #fff; } + +.swiper-pagination-bullet-active { + opacity: 1; } + +.swiper-pagination-white .swiper-pagination-bullet-active { + background: #fff; } + +.swiper-pagination-black .swiper-pagination-bullet-active { + background: #000; } + +.swiper-container-vertical > .swiper-pagination-bullets { + right: 10px; + top: 50%; + transform: translate3d(0px, -50%, 0); } + .swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 5px 0; + display: block; } + +.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 6px; } + +/* Progressbar */ +.swiper-pagination-progressbar { + background: rgba(0, 0, 0, 0.25); + position: absolute; } + .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + background: #000; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + transform: scale(0); + transform-origin: left top; } + +.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + transform-origin: right top; } + +.swiper-container-horizontal > .swiper-pagination-progressbar { + width: 100%; + height: 4px; + left: 0; + top: 0; } + +.swiper-container-vertical > .swiper-pagination-progressbar { + width: 4px; + height: 100%; + left: 0; + top: 0; } + +.swiper-pagination-progressbar.swiper-pagination-white { + background: rgba(255, 255, 255, 0.5); } + .swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill { + background: #fff; } + +.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill { + background: #000; } + +/* 3D Container */ +.swiper-container-3d { + perspective: 1200px; } + .swiper-container-3d .swiper-wrapper, .swiper-container-3d .swiper-slide, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-cube-shadow { + transform-style: preserve-3d; } + .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 10; } + .swiper-container-3d .swiper-slide-shadow-left { + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } + .swiper-container-3d .swiper-slide-shadow-right { + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } + .swiper-container-3d .swiper-slide-shadow-top { + background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } + .swiper-container-3d .swiper-slide-shadow-bottom { + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } + +/* Coverflow */ +.swiper-container-coverflow .swiper-wrapper, .swiper-container-flip .swiper-wrapper { + /* Windows 8 IE 10 fix */ + -ms-perspective: 1200px; } + +/* Cube + Flip */ +.swiper-container-cube, .swiper-container-flip { + overflow: visible; } + +.swiper-container-cube .swiper-slide, .swiper-container-flip .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; } + +.swiper-container-cube .swiper-slide .swiper-slide, .swiper-container-flip .swiper-slide .swiper-slide { + pointer-events: none; } + +.swiper-container-cube .swiper-slide-active, .swiper-container-flip .swiper-slide-active, .swiper-container-cube .swiper-slide-active .swiper-slide-active, .swiper-container-flip .swiper-slide-active .swiper-slide-active { + pointer-events: auto; } + +.swiper-container-cube .swiper-slide-shadow-top, .swiper-container-flip .swiper-slide-shadow-top, .swiper-container-cube .swiper-slide-shadow-bottom, .swiper-container-flip .swiper-slide-shadow-bottom, .swiper-container-cube .swiper-slide-shadow-left, .swiper-container-flip .swiper-slide-shadow-left, .swiper-container-cube .swiper-slide-shadow-right, .swiper-container-flip .swiper-slide-shadow-right { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +/* Cube */ +.swiper-container-cube .swiper-slide { + visibility: hidden; + transform-origin: 0 0; + width: 100%; + height: 100%; } + +.swiper-container-cube.swiper-container-rtl .swiper-slide { + transform-origin: 100% 0; } + +.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-next, .swiper-container-cube .swiper-slide-prev, .swiper-container-cube .swiper-slide-next + .swiper-slide { + pointer-events: auto; + visibility: visible; } + +.swiper-container-cube .swiper-cube-shadow { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 100%; + background: #000; + opacity: 0.6; + -webkit-filter: blur(50px); + filter: blur(50px); + z-index: 0; } + +/* Fade */ +.swiper-container-fade.swiper-container-free-mode .swiper-slide { + transition-timing-function: ease-out; } + +.swiper-container-fade .swiper-slide { + pointer-events: none; + transition-property: opacity; } + .swiper-container-fade .swiper-slide .swiper-slide { + pointer-events: none; } + +.swiper-container-fade .swiper-slide-active { + pointer-events: auto; } + .swiper-container-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; } + +.swiper-slide .swiper-zoom-container { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + text-align: center; } + .swiper-zoom-container > img, .swiper-zoom-container > svg, .swiper-zoom-container > canvas { + max-width: 100%; + max-height: 100%; + object-fit: contain; } + +/* Scrollbar */ +.swiper-scrollbar { + border-radius: 10px; + position: relative; + -ms-touch-action: none; + background: rgba(0, 0, 0, 0.1); } + +.swiper-container-horizontal > .swiper-scrollbar { + position: absolute; + left: 1%; + bottom: 3px; + z-index: 50; + height: 5px; + width: 98%; } + +.swiper-container-vertical > .swiper-scrollbar { + position: absolute; + right: 3px; + top: 1%; + z-index: 50; + width: 5px; + height: 98%; } + +.swiper-scrollbar-drag { + height: 100%; + width: 100%; + position: relative; + background: rgba(0, 0, 0, 0.5); + border-radius: 10px; + left: 0; + top: 0; } + +.swiper-scrollbar-cursor-drag { + cursor: move; } + +/* Preloader */ +.swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + transform-origin: 50%; + animation: swiper-preloader-spin 1s steps(12, end) infinite; } + .swiper-lazy-preloader:after { + display: block; + content: ""; + width: 100%; + height: 100%; + background-size: 100%; + background: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") no-repeat 50%; } + +.swiper-lazy-preloader-white:after { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); } + +@keyframes swiper-preloader-spin { + 100% { + transform: rotate(360deg); } } + +.elementor-lightbox { + --lightbox-ui-color: rgba(238, 238, 238, 0.9); + --lightbox-ui-color-hover: #fff; + --lightbox-text-color: var(--lightbox-ui-color); + --lightbox-header-icons-size: 20px; + --lightbox-navigation-icons-size: 25px; } + .elementor-lightbox .dialog-header { + display: none; } + .elementor-lightbox .dialog-widget-content { + background: none; + box-shadow: none; + width: 100%; + height: 100%; } + .elementor-lightbox .dialog-message { + animation-duration: .3s; } + .elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio) { + height: 100%; } + .elementor-lightbox .dialog-message.dialog-lightbox-message { + padding: 0; } + .elementor-lightbox .dialog-lightbox-close-button { + cursor: pointer; + position: absolute; + font-size: var(--lightbox-header-icons-size); + left: 0.75em; + top: 13px; + padding: .25em; + z-index: 2; + line-height: 1; } + .elementor-lightbox .dialog-lightbox-close-button, + .elementor-lightbox .elementor-swiper-button { + color: var(--lightbox-ui-color); + transition: all 0.3s; + opacity: 1; } + .elementor-lightbox .dialog-lightbox-close-button:hover, + .elementor-lightbox .elementor-swiper-button:hover { + color: var(--lightbox-ui-color-hover); } + .elementor-lightbox .swiper-container { + height: 100%; } + .elementor-lightbox .elementor-lightbox-item { + display: flex; + align-items: center; + justify-content: center; + position: relative; + padding: 70px; + box-sizing: border-box; + height: 100%; + margin: auto; } + @media (max-width: 767px) { + .elementor-lightbox .elementor-lightbox-item { + padding: 70px 0; } } + .elementor-lightbox .elementor-lightbox-image { + max-height: 100%; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .elementor-lightbox .elementor-lightbox-image, .elementor-lightbox .elementor-lightbox-image:hover { + opacity: 1; + -webkit-filter: none; + filter: none; + border: none; } + .elementor-lightbox .elementor-lightbox-image, .elementor-lightbox .elementor-video-container { + box-shadow: 0 0 30px rgba(0, 0, 0, 0.3), 0 0 8px -5px rgba(0, 0, 0, 0.3); + border-radius: 2px; } + .elementor-lightbox .elementor-video-container { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); } + @media (min-width: 1025px) { + .elementor-lightbox .elementor-video-container { + width: 75%; } } + @media (max-width: 1024px) { + .elementor-lightbox .elementor-video-container { + width: 100%; } } + @media (min-width: 768px) and (max-width: 1024px) { + .elementor-lightbox .elementor-aspect-ratio-916 .elementor-video-container { + width: 70%; } } + .elementor-lightbox .elementor-swiper-button:focus { + outline: none; } + .elementor-lightbox .elementor-swiper-button-prev, .elementor-lightbox .elementor-swiper-button-next { + height: 100%; + display: flex; + align-items: center; + width: 15%; + justify-content: center; + font-size: var(--lightbox-navigation-icons-size); } + .elementor-lightbox .elementor-swiper-button-prev { + left: 0; } + .elementor-lightbox .elementor-swiper-button-next { + right: 0; } + @media (max-width: 767px) { + .elementor-lightbox .elementor-swiper-button-prev, .elementor-lightbox .elementor-swiper-button-next { + width: 20%; } + .elementor-lightbox .elementor-swiper-button-prev i, .elementor-lightbox .elementor-swiper-button-next i { + padding: 10px; + background-color: rgba(0, 0, 0, 0.5); } + .elementor-lightbox .elementor-swiper-button-prev { + left: 0; + justify-content: flex-start; } + .elementor-lightbox .elementor-swiper-button-next { + right: 0; + justify-content: flex-end; } } + +.elementor-slideshow__counter { + color: currentColor; + font-size: .75em; + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; } + +.elementor-slideshow__header, .elementor-slideshow__footer { + position: absolute; + left: 0; + width: 100%; + padding: 15px 20px; + transition: 0.3s; } + +.elementor-slideshow__footer { + color: var(--lightbox-text-color); } + +.elementor-slideshow__header { + color: var(--lightbox-ui-color); + display: flex; + font-size: var(--lightbox-header-icons-size); + padding-right: 1em; + padding-left: 2.6em; + top: 0; + align-items: center; + z-index: 10; } + .elementor-slideshow__header > i { + font-size: calc(var(--lightbox-header-icons-size) * 0.9); /* inherit */ + cursor: pointer; + padding: .25em; + margin: 0 .35em; } + .elementor-slideshow__header > i:hover { + color: var(--lightbox-ui-color-hover); } + .elementor-slideshow__header > i:first-of-type { + margin-right: auto; } + .elementor-slideshow__header .elementor-icon-share { + z-index: 5; } + +.elementor-slideshow__footer { + bottom: 0; + z-index: 5; + position: fixed; } +.elementor-slideshow__title, .elementor-slideshow__description { + margin: 0; } +.elementor-slideshow__title { + font-size: 16px; + font-weight: bold; } +.elementor-slideshow__description { + font-size: 14px; } +.elementor-slideshow--ui-hidden .elementor-slideshow__header, .elementor-slideshow--ui-hidden .elementor-slideshow__footer { + opacity: 0; + pointer-events: none; } +.elementor-slideshow--ui-hidden .elementor-swiper-button-prev, .elementor-slideshow--ui-hidden .elementor-swiper-button-next { + opacity: 0; } + +.elementor-slideshow--fullscreen-mode .elementor-video-container { + width: 100%; } + +.elementor-slideshow--zoom-mode .elementor-slideshow__header, .elementor-slideshow--zoom-mode .elementor-slideshow__footer { + background-color: rgba(0, 0, 0, 0.5); } +.elementor-slideshow--zoom-mode .elementor-swiper-button-prev, .elementor-slideshow--zoom-mode .elementor-swiper-button-next { + opacity: 0; + pointer-events: none; } + +.animated { + animation-duration: 1.25s; } + .animated.animated-slow { + animation-duration: 2s; } + .animated.animated-fast { + animation-duration: .75s; } + +.animated.infinite { + animation-iteration-count: infinite; } + +.elementor-shape { + overflow: hidden; + position: absolute; + left: 0; + width: 100%; + line-height: 0; + direction: ltr; } + .elementor-shape-top { + top: -1px; } + .elementor-shape-bottom { + bottom: -1px; } + .elementor-shape[data-negative="false"].elementor-shape-bottom { + transform: rotate(180deg); } + .elementor-shape[data-negative="true"].elementor-shape-top { + transform: rotate(180deg); } + .elementor-shape svg { + display: block; + width: calc(100% + 1.3px); + position: relative; + left: 50%; + transform: translateX(-50%); } + .elementor-shape .elementor-shape-fill { + fill: #fff; + transform-origin: center; + transform: rotateY(0); } + +.elementor .elementor-element ul.elementor-icon-list-items, +#elementor .elementor-element ul.elementor-icon-list-items { + padding: 0; } + +@media (max-width: 767px) { + .elementor:not(.elementor-edit-area-active) .elementor-hidden-phone { + display: none; } } + +@media (min-width: 768px) and (max-width: 1024px) { + .elementor:not(.elementor-edit-area-active) .elementor-hidden-tablet { + display: none; } } + +@media (min-width: 1025px) { + .elementor:not(.elementor-edit-area-active) .elementor-hidden-desktop { + display: none; } } + +.elementor-widget-call-to-action .elementor-widget-container { + overflow: hidden; } +.elementor-cta { + position: relative; + display: flex; + overflow: hidden; + transition: 0.5s; } + .elementor-cta-content { + z-index: 2; + overflow: hidden; + display: flex; + flex-wrap: wrap; + align-items: center; + align-content: center; + padding: 35px; + width: 100%; } + .elementor-cta-content, .elementor-cta .elementor-content-item { + position: relative; + transition: 0.5s; + color: #fff; } + .elementor-cta .elementor-content-item { + width: 100%; + margin: 0; } + .elementor-cta .elementor-content-item:not(:last-child) { + margin-bottom: 15px; } + .elementor-cta .elementor-content-item .elementor-icon { + color: #fff; } + .elementor-cta--skin-classic .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--skin-classic .elementor-cta-bg-wrapper { + position: relative; + min-height: 200px; + width: 100%; } + .elementor-cta--skin-classic .elementor-cta-content { + transition: all 0.4s; + width: 100%; + background-color: #f7f7f7; } + .elementor-cta--skin-classic .elementor-content-item, .elementor-cta--skin-classic .elementor-content-item .elementor-icon { + color: #55595c; + border-color: #55595c; } + .elementor-cta--skin-classic .elementor-cta button.elementor-button:not(#e), + .elementor-cta--skin-classic .elementor-cta a.elementor-button:not(#e) { + color: #55595c; } + .elementor-cta--skin-classic .elementor-cta .elementor-button { + border-color: #55595c; } + .elementor-cta--skin-cover .elementor-cta { + display: block; } + .elementor-cta--skin-cover .elementor-cta-bg-wrapper { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + transition: all 0.4s; + width: 100%; } + .elementor-cta--skin-cover .elementor-cta-content { + min-height: 280px; } + .elementor-cta--skin-cover .elementor-content-item, .elementor-cta--skin-cover .elementor-content-item .elementor-icon { + color: #fff; + border-color: #fff; } + .elementor-cta--skin-cover .elementor-cta .elementor-button { + border-color: white; } + .elementor-cta--layout-image-above .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--layout-image-above .elementor-cta-bg-wrapper { + width: 100%; } + .elementor-cta--layout-image-left .elementor-cta, .elementor-cta--layout-image-right .elementor-cta { + flex-wrap: nowrap; } + .elementor-cta--layout-image-left .elementor-cta-bg-wrapper, .elementor-cta--layout-image-right .elementor-cta-bg-wrapper { + width: auto; + min-width: 50%; } + .elementor-cta--layout-image-left .elementor-cta-content, .elementor-cta--layout-image-right .elementor-cta-content { + flex-grow: 1; } + .elementor-cta--layout-image-left .elementor-cta { + flex-direction: row-reverse; } + .elementor-cta--layout-image-right .elementor-cta { + flex-direction: row; } + .elementor-cta-bg, .elementor-cta-bg-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + transition: all 0.4s; } + .elementor-cta-bg-wrapper { + z-index: 1; + overflow: hidden; } + .elementor-cta-bg-wrapper img.elementor-cta-bg { + width: 100%; + height: 100%; + object-fit: cover; + z-index: 1; } + .elementor-cta-bg-overlay { + z-index: 2; } + .elementor-cta .elementor-button { + cursor: pointer; + align-self: center; + margin-left: auto; + margin-right: auto; + border: solid 2px white; + background: transparent; } + .elementor-cta .elementor-button:hover { + background: transparent; + text-decoration: none; } + .elementor-cta-title { + font-size: 23px; } + .elementor-cta--valign-top .elementor-cta-content { + align-content: flex-start; + align-items: flex-start; } + .elementor-cta--valign-middle .elementor-cta-content { + align-content: center; + align-items: center; } + .elementor-cta--valign-bottom .elementor-cta-content { + align-content: flex-end; + align-items: flex-end; } + .elementor-cta:hover .elementor-cta-bg-overlay { + background-color: rgba(0, 0, 0, 0.3); } + +@media (max-device-width: 1024px) { + .elementor-cta { + cursor: pointer; } } + +@media (min-width: 1025px) { + .elementor-cta--desktop-layout-image-above .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--desktop-layout-image-above .elementor-cta-bg-wrapper { + width: 100%; } + .elementor-cta--desktop-layout-image-left .elementor-cta, .elementor-cta--desktop-layout-image-right .elementor-cta { + flex-wrap: nowrap; } + .elementor-cta--desktop-layout-image-left .elementor-cta-bg-wrapper, .elementor-cta--desktop-layout-image-right .elementor-cta-bg-wrapper { + width: auto; + min-width: 50%; } + .elementor-cta--desktop-layout-image-left .elementor-cta-content, .elementor-cta--desktop-layout-image-right .elementor-cta-content { + flex-grow: 1; } + .elementor-cta--desktop-layout-image-left .elementor-cta { + flex-direction: row-reverse; } + .elementor-cta--desktop-layout-image-right .elementor-cta { + flex-direction: row; } } + +@media (max-width: 1024px) { + .elementor-cta--tablet-layout-image-above .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--tablet-layout-image-above .elementor-cta-bg-wrapper { + width: 100%; } + .elementor-cta--tablet-layout-image-left .elementor-cta, .elementor-cta--tablet-layout-image-right .elementor-cta { + flex-wrap: nowrap; } + .elementor-cta--tablet-layout-image-left .elementor-cta-bg-wrapper, .elementor-cta--tablet-layout-image-right .elementor-cta-bg-wrapper { + width: auto; + min-width: 50%; } + .elementor-cta--tablet-layout-image-left .elementor-cta-content, .elementor-cta--tablet-layout-image-right .elementor-cta-content { + flex-grow: 1; } + .elementor-cta--tablet-layout-image-left .elementor-cta { + flex-direction: row-reverse; } + .elementor-cta--tablet-layout-image-right .elementor-cta { + flex-direction: row; } } + +@media (max-width: 767px) { + .elementor-cta--mobile-layout-image-above .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--mobile-layout-image-above .elementor-cta-bg-wrapper { + width: 100%; } + .elementor-cta--mobile-layout-image-left .elementor-cta, .elementor-cta--mobile-layout-image-right .elementor-cta { + flex-wrap: nowrap; } + .elementor-cta--mobile-layout-image-left .elementor-cta-bg-wrapper, .elementor-cta--mobile-layout-image-right .elementor-cta-bg-wrapper { + width: auto; + min-width: 50%; } + .elementor-cta--mobile-layout-image-left .elementor-cta-content, .elementor-cta--mobile-layout-image-right .elementor-cta-content { + flex-grow: 1; } + .elementor-cta--mobile-layout-image-left .elementor-cta { + flex-direction: row-reverse; } + .elementor-cta--mobile-layout-image-right .elementor-cta { + flex-direction: row; } } + +.elementor-ribbon { + position: absolute; + z-index: 2; + top: 0; + left: 0; + right: auto; + transform: rotate(0); + width: 150px; + overflow: hidden; + height: 150px; } + .elementor-ribbon-inner { + text-align: center; + left: 0; + width: 200%; + transform: translate3d(35px, -50%, 0) rotate(-45deg); + margin-top: 35px; + font-size: 13px; + line-height: 2; + font-weight: 800; + text-transform: uppercase; + background: #000; + color: #fff; } + .elementor-ribbon.elementor-ribbon-left { + transform: rotate(0); + left: 0; + right: auto; } + .elementor-ribbon.elementor-ribbon-right { + transform: rotate(90deg); + left: auto; + right: 0; } + +.elementor-bg-transform-zoom-in:hover .elementor-bg { + transform: scale(1.2); } +.elementor-bg-transform-zoom-out .elementor-bg { + transform: scale(1.2); } +.elementor-bg-transform-zoom-out:hover .elementor-bg { + transform: scale(1); } +.elementor-bg-transform-move-left .elementor-bg { + transform: scale(1.2) translateX(8%); } +.elementor-bg-transform-move-left:hover .elementor-bg { + transform: scale(1.2) translateX(-8%); } +.elementor-bg-transform-move-right .elementor-bg { + transform: scale(1.2) translateX(-8%); } +.elementor-bg-transform-move-right:hover .elementor-bg { + transform: scale(1.2) translateX(8%); } +.elementor-bg-transform-move-up .elementor-bg { + transform: scale(1.2) translateY(8%); } +.elementor-bg-transform-move-up:hover .elementor-bg { + transform: scale(1.2) translateY(-8%); } +.elementor-bg-transform-move-down .elementor-bg { + transform: scale(1.2) translateY(-8%); } +.elementor-bg-transform-move-down:hover .elementor-bg { + transform: scale(1.2) translateY(8%); } + +.elementor-animated-content:hover .elementor-animated-item--grow { + transform: scale(1.1); } +.elementor-animated-content:hover .elementor-animated-item--shrink { + transform: scale(0.85); } +.elementor-animated-content:hover .elementor-animated-item--enter-zoom-out, .elementor-animated-content:hover .elementor-animated-item--enter-zoom-in, .elementor-animated-content:hover .elementor-animated-item--fade-in { + transform: scale(1); + opacity: 1; } +.elementor-animated-content:hover .elementor-animated-item--exit-zoom-out, .elementor-animated-content:hover .elementor-animated-item--exit-zoom-in, .elementor-animated-content:hover .elementor-animated-item--fade-out { + opacity: 0; } +.elementor-animated-content:hover .elementor-animated-item--exit-zoom-out { + transform: scale(0.2); } +.elementor-animated-content:hover .elementor-animated-item--exit-zoom-in { + transform: scale(2); } +.elementor-animated-content:hover .elementor-animated-item--enter-from-right, .elementor-animated-content:hover .elementor-animated-item--enter-from-left, .elementor-animated-content:hover .elementor-animated-item--enter-from-top, .elementor-animated-content:hover .elementor-animated-item--enter-from-bottom { + opacity: 1; + transform: none; } +.elementor-animated-content:hover .elementor-animated-item--exit-to-right { + transform: translateX(1000px); } +.elementor-animated-content:hover .elementor-animated-item--exit-to-left { + transform: translateX(-1000px); } +.elementor-animated-content:hover .elementor-animated-item--exit-to-top { + transform: translateY(-600px); } +.elementor-animated-content:hover .elementor-animated-item--exit-to-bottom { + transform: translateY(600px); } +.elementor-animated-content:hover .elementor-animated-item--exit-to-right, .elementor-animated-content:hover .elementor-animated-item--exit-to-left, .elementor-animated-content:hover .elementor-animated-item--exit-to-top, .elementor-animated-content:hover .elementor-animated-item--exit-to-bottom { + opacity: 0; } +.elementor-animated-content:hover .elementor-animated-item--move-right { + transform: translateX(30px); } +.elementor-animated-content:hover .elementor-animated-item--move-left { + transform: translateX(-30px); } +.elementor-animated-content:hover .elementor-animated-item--move-up { + transform: translateY(-30px); } +.elementor-animated-content:hover .elementor-animated-item--move-down { + transform: translateY(30px); } + +.elementor-animated-content *[class^="elementor-animated-item"] { + will-change: transform, opacity; } + +.elementor-animated-content .elementor-animated-item--enter-zoom-in { + transform: scale(0.2); } +.elementor-animated-content .elementor-animated-item--enter-zoom-out { + transform: scale(2); } +.elementor-animated-content .elementor-animated-item--enter-zoom-out, .elementor-animated-content .elementor-animated-item--enter-zoom-in, .elementor-animated-content .elementor-animated-item--fade-in { + opacity: 0; } +.elementor-animated-content .elementor-animated-item--exit-zoom-out, .elementor-animated-content .elementor-animated-item--exit-zoom-in, .elementor-animated-content .elementor-animated-item--fade-out { + opacity: 1; + transform: scale(1); } +.elementor-animated-content .elementor-animated-item--enter-from-right { + transform: translateX(1000px); } +.elementor-animated-content .elementor-animated-item--enter-from-left { + transform: translateX(-1000px); } +.elementor-animated-content .elementor-animated-item--enter-from-top { + transform: translateY(-600px); } +.elementor-animated-content .elementor-animated-item--enter-from-bottom { + transform: translateY(500px); } +.elementor-animated-content .elementor-animated-item--enter-from-right, .elementor-animated-content .elementor-animated-item--enter-from-left, .elementor-animated-content .elementor-animated-item--enter-from-top, .elementor-animated-content .elementor-animated-item--enter-from-bottom { + opacity: 0; } +.elementor-animated-content .elementor-animated-item--exit-to-right, .elementor-animated-content .elementor-animated-item--exit-to-left, .elementor-animated-content .elementor-animated-item--exit-to-top, .elementor-animated-content .elementor-animated-item--exit-to-bottom { + opacity: 1; + transform: none; } + +.elementor-flip-box { + position: relative; + height: 300px; + width: 100%; + perspective: 1000px; + transform-style: preserve-3d; } + .elementor-flip-box > a { + display: block; } +.elementor-flip-box-side { + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 100%; + text-align: center; + transition: all .6s ease-in-out; } +.elementor-flip-box-front { + background: #0e9dd2; } +.elementor-flip-box-back { + background: #444444; } +.elementor-flip-box-overlay { + display: flex; + align-items: center; + width: 100%; + height: 100%; + padding: 35px; } +.elementor-flip-box-content { + width: 100%; } + .elementor-flip-box-content > :not(:last-child) { + margin-bottom: 15px; } +.elementor-flip-box-image img { + width: 50%; } +.elementor-flip-box .elementor-view-stacked .elementor-icon { + background: #202020; } +.elementor-flip-box .elementor-icon, +.elementor-flip-box-title, +.elementor-flip-box-description { + color: #fff; + border-color: #fff; } +.elementor-flip-box .elementor-button { + cursor: pointer; + border: solid 2px currentColor; + background: transparent; } + +.elementor-flip-box-front--valign-top .elementor-flip-box-front .elementor-flip-box-overlay, +.elementor-flip-box-back--valign-top .elementor-flip-box-back .elementor-flip-box-overlay { + align-content: flex-start; + align-items: flex-start; } +.elementor-flip-box-front--valign-middle .elementor-flip-box-front .elementor-flip-box-overlay, +.elementor-flip-box-back--valign-middle .elementor-flip-box-back .elementor-flip-box-overlay { + align-content: center; + align-items: center; } +.elementor-flip-box-front--valign-bottom .elementor-flip-box-front .elementor-flip-box-overlay, +.elementor-flip-box-back--valign-bottom .elementor-flip-box-back .elementor-flip-box-overlay { + align-content: flex-end; + align-items: flex-end; } + +.elementor-flip-box--3d .elementor-flip-box-overlay { + transform-style: preserve-3d; + transform: translateZ(.1px); } +.elementor-flip-box--3d .elementor-flip-box-content { + transform: translateZ(90px) scale(.91); } + +.elementor-flip-box--effect-flip .elementor-flip-box-side { + transform-style: preserve-3d; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } +.elementor-flip-box--effect-flip .elementor-flip-box-front { + transform: none; + z-index: 1; } +.elementor-flip-box--effect-push .elementor-flip-box-front, +.elementor-flip-box--effect-push .elementor-flip-box:hover .elementor-flip-box-back, +.elementor-flip-box--effect-flip .elementor-flip-box:hover .elementor-flip-box-back, +.elementor-flip-box--effect-slide .elementor-flip-box:hover .elementor-flip-box-back { + transform: none; } + +.elementor-flip-box--effect-flip.elementor-flip-box--direction-right .elementor-flip-box-back { + transform: rotateY(-180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-left .elementor-flip-box-back, +.elementor-flip-box--effect-flip.elementor-flip-box--direction-right .elementor-flip-box:hover .elementor-flip-box-front { + transform: rotateY(180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-left .elementor-flip-box:hover .elementor-flip-box-front { + transform: rotateY(-180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-up .elementor-flip-box-back { + transform: rotateX(-180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-down .elementor-flip-box-back, +.elementor-flip-box--effect-flip.elementor-flip-box--direction-up .elementor-flip-box:hover .elementor-flip-box-front { + transform: rotateX(180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-down .elementor-flip-box:hover .elementor-flip-box-front { + transform: rotateX(-180deg); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-right .elementor-flip-box:hover .elementor-flip-box-front { + transform: translateX(100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-left .elementor-flip-box:hover .elementor-flip-box-front { + transform: translateX(-100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-up .elementor-flip-box:hover .elementor-flip-box-front { + transform: translateY(-100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-down .elementor-flip-box:hover .elementor-flip-box-front { + transform: translateY(100%); } + +.elementor-flip-box--effect-push .elementor-flip-box, +.elementor-flip-box--effect-slide .elementor-flip-box { + overflow: hidden; } + +.elementor-flip-box--effect-push.elementor-flip-box--direction-right .elementor-flip-box-back, +.elementor-flip-box--effect-slide.elementor-flip-box--direction-right .elementor-flip-box-back { + transform: translateX(-100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-left .elementor-flip-box-back, +.elementor-flip-box--effect-slide.elementor-flip-box--direction-left .elementor-flip-box-back { + transform: translateX(100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-up .elementor-flip-box-back, +.elementor-flip-box--effect-slide.elementor-flip-box--direction-up .elementor-flip-box-back { + transform: translateY(100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-down .elementor-flip-box-back, +.elementor-flip-box--effect-slide.elementor-flip-box--direction-down .elementor-flip-box-back { + transform: translateY(-100%); } + +.elementor-flip-box--effect-zoom-out .elementor-flip-box .elementor-flip-box-front { + transition: opacity .35s, width .1ms, transform .7s; + opacity: 1; + transform: scale(1); + z-index: 1; + width: 100%; } +.elementor-flip-box--effect-zoom-out .elementor-flip-box:hover .elementor-flip-box-front { + transition: opacity .7s .1s, width .1ms .7s, transform .8s; + width: 0; + opacity: 0; + transform: scale(.7); } +.elementor-flip-box--effect-zoom-in .elementor-flip-box .elementor-flip-box-back { + transition: opacity .5s .2s, transform .7s; + opacity: 0; + transform: scale(.7); } +.elementor-flip-box--effect-zoom-in .elementor-flip-box:hover .elementor-flip-box-back { + transition: opacity .5s, transform .7s; + opacity: 1; + transform: scale(1); } + +.elementor-flip-box--effect-fade .elementor-flip-box .elementor-flip-box-back { + opacity: 0; } +.elementor-flip-box--effect-fade .elementor-flip-box:hover .elementor-flip-box-back { + opacity: 1; } + +.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box-front { + display: none; } +.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box-back { + transform: none; + opacity: 1; } + +.elementor-headline { + font-size: 43px; + line-height: 1.2; + display: block; } + .elementor-headline--style-rotate .elementor-headline-dynamic-wrapper { + text-align: right; } + .elementor-headline--style-highlight .elementor-headline-dynamic-wrapper { + overflow: visible; + text-align: inherit; } + .elementor-headline--style-highlight .elementor-headline-dynamic-text { + z-index: 1; } + .elementor-headline--style-highlight .elementor-headline-plain-text { + z-index: 1; + position: relative; } + .elementor-headline--style-highlight svg { + position: absolute; + top: 50%; + left: 50%; + width: calc(100% + 20px); + height: calc(100% + 20px); + transform: translate(-50%, -50%); + overflow: visible; } + .elementor-headline--style-highlight svg path { + stroke: red; + stroke-width: 9; + fill: none; + stroke-dasharray: 1500; + animation: elementor-headline-dash 10s infinite; } + .elementor-headline--style-highlight svg path:nth-of-type(2) { + animation-delay: 0.6s; } + +@keyframes elementor-headline-dash { + 0% { + stroke-dasharray: 0 1500; } + 15% { + stroke-dasharray: 1500 1500; } + 85% { + opacity: 1; } + 90% { + stroke-dasharray: 1500 1500; + opacity: 0; } + 100% { + stroke-dasharray: 0 1500; + opacity: 0; } } + +.elementor-headline-dynamic-wrapper { + display: inline-block; + position: relative; } + .elementor-headline-dynamic-wrapper .elementor-headline-dynamic-text { + display: inline-block; + position: absolute; + top: 0; + right: 0; } + .elementor-headline-dynamic-wrapper .elementor-headline-dynamic-text.elementor-headline-text-active { + position: relative; } + +.elementor-headline-animation-type-flip .elementor-headline-dynamic-wrapper { + perspective: 300px; } + +.elementor-headline-animation-type-flip .elementor-headline-dynamic-text { + opacity: 0; + transform-origin: 50% 100%; + transform: rotateX(180deg); } + .elementor-headline-animation-type-flip .elementor-headline-dynamic-text.elementor-headline-text-active { + opacity: 1; + transform: rotateX(0); + animation: elementor-headline-flip-in 1.2s; } + .elementor-headline-animation-type-flip .elementor-headline-dynamic-text.elementor-headline-text-inactive { + transform: rotateX(180deg); + animation: elementor-headline-flip-out 1.2s; } + +@keyframes elementor-headline-flip-in { + 0% { + transform: rotateX(180deg); + opacity: 0; } + 35% { + transform: rotateX(120deg); + opacity: 0; } + 65% { + opacity: 0; } + 100% { + transform: rotateX(360deg); + opacity: 1; } } + +@keyframes elementor-headline-flip-out { + 0% { + transform: rotateX(0); + opacity: 1; } + 35% { + transform: rotateX(-40deg); + opacity: 1; } + 65% { + opacity: 0; } + 100% { + transform: rotateX(180deg); + opacity: 0; } } + +.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper { + vertical-align: top; + overflow: hidden; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper::after { + /* vertical bar */ + content: ''; + position: absolute; + left: 0; + right: auto; + top: 50%; + transform: translateY(-50%); + height: 90%; + width: 1px; + background-color: #0d0d0d; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper:not(.elementor-headline-typing-selected):after { + animation: elementor-headline-pulse 1s infinite; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected { + background-color: #0d0d0d; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected::after { + visibility: hidden; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected .elementor-headline-dynamic-text { + color: #aebcb9; } + +.elementor-headline-animation-type-typing .elementor-headline-dynamic-text:not(.elementor-headline-text-active) { + visibility: hidden; } + +.elementor-headline-animation-type-typing .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in) { + position: absolute; + visibility: hidden; } + +@keyframes elementor-headline-pulse { + 0% { + transform: translateY(-50%); + opacity: 1; } + 40% { + transform: translateY(-50%) scale(0.9); + opacity: 0; } + 100% { + transform: translateY(-50%) scale(0); + opacity: 0; } } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-wrapper { + perspective: 300px; } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter { + display: inline-block; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-text { + opacity: 0; } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter { + transform-style: preserve-3d; + transform: translateZ(-20px) rotateX(90deg); + opacity: 0; } + .elementor-headline-text-active .elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter { + opacity: 1; } + .elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter.elementor-headline-animation-in { + animation: elementor-headline-swirl-in .4s forwards; } + .elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in) { + animation: elementor-headline-swirl-out .4s forwards; } + +@keyframes elementor-headline-swirl-in { + 0% { + opacity: 0; + transform: translateZ(-20px) rotateX(90deg); } + 60% { + opacity: 1; + transform: translateZ(-20px) rotateX(-10deg); } + 100% { + opacity: 1; + transform: translateZ(-20px); } } + +@keyframes elementor-headline-swirl-out { + 0% { + opacity: 1; + transform: translateZ(-20px); } + 60% { + opacity: 0; + transform: translateZ(-20px) rotateX(-100deg); } + 100% { + opacity: 0; + transform: translateZ(-20px) rotateX(-90deg); } } + +.elementor-headline-animation-type-slide-down .elementor-headline-text-wrapper { + display: inline-block; + padding: .2em 0; } + +.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-wrapper { + overflow: hidden; + vertical-align: top; } + +.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text { + opacity: 0; + top: .2em; } + .elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text.elementor-headline-text-active { + top: 0; + opacity: 1; + animation: elementor-headline-slide-down-in .6s; } + .elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text.elementor-headline-text-inactive { + animation: elementor-headline-slide-down-out .6s; } + +@keyframes elementor-headline-slide-down-in { + 0% { + opacity: 0; + transform: translateY(-100%); } + 60% { + opacity: 1; + transform: translateY(20%); } + 100% { + opacity: 1; + transform: translateY(0); } } + +@keyframes elementor-headline-slide-down-out { + 0% { + opacity: 1; + transform: translateY(0); } + 60% { + opacity: 0; + transform: translateY(120%); } + 100% { + opacity: 0; + transform: translateY(100%); } } + +.elementor-headline-animation-type-clip .elementor-headline-text-wrapper { + display: inline-block; + padding: .2em 0; } + +.elementor-headline-animation-type-clip .elementor-headline-dynamic-wrapper { + overflow: hidden; + vertical-align: top; } + .elementor-headline-animation-type-clip .elementor-headline-dynamic-wrapper::after { + /* line */ + content: ''; + position: absolute; + top: 0; + left: 0; + right: auto; + width: 2px; + height: 100%; + background-color: #0d0d0d; } + +.elementor-headline-animation-type-clip .elementor-headline-dynamic-text { + opacity: 0; } + .elementor-headline-animation-type-clip .elementor-headline-dynamic-text.elementor-headline-text-active { + opacity: 1; } + +.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-wrapper { + perspective: 300px; } + +.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text { + opacity: 0; } + .elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text.elementor-headline-text-active { + opacity: 1; + animation: elementor-headline-drop-in-in .8s; } + .elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text.elementor-headline-text-inactive { + animation: elementor-headline-drop-in-out .8s; } + +@keyframes elementor-headline-drop-in-in { + 0% { + opacity: 0; + transform: translateZ(100px); } + 100% { + opacity: 1; + transform: translateZ(0); } } + +@keyframes elementor-headline-drop-in-out { + 0% { + opacity: 1; + transform: translateZ(0); } + 100% { + opacity: 0; + transform: translateZ(-100px); } } + +.elementor-headline-animation-type-blinds .elementor-headline-dynamic-wrapper { + perspective: 300px; } + +.elementor-headline-animation-type-blinds .elementor-headline-dynamic-text { + opacity: 0; } + +.elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter { + display: inline-block; + transform: rotateY(180deg); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .elementor-headline-text-active .elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter { + transform: rotateY(0); } + .elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter.elementor-headline-animation-in { + animation: elementor-headline-blinds-in .6s forwards; } + .elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in) { + animation: elementor-headline-blinds-out .6s forwards; } + +@keyframes elementor-headline-blinds-in { + 0% { + transform: rotateY(180deg); } + 100% { + transform: rotateY(0); } } + +@keyframes elementor-headline-blinds-out { + 0% { + transform: rotateY(0); } + 100% { + transform: rotateY(-180deg); } } + +.elementor-headline-animation-type-wave .elementor-headline-dynamic-text { + opacity: 0; } + +.elementor-headline-animation-type-wave .elementor-headline-dynamic-letter { + display: inline-block; + opacity: 0; + transform: scale(0); } + .elementor-headline-text-active .elementor-headline-animation-type-wave .elementor-headline-dynamic-letter { + opacity: 1; } + .elementor-headline-animation-type-wave .elementor-headline-dynamic-letter.elementor-headline-animation-in { + animation: elementor-headline-wave-up .6s forwards; } + .elementor-headline-animation-type-wave .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in) { + animation: elementor-headline-wave-down .6s forwards; } + +@keyframes elementor-headline-wave-up { + 0% { + transform: scale(0); + opacity: 0; } + 60% { + transform: scale(1.2); + opacity: 1; } + 100% { + transform: scale(1); + opacity: 1; } } + +@keyframes elementor-headline-wave-down { + 0% { + transform: scale(1); + opacity: 1; } + 60% { + transform: scale(0); + opacity: 0; } } + +.elementor-headline-animation-type-slide .elementor-headline-dynamic-text { + opacity: 0; } + .elementor-headline-animation-type-slide .elementor-headline-dynamic-text.elementor-headline-text-active { + opacity: 1; + animation: elementor-headline-slide-in .6s; } + .elementor-headline-animation-type-slide .elementor-headline-dynamic-text.elementor-headline-text-inactive { + animation: elementor-headline-slide-out .6s; } + +@keyframes elementor-headline-slide-in { + 0% { + opacity: 0; + transform: translateX(-100%); } + 60% { + opacity: 1; + transform: translateX(10%); } + 100% { + opacity: 1; + transform: translateX(0); } } + +@keyframes elementor-headline-slide-out { + 0% { + opacity: 1; + transform: translateX(0); } + 60% { + opacity: 0; + transform: translateX(110%); } + 100% { + opacity: 0; + transform: translateX(100%); } } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-text, .elementor-headline-animation-type-blinds .elementor-headline-dynamic-text, .elementor-headline-animation-type-wave .elementor-headline-dynamic-text { + white-space: nowrap; } + +.elementor-image-hotspot { + display: inline-block; + position: relative; } + .elementor-image-hotspot .elementor-image-hotspot-wrapper { + position: absolute; + transform: translate(-50%, -50%); } + .elementor-image-hotspot .elementor-image-hotspot-wrapper:hover .elementor-image-hotspot-content { + visibility: visible; + opacity: 1; + transform: translate3d(-50%, -110%, 0); } + .elementor-image-hotspot .elementor-image-hotspot-content { + position: absolute; + visibility: hidden; + top: 0; + left: 50%; + width: 240px; + max-width: 100vw; + padding: 20px; + text-align: center; + border-radius: 5px; + background: #fff; + opacity: 0; + z-index: 10; + box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.07); + transform: translate3d(-50%, -100%, 0); + transition: all 0.3s cubic-bezier(0, 0, 0.2, 1); } + .elementor-image-hotspot .elementor-image-hotspot-title { + margin: 0 0 7px 0; } + .elementor-image-hotspot .elementor-image-hotspot-description > :first-child { + margin-top: 0; } + .elementor-image-hotspot .elementor-image-hotspot-description > :last-child { + margin-bottom: 0; } +.elementor-widget-image-hotspot.elementor-view-framed .elementor-icon { + border-width: 2px; } +.elementor-widget-image-hotspot.elementor-view-stacked .elementor-icon, +.elementor-widget-image-hotspot.elementor-view-framed .elementor-icon { + border-radius: 50%; } +.elementor-image-hotspot .elementor-icon i[class=''], +.elementor-image-hotspot .elementor-icon i:not([class]) { + display: none; } + +.elementor-widget-countdown .elementor-countdown-expire--message { + display: none; + padding: 20px; + text-align: center; } +.elementor-widget-countdown .elementor-countdown-item { + padding: 20px 0; + text-align: center; + background-color: #818a91; + color: #ffffff; } +.elementor-widget-countdown .elementor-countdown-digits, +.elementor-widget-countdown .elementor-countdown-label { + line-height: 1; } +.elementor-widget-countdown .elementor-countdown-digits { + font-size: 69px; } +.elementor-widget-countdown .elementor-countdown-label { + font-size: 19px; } +.elementor-countdown--label-block .elementor-countdown-wrapper { + display: flex; + justify-content: center; + margin-right: auto; + margin-left: auto; } +.elementor-countdown--label-block .elementor-countdown-digits, +.elementor-countdown--label-block .elementor-countdown-label { + display: block; } +.elementor-countdown--label-block .elementor-countdown-item { + flex-basis: 0; + flex-grow: 1; } +.elementor-countdown--label-inline { + text-align: center; } + .elementor-countdown--label-inline .elementor-countdown-item { + display: inline-block; + padding-left: 5px; + padding-right: 5px; } +.elementor[data-elementor-type$="miniature"] .elementor-countdown-item { + padding: 10px 0; } +.elementor[data-elementor-type$="miniature"] .elementor-countdown-digits { + font-size: 28px; } +.elementor[data-elementor-type$="miniature"] .elementor-countdown-label { + font-size: 12px; } + +.elementor-product-grid > *, +.elementor-product-box > *, +.wrapfix .elementor-product-box, +.wrapfix .elementor-product-box > * > * { + float: none !important; + margin-left: 0 !important; + margin-right: 0 !important; + width: auto; } +.wrapfix .elementor-product-grid > *, +.wrapfix .elementor-product-box > * { + min-width: 100%; + padding: 0 !important; } + +.elementor-product-grid { + display: -ms-grid; + display: grid; + margin: 0; + grid-column-gap: 15px; + grid-row-gap: 15px; } + .elementor-product-grid:before, + .elementor-product-grid:after { + display: none !important; } + .elementor-product-grid > * { + align-self: flex-start; } + +.elementor-widget .elementor-product-miniature { + background: #ffffff; + border: 0 solid; + padding: 10px; + transition: all 0.4s; } +.elementor-product-miniature .elementor-product-link { + position: relative; + display: block; + outline: none; } +.elementor-product-miniature .elementor-image { + position: relative; + overflow: hidden; } + .elementor-product-miniature .elementor-image img { + display: block; + margin: 0 auto; + transition: transform 0.4s; } +.elementor-product-miniature .elementor-second-image { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; + transition: opacity 0.4s; } + .elementor-img-hover-grow .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-grow .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-grow .elementor-product-miniature:hover .elementor-image img { + transform: scale(1.1); } + .elementor-img-hover-shrink .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-shrink .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-shrink .elementor-product-miniature:hover .elementor-image img { + transform: scale(0.85); } + .elementor-img-hover-rotate .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-rotate .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-rotate .elementor-product-miniature:hover .elementor-image img { + transform: rotate(4deg); } + .elementor-img-hover-grow-rotate .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-grow-rotate .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-grow-rotate .elementor-product-miniature:hover .elementor-image img { + transform: scale(1.1) rotate(4deg); } + .elementor-img-hover-float .elementor-product-miniature .elementor-image img{ + transition-duration: .3s; + transition-timing-function: ease-out; } + .elementor-img-hover-float .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-float .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-float .elementor-product-miniature:hover .elementor-image img { + transform: translateY(-8px); + .elementor-img-hover-sink .elementor-product-miniature .elementor-image img{ + transition-duration: .3s; + transition-timing-function: ease-out; } + .elementor-img-hover-sink .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-sink .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-sink .elementor-product-miniature:hover .elementor-image img { + transform: translateY(8px); } + .elementor-img-hover-bob .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-bob .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-bob .elementor-product-miniature:hover .elementor-image img { + animation-name: elementor-animation-bob-float, elementor-animation-bob; + animation-duration: .3s, 1.5s; + animation-delay: 0s, .3s; + animation-timing-function: ease-out, ease-in-out; + animation-iteration-count: 1, infinite; + animation-fill-mode: forwards; + animation-direction: normal, alternate; } + .elementor-img-hover-hang .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-hang .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-hang .elementor-product-miniature:hover .elementor-image img { + animation-name: elementor-animation-hang-sink, elementor-animation-hang; + animation-duration: .3s, 1.5s; + animation-delay: 0s, .3s; + animation-timing-function: ease-out, ease-in-out; + animation-iteration-count: 1, infinite; + animation-fill-mode: forwards; + animation-direction: normal, alternate; } + .elementor-img-hover-buzz-out .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-buzz-out .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-buzz-out .elementor-product-miniature:hover .elementor-image img { + animation-name: elementor-animation-buzz-out; + animation-duration: .75s; + animation-timing-function: linear; + animation-iteration-count: 1; } + .elementor-product-miniature:hover .elementor-second-image { + opacity: 1; } +.elementor-product-miniature .elementor-quick-view { + position: absolute; + display: block; + bottom: 0; + width: 100%; + background: rgba(255, 255, 255, 0.5); + background-clip: padding-box; + color: #000; + font-size: 14px; + line-height: 40px; + transform: translateY(100%); + transition-duration: 0.4s; } + .elementor-product-miniature .elementor-quick-view .elementor-button-text { + flex-grow: 0; } + .elementor-product-miniature:hover .elementor-quick-view { + cursor: pointer; + transform: translateY(0); } + .elementor-product-miniature .elementor-quick-view:hover { + opacity: 1; + background-color: rgba(255, 255, 255, 0.7); } +.elementor-product-miniature .elementor-badges-left, +.elementor-product-miniature .elementor-badges-right { + position: absolute; + top: 0; + margin: 10px; } +.elementor-product-miniature .elementor-badges-left { + left: 0; } +.elementor-product-miniature .elementor-badges-right { + right: 0; } +.elementor-product-miniature .elementor-badge { + min-width: 50px; + margin-bottom: 5px; + padding: 4px 5px 4px 5px; + color: #fff; + text-align: center; } +.elementor-product-miniature .elementor-badge-sale { + background: #f39d72; } +.elementor-product-miniature .elementor-badge-new { + background: #2fb5d2; } +.elementor-product-miniature .elementor-badge-pack { + background: #2fb5d2; } +.elementor-product-miniature .elementor-content { + padding: 10px; + text-align: center; } +.elementor-product-miniature .elementor-content > * { + margin-top: 10px; + margin-bottom: 0; } + .elementor-product-miniature .elementor-content > :first-child { + margin-top: 5px; } +.elementor-product-miniature .elementor-title, +.elementor-product-miniature .elementor-category { + color: #000; + font-size: 14px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; } +.elementor-product-miniature .elementor-category { + color: color: #afafaf; } +.elementor-product-miniature .elementor-description { + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + font-size: 13px; } +.elementor-product-miniature .elementor-price-wrapper { + font-size: 16px; } +.elementor-product-miniature .elementor-price-regular { + color: #afafaf; + font-weight: normal; + text-decoration: line-through; } +.elementor-product-miniature .elementor-price { + color: #000; } +.elementor-product-miniature .elementor-atc { + margin-top: 5px; } + .elementor-atc--align-center .elementor-atc { + text-align: center; } + .elementor-atc--align-right .elementor-atc { + text-align: right; } + .elementor-atc--align-left .elementor-atc { + text-align: left; } + .elementor-atc--align-justify .elementor-atc .elementor-button { + width: 100%; } +.elementor-product-miniature .elementor-atc .elementor-button { + font-size: 14px; + background: #000; + cursor: pointer; } + .elementor-product-miniature .elementor-atc .elementor-button:hover { + opacity: 1; + background-color: #212121; } + .elementor-product-miniature .elementor-atc .elementor-button:disabled { + cursor: not-allowed; } + +.elementor-trustedshops-reviews .slick-track { + display: table; } + .elementor-trustedshops-reviews .slick-initialized .slick-slide { + display: table-cell; + float: none; } + .elementor-trustedshops-reviews .slick-slide-inner { + overflow: hidden; } +.elementor-trustedshops-reviews .elementor-trustedshops-reviews-header, +.elementor-trustedshops-reviews .elementor-trustedshops-reviews-comment { + padding: 10px; } + .elementor-trustedshops-reviews .elementor-trustedshops-reviews-header::after { + content: ''; + display: block; + clear: both; } + .elementor-trustedshops-reviews .elementor-trustedshops-reviews-date { + float: left; } + .elementor-trustedshops-reviews .elementor-trustedshops-reviews-stars { + float: right; } + .elementor-trustedshops-reviews .elementor-icon-unicode .fa-star::before { + content: '\2605'; } + .elementor-trustedshops-reviews .elementor-icon-unicode .fa-star-o::before { + content: '\2606'; } + +.elementor-search { + display: flex; + flex-direction: column; + transition: 0.2s; } +.elementor-search--align-left .elementor-search { + align-items: flex-start; } +.elementor-search--align-center .elementor-search { + align-items: center; } +.elementor-search--align-right .elementor-search { + align-items: flex-end; } + .elementor-search input[type="search"], .elementor-search button { + margin: 0; + border: 0; + padding: 0; + display: inline-block; + vertical-align: middle; + white-space: normal; + background: none; + line-height: 1; + min-width: 0; + font-size: 15px; + -webkit-appearance: none; + -moz-appearance: none; } + .elementor-search input[type="search"]:focus, .elementor-search button:focus { + outline: 0; + color: inherit; } + .elementor-search button { + background-color: #818a91; + font-size: 16px; + color: #fff; + border-radius: 0; } + .elementor-search__container { + display: flex; + transition: 0.2s; + overflow: hidden; + border: 0 solid transparent; + min-height: 50px; } + .elementor-search__container:not(.elementor-search--topbar) { + width: 100%; + background: #eceeef; } + .elementor-search__input { + flex-basis: 100%; + color: #55595c; + transition: color 0.2s; } + .elementor-search__input::-webkit-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__input:-ms-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__input:-moz-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__input::-ms-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__input::placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__submit { + color: #fff; + cursor: pointer; + transition: color 0.2s, background 0.2s; } + .elementor-search--button-type-text .elementor-search__submit { + flex-shrink: 0; } + .elementor-search__icon:not(.elementor-search__clear) { + padding-left: 0 !important; } + .elementor-search__clear { + padding-right: 0 !important; + visibility: hidden; + pointer-events: none; + cursor: pointer; } + .ui-autocomplete-loading ~ .elementor-search__clear i { + animation: ceicon-spin 2s infinite linear; } + .ui-autocomplete-loading ~ .elementor-search__clear i:before { + content: '\e823'; } + .elementor-search__icon { + .elementor-search--skin-minimal .elementor-search__icon { + opacity: 0.6; + display: flex; + align-items: center; + justify-content: flex-end; + color: #55595c; } + .elementor-search--skin-topbar .elementor-search { + display: block; } + .elementor-search--skin-topbar .elementor-search input[type="search"].elementor-search__input { + font-size: 32px; + border-style: solid; + border-width: 0 0 1px 0; + border-color: #eceaea; + border-radius: 0; + line-height: 1.5; + color: #fff; } + .elementor-search--skin-topbar .elementor-search__toggle { + display: inline-block; + cursor: pointer; + vertical-align: middle; + color: #494c4f; } + .elementor-search--skin-topbar .elementor-search__toggle i { + position: relative; + display: block; + border: solid 0; + transition: 0.2s; + width: 33px; + height: 33px; + border-radius: 3px; } + .elementor-search--skin-topbar .elementor-search__toggle i:before { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + font-size: 0.55em; } + .elementor-search--skin-topbar .elementor-search__container { + flex-direction: column; + transition: transform 0.3s; + position: fixed; + z-index: 9998; + top: 0; + left: 0; + right: 0; + border: 0 solid transparent; + padding: 20px; + text-align: right; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + background: #fff; } + .elementor-search--skin-topbar .elementor-search__container:not(.elementor-search--topbar) { + overflow: hidden; + box-shadow: none; + transform: translateY(-100%); } +.elementor-search .dialog-lightbox-close-button { + transition: color 0.5s; + top: 10px; + left: 10px; } +.elementor-search__input-wrapper { + position: relative; + display: flex; + align-items: center; + flex-basis: 100%; } + .elementor-search__input-wrapper .elementor-search__input { + width: 100%; + height: 100%; } + .elementor-search__input-wrapper .elementor-search__clear { + position: absolute; + left: 0; + height: 100%; } +.elementor-search__label { + color: #777777; } +.elementor-search__products { + left: auto !important; + z-index: 9999; } + .elementor-search__products:empty { + display: none; } +.elementor-search__products .elementor-search__product a.elementor-search__product-link { + display: flex; + align-items: center; + flex-direction: row-reverse; + border: none; + border-radius: 0; + padding: 5px; } +.elementor-search__products .elementor-search__product a.elementor-search__product-link.ui-state-focus { + margin: 0; + border-radius: 0; + background: transparent; } +.elementor-search__products .elementor-search__product-image { + align-self: flex-start; + margin-left: 10px; } +.elementor-search__products .elementor-search__product-description { + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + font-size: .8em; } +.elementor-search__products .elementor-search__product-price del { + opacity: .66; } +.elementor-search--skin-topbar .elementor-search__products:not(:empty) { + position: static; + display: block !important; + max-width: 100%; + border: none; + border-radius: 0; + background: transparent; } + +.elementor-email-subscription { + display: inline-block; + width: 100%; } +.elementor-field-type-subscribe { + display: flex; + align-items: center; } +.elementor-field-type-subscribe input[type=email] { + flex-basis: 100%; + width: 100%; + font-size: 15px; + color: #373a3c; + background: #fff; + border: 1px solid #818a91; + border-radius: 0; + transition: all 0.5s; } +.elementor-field-type-subscribe input[type=email]:focus { + outline: 0; } +.elementor-field-type-submit button[type=submit], +.elementor-field-type-subscribe button[type=submit] { + border: 0 solid; + cursor: pointer; } +.elementor-field-type-subscribe button[type=submit] { + margin-left: 0 !important; + font-size: 16px; + color: #fff; + background: #5bc0de; + border-radius: 0; } +.elementor-field-type-gdpr input[type=checkbox], +.elementor-field-type-gdpr .elementor-checkbox-label { + margin-right: 0 !important; + vertical-align: middle; + vertical-align: -webkit-baseline-middle; + vertical-align: -moz-middle-with-baseline; } +.elementor-form-spinner ~ span[class*=icon] { + display: none; } +.elementor-field-group .elementor-field { + width: 100%; } + +@media screen and (max-width: 767px) { + .elementor-mobile-layout-multiline .elementor-field-type-subscribe { + display: block; } + .elementor-mobile-layout-multiline .elementor-field-type-subscribe button[type=submit] { + margin-right: 0 !important; } + .elementor-mobile-layout-inline .elementor-field-type-subscribe button[type=submit] { + margin-top: 0 !important; } } + +@media (min-width: 768px) and (max-width: 1024px) { + .elementor-tablet-layout-multiline .elementor-field-type-subscribe { + display: block; } + .elementor-tablet-layout-multiline .elementor-field-type-subscribe button[type=submit] { + margin-right: 0 !important; } + .elementor-tablet-layout-inline .elementor-field-type-subscribe button[type=submit] { + margin-top: 0 !important; } } + +@media (min-width: 1025px) { + .elementor-layout-multiline .elementor-field-type-subscribe { + display: block; } + .elementor-layout-multiline .elementor-field-type-subscribe button[type=submit] { + margin-right: 0 !important; } + .elementor-layout-inline .elementor-field-type-subscribe button[type=submit] { + margin-top: 0 !important; } } + +.elementor-sticky--active { + z-index: 99; } + +.elementor-sticky.ce-sticky--hide { + transition-delay: .2s !important; } + +.elementor-item:before, .elementor-item:after { + display: block; + position: absolute; + transition: 0.3s; + transition-timing-function: cubic-bezier(0.58, 0.3, 0.005, 1); } + +.elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + opacity: 0; } + +.elementor-item:hover:before, .elementor-item:hover:after, +.elementor-item:focus:before, .elementor-item:focus:after, +.elementor-item.highlighted:before, .elementor-item.highlighted:after, +.elementor-item-active:before, .elementor-item-active:after { + transform: scale(1); } + +.e--pointer-double-line .elementor-item:before, .e--pointer-double-line .elementor-item:after, +.e--pointer-underline .elementor-item:before, .e--pointer-underline .elementor-item:after, +.e--pointer-overline .elementor-item:before, .e--pointer-overline .elementor-item:after { + height: 3px; + width: 100%; + left: 0; + background-color: #55595c; + z-index: 2; } + +.e--pointer-double-line.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-double-line.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-underline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-underline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-overline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-overline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + height: 0; + width: 0; + left: 50%; } + +.e--pointer-double-line.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-underline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-overline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + top: 10px; } +.e--pointer-double-line.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-underline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-overline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + bottom: 10px; } +.e--pointer-double-line.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-underline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-overline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + top: -10px; } +.e--pointer-double-line.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-underline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-overline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + bottom: -10px; } + +.e--pointer-double-line.e--animation-none, +.e--pointer-double-line.e--animation-none .elementor-item, .e--pointer-underline.e--animation-none, +.e--pointer-underline.e--animation-none .elementor-item, .e--pointer-overline.e--animation-none, +.e--pointer-overline.e--animation-none .elementor-item { + transition-duration: 0s; } + .e--pointer-double-line.e--animation-none:before, .e--pointer-double-line.e--animation-none:after, + .e--pointer-double-line.e--animation-none:hover, .e--pointer-double-line.e--animation-none:focus, + .e--pointer-double-line.e--animation-none .elementor-item:before, + .e--pointer-double-line.e--animation-none .elementor-item:after, + .e--pointer-double-line.e--animation-none .elementor-item:hover, + .e--pointer-double-line.e--animation-none .elementor-item:focus, + .e--pointer-underline.e--animation-none:before, .e--pointer-underline.e--animation-none:after, + .e--pointer-underline.e--animation-none:hover, .e--pointer-underline.e--animation-none:focus, + .e--pointer-underline.e--animation-none .elementor-item:before, + .e--pointer-underline.e--animation-none .elementor-item:after, + .e--pointer-underline.e--animation-none .elementor-item:hover, + .e--pointer-underline.e--animation-none .elementor-item:focus, + .e--pointer-overline.e--animation-none:before, .e--pointer-overline.e--animation-none:after, + .e--pointer-overline.e--animation-none:hover, .e--pointer-overline.e--animation-none:focus, + .e--pointer-overline.e--animation-none .elementor-item:before, + .e--pointer-overline.e--animation-none .elementor-item:after, + .e--pointer-overline.e--animation-none .elementor-item:hover, + .e--pointer-overline.e--animation-none .elementor-item:focus { + transition-duration: 0s; } + +.e--pointer-double-line .elementor-item:before, .e--pointer-overline .elementor-item:before { + content: ''; + top: 0; } +.e--pointer-double-line.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-overline.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + width: 10px; + left: -20px; } +.e--pointer-double-line .elementor-item:after, .e--pointer-underline .elementor-item:after { + content: ''; + bottom: 0; } +.e--pointer-double-line.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-underline.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + width: 10px; + left: calc( 100% + 20px); } + +.e--pointer-framed .elementor-item:before, .e--pointer-framed .elementor-item:after { + background: transparent; + left: 0; + top: 0; + bottom: 0; + right: 0; + border: 3px solid #55595c; } +.e--pointer-framed .elementor-item:before { + content: ''; } + +.e--pointer-framed.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + transform: scale(0.75); } +.e--pointer-framed.e--animation-shrink .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + transform: scale(1.25); } + +.e--pointer-framed.e--animation-grow .elementor-item:before, .e--pointer-framed.e--animation-shrink .elementor-item:before { + transition: opacity 0.2s, transform 0.4s; } +.e--pointer-framed.e--animation-draw .elementor-item:before, .e--pointer-framed.e--animation-draw .elementor-item:after { + width: 3px; + height: 3px; } +.e--pointer-framed.e--animation-draw .elementor-item:before { + border-width: 0 3px 3px 0; + transition: width 0.1s 0.2s, height 0.1s 0.3s, opacity 0.12s 0.22s; } +.e--pointer-framed.e--animation-draw .elementor-item:after { + content: ''; + top: initial; + bottom: 0; + right: initial; + left: 0; + border-width: 3px 0 0 3px; + transition: width 0.1s, height 0.1s 0.1s, opacity 0.02s 0.18s; } + +.e--pointer-framed.e--animation-draw .elementor-item:hover:before, +.e--pointer-framed.e--animation-draw .elementor-item:hover:after, +.e--pointer-framed.e--animation-draw .elementor-item:focus:before, +.e--pointer-framed.e--animation-draw .elementor-item:focus:after, +.e--pointer-framed.e--animation-draw .elementor-item.highlighted:before, +.e--pointer-framed.e--animation-draw .elementor-item.highlighted:after, +.e--pointer-framed.e--animation-draw .elementor-item-active:before, +.e--pointer-framed.e--animation-draw .elementor-item-active:after { + width: 100%; + height: 100%; } +.e--pointer-framed.e--animation-draw .elementor-item:hover:before, +.e--pointer-framed.e--animation-draw .elementor-item:focus:before, +.e--pointer-framed.e--animation-draw .elementor-item.highlighted:before, +.e--pointer-framed.e--animation-draw .elementor-item-active:before { + transition: opacity 0.02s, height 0.1s, width 0.1s 0.1s; } +.e--pointer-framed.e--animation-draw .elementor-item:hover:after, +.e--pointer-framed.e--animation-draw .elementor-item:focus:after, +.e--pointer-framed.e--animation-draw .elementor-item.highlighted:after, +.e--pointer-framed.e--animation-draw .elementor-item-active:after { + transition: opacity 0.02s 0.2s, height 0.1s 0.2s, width 0.1s 0.3s; } + +.e--pointer-framed.e--animation-corners .elementor-item:before, .e--pointer-framed.e--animation-corners .elementor-item:after { + width: 3px; + height: 3px; } +.e--pointer-framed.e--animation-corners .elementor-item:before { + border-width: 3px 3px 0 0; } +.e--pointer-framed.e--animation-corners .elementor-item:after { + content: ''; + top: initial; + bottom: 0; + right: initial; + left: 0; + border-width: 0 0 3px 3px; } +.e--pointer-framed.e--animation-corners .elementor-item:hover:before, +.e--pointer-framed.e--animation-corners .elementor-item:hover:after, +.e--pointer-framed.e--animation-corners .elementor-item:focus:before, +.e--pointer-framed.e--animation-corners .elementor-item:focus:after, +.e--pointer-framed.e--animation-corners .elementor-item.highlighted:before, +.e--pointer-framed.e--animation-corners .elementor-item.highlighted:after, +.e--pointer-framed.e--animation-corners .elementor-item-active:before, +.e--pointer-framed.e--animation-corners .elementor-item-active:after { + width: 100%; + height: 100%; + transition: opacity 0.002s, width 0.4s, height 0.4s; } + +.e--pointer-framed.e--animation-none, +.e--pointer-framed.e--animation-none .elementor-item, +.e--pointer-framed.e--animation-none:before, .e--pointer-framed.e--animation-none:after, +.e--pointer-framed.e--animation-none:hover, .e--pointer-framed.e--animation-none:focus, +.e--pointer-framed.e--animation-none .elementor-item:before, +.e--pointer-framed.e--animation-none .elementor-item:after, +.e--pointer-framed.e--animation-none .elementor-item:hover, +.e--pointer-framed.e--animation-none .elementor-item:focus { + transition-duration: 0s; } + +.e--pointer-background .elementor-item:before, .e--pointer-background .elementor-item:after { + content: ''; + transition: 0.3s; } +.e--pointer-background .elementor-item:before { + top: 0; + left: 0; + right: 0; + bottom: 0; + background: #55595c; + z-index: -1; } +.e--pointer-background .elementor-item:hover, +.e--pointer-background .elementor-item:focus, +.e--pointer-background .elementor-item.highlighted, +.e--pointer-background .elementor-item-active { + color: #fff; } + +.e--pointer-background.e--animation-grow .elementor-item:before { + transform: scale(0.5); } +.e--pointer-background.e--animation-grow .elementor-item:hover:before, +.e--pointer-background.e--animation-grow .elementor-item:focus:before, +.e--pointer-background.e--animation-grow .elementor-item.highlighted:before, +.e--pointer-background.e--animation-grow .elementor-item-active:before { + transform: scale(1); + opacity: 1; } + +.e--pointer-background.e--animation-shrink .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + transform: scale(1.2); + transition: 0.3s; } +.e--pointer-background.e--animation-shrink .elementor-item:hover:before, +.e--pointer-background.e--animation-shrink .elementor-item:focus:before, +.e--pointer-background.e--animation-shrink .elementor-item.highlighted:before, +.e--pointer-background.e--animation-shrink .elementor-item-active:before { + transition: opacity 0.15s, transform 0.4s; } + +.e--pointer-background.e--animation-sweep-left .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + left: 100%; } +.e--pointer-background.e--animation-sweep-right .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + right: 100%; } +.e--pointer-background.e--animation-sweep-up .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + top: 100%; } +.e--pointer-background.e--animation-sweep-down .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + bottom: 100%; } + +.e--pointer-background.e--animation-shutter-out-vertical .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + bottom: 50%; + top: 50%; } +.e--pointer-background.e--animation-shutter-out-horizontal .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + right: 50%; + left: 50%; } +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:after, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:after { + top: 0; + left: 0; + right: 0; + bottom: 0; + background: #55595c; + z-index: -1; } + +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:before { + top: 0; + bottom: 100%; } +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:after { + top: 100%; + bottom: 0; } +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:hover:before, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:focus:before, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item.highlighted:before, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item-active:before { + bottom: 50%; } +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:hover:after, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:focus:after, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item.highlighted:after, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item-active:after { + top: 50%; } + +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:before { + right: 0; + left: 100%; } +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:after { + right: 100%; + left: 0; } +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:hover:before, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:focus:before, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item.highlighted:before, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item-active:before { + left: 50%; } +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:hover:after, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:focus:after, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item.highlighted:after, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item-active:after { + right: 50%; } + +.e--pointer-background.e--animation-none, +.e--pointer-background.e--animation-none .elementor-item, +.e--pointer-background.e--animation-none:before, .e--pointer-background.e--animation-none:after, +.e--pointer-background.e--animation-none:hover, .e--pointer-background.e--animation-none:focus, +.e--pointer-background.e--animation-none .elementor-item:before, +.e--pointer-background.e--animation-none .elementor-item:after, +.e--pointer-background.e--animation-none .elementor-item:hover, +.e--pointer-background.e--animation-none .elementor-item:focus { + transition-duration: 0s; } + +.e--pointer-text.e--animation-skew .elementor-item:hover, +.e--pointer-text.e--animation-skew .elementor-item:focus { + transform: skew(-8deg); } +.e--pointer-text.e--animation-grow .elementor-item:hover, +.e--pointer-text.e--animation-grow .elementor-item:focus { + transform: scale(1.2); } +.e--pointer-text.e--animation-shrink .elementor-item:hover, +.e--pointer-text.e--animation-shrink .elementor-item:focus { + transform: scale(0.8); } +.e--pointer-text.e--animation-float .elementor-item:hover, +.e--pointer-text.e--animation-float .elementor-item:focus { + transform: translateY(-8px); } +.e--pointer-text.e--animation-sink .elementor-item:hover, +.e--pointer-text.e--animation-sink .elementor-item:focus { + transform: translateY(8px); } +.e--pointer-text.e--animation-rotate .elementor-item:hover, +.e--pointer-text.e--animation-rotate .elementor-item:focus { + transform: rotate(6deg); } + +.e--pointer-text.e--animation-none, +.e--pointer-text.e--animation-none .elementor-item, +.e--pointer-text.e--animation-none:before, .e--pointer-text.e--animation-none:after, +.e--pointer-text.e--animation-none:hover, .e--pointer-text.e--animation-none:focus, +.e--pointer-text.e--animation-none .elementor-item:before, +.e--pointer-text.e--animation-none .elementor-item:after, +.e--pointer-text.e--animation-none .elementor-item:hover, +.e--pointer-text.e--animation-none .elementor-item:focus { + transition-duration: 0s; } + +.elementor-nav--main .elementor-nav a { + transition: 0.4s; } + .elementor-nav--main .elementor-nav a, + .elementor-nav--main .elementor-nav a:hover, + .elementor-nav--main .elementor-nav a:focus, + .elementor-nav--main .elementor-nav a.highlighted { + padding: 13px 20px; } + .elementor-nav--main .elementor-nav a.current { + background: #373a3c; + color: #fff; } + .elementor-nav--main .elementor-nav a.disabled { + background: #55595c; + color: #a1a6a9; } + +.elementor-nav--main .elementor-nav ul { + position: absolute; + width: 12em; + border-width: 0; + border-style: solid; + padding: 0; } + +.elementor-nav--main .elementor-nav span.scroll-up, +.elementor-nav--main .elementor-nav span.scroll-down { + position: absolute; + display: none; + visibility: hidden; + overflow: hidden; + background: #fff; + height: 20px; } + +.elementor-nav--main .elementor-nav span.scroll-up-arrow, +.elementor-nav--main .elementor-nav span.scroll-down-arrow { + position: absolute; + top: -2px; + right: 50%; + margin-right: -8px; + width: 0; + height: 0; + overflow: hidden; + border-width: 8px; + border-style: dashed dashed solid dashed; + border-color: transparent transparent #494c4f transparent; } +.elementor-nav--main .elementor-nav span.scroll-down-arrow { + top: 6px; + border-style: solid dashed dashed dashed; + border-color: #494c4f transparent transparent transparent; } + +.elementor-nav--main.elementor-nav--layout-vertical .sub-arrow:before, +.elementor-nav--main .elementor-nav--dropdown .sub-arrow:before { + display: block; + transform: rotate(90deg); } + +.elementor-nav--layout-horizontal { + display: flex; } + .elementor-nav--layout-horizontal .elementor-nav { + display: flex; + flex-wrap: wrap; } + .elementor-nav--layout-horizontal .elementor-nav a { + white-space: nowrap; } + +.elementor-nav--align-right .elementor-nav { + margin-left: auto; + justify-content: flex-start; } +.elementor-nav--align-right .elementor-nav--layout-vertical > ul > li > a { + justify-content: flex-start; } +.elementor-nav--align-left .elementor-nav { + margin-right: auto; + justify-content: flex-end; } +.elementor-nav--align-left .elementor-nav--layout-vertical > ul > li > a { + justify-content: flex-end; } +.elementor-nav--align-center .elementor-nav { + margin-left: auto; + margin-right: auto; } +.elementor-nav--align-center .elementor-nav > li:first-child { + margin-right: auto; } +.elementor-nav--align-center .elementor-nav > li:last-child { + margin-left: auto; } +.elementor-nav--align-center .elementor-nav--layout-vertical > ul > li > a { + justify-content: center; } +.elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav { + width: 100%; } + .elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav > li { + flex-grow: 1; } + .elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav > li > a { + justify-content: center; } + +.elementor-widget:not(.elementor-nav--toggle) .elementor-menu-toggle { + display: none; } + +.elementor-widget-nav-menu .elementor-widget-container { + display: flex; + flex-direction: column; } + +.elementor-nav { + position: relative; + z-index: 2; } + .elementor-nav:after { + content: "\00a0"; + display: block; + height: 0; + font: 0px/0 serif; + clear: both; + visibility: hidden; + overflow: hidden; } + .elementor-nav, + .elementor-nav ul, + .elementor-nav li { + display: block; + list-style: none; + margin: 0; + padding: 0; + line-height: normal; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + .elementor-nav ul { + display: none; } + .elementor-nav ul ul a, + .elementor-nav ul ul a:hover, + .elementor-nav ul ul a:focus, + .elementor-nav ul ul a:active { + border-left: 16px solid transparent; } + .elementor-nav ul ul ul a, + .elementor-nav ul ul ul a:hover, + .elementor-nav ul ul ul a:focus, + .elementor-nav ul ul ul a:active { + border-left: 24px solid transparent; } + .elementor-nav ul ul ul ul a, + .elementor-nav ul ul ul ul a:hover, + .elementor-nav ul ul ul ul a:focus, + .elementor-nav ul ul ul ul a:active { + border-left: 32px solid transparent; } + .elementor-nav ul ul ul ul ul a, + .elementor-nav ul ul ul ul ul a:hover, + .elementor-nav ul ul ul ul ul a:focus, + .elementor-nav ul ul ul ul ul a:active { + border-left: 40px solid transparent; } + .elementor-nav li, + .elementor-nav a { + position: relative; } + .elementor-nav li { + border-width: 0; } + .elementor-nav a { + display: flex; + align-items: center; } + .elementor-nav a, .elementor-nav a:hover, .elementor-nav a:focus { + padding: 10px 20px; + line-height: 20px; } + .elementor-nav a.current { + background: #373a3c; + color: #fff; } + .elementor-nav a.disabled { + cursor: not-allowed; + color: #a1a6a9; } + .elementor-nav .sub-arrow { + font-size: 16px; + line-height: 1; + padding: 10px 10px 10px 0; + margin-top: -10px; + margin-bottom: -10px; } + .elementor-nav .sub-arrow.fa-chevron-down { + font-size: 10px; } + .elementor-nav .sub-arrow.fa-plus:before { + font-family: "Open Sans", sans-serif; + content: '+'; } + +.elementor-nav--dropdown .menu-item a:not(#e):hover, +.elementor-nav--dropdown .menu-item a:not(#e):focus, +.elementor-nav--dropdown .menu-item a.highlighted:not(#e), +.elementor-nav--dropdown .menu-item a.elementor-item-active:not(#e) { + color: #fff; } +.elementor-nav--dropdown .menu-item [href]:hover, +.elementor-nav--dropdown .menu-item [href]:focus, +.elementor-nav--dropdown .menu-item .highlighted, +.elementor-nav--dropdown .menu-item .elementor-item-active { + background-color: #55595c; } + +.elementor-menu-toggle { + display: flex; + align-items: center; + justify-content: center; + font-size: 22px; + padding: 0.25em; + cursor: pointer; + border: 0 solid; + border-radius: 3px; + background-color: rgba(0, 0, 0, 0.05); + color: #494c4f; } + .elementor-menu-toggle i { + position: relative; + margin: .44em .05em; + width: .9em; + height: .12em; + background: currentColor; + transition: background 0s .16s; } + .elementor-menu-toggle i:before, + .elementor-menu-toggle i:after { + content: ''; + display: block; + position: absolute; + width: .9em; + height: .12em; + background: currentColor; } + .elementor-menu-toggle i:before { + top: -.24em; + transition: top .16s .16s, transform .16s; } + .elementor-menu-toggle i:after { + bottom: -.24em; + transition: bottom .16s .16s, transform .16s; } + .elementor-menu-toggle.elementor-active i { + background: transparent; } + .elementor-menu-toggle.elementor-active i:before { + top: 0; + transform: rotate(45deg); + transition-delay: 0s, .16s; } + .elementor-menu-toggle.elementor-active i:after { + bottom: 0; + transform: rotate(-45deg); + transition-delay: 0s, .16s; } + +.elementor-nav--dropdown { + background-color: #fff; + font-size: 13px; } + .elementor-nav--dropdown.elementor-nav__container { + margin-top: 10px; + transition: max-height 0.3s, transform 0.3s; + transform-origin: top; + overflow: auto; } + .elementor-nav--dropdown.elementor-nav__container ul ul { + padding-right: 8px; } + .elementor-nav--dropdown.elementor-nav__container .elementor-sub-item { + font-size: 0.85em; } + .elementor-nav--dropdown a { + color: #494c4f; + justify-content: space-between; } + .elementor-nav--dropdown a.current { + background: #373a3c; + color: #fff; } + .elementor-nav--dropdown a.disabled { + color: #b3b3b3; } +ul.elementor-nav--dropdown a, ul.elementor-nav--dropdown a:hover, ul.elementor-nav--dropdown a:focus { + text-shadow: none; } + +.elementor-nav--text-align-center .elementor-nav--dropdown .elementor-nav a { + justify-content: center; } + +.elementor-nav--toggle .elementor-menu-toggle:not(.elementor-active) + .elementor-nav__container { + transform: scaleY(0); + max-height: 0; } +.elementor-nav--toggle .elementor-menu-toggle.elementor-active + .elementor-nav__container { + transform: scaleY(1); + max-height: 100vh; } + +.elementor-nav--stretch .elementor-nav__container.elementor-nav--dropdown { + position: absolute; + z-index: 9997; } + +@media (min-width: 768px) { + .elementor-nav--dropdown-mobile .elementor-nav--dropdown, .elementor-nav--dropdown-mobile .elementor-menu-toggle { + display: none; } } +@media (min-width: 1025px) { + .elementor-nav--dropdown-tablet .elementor-nav--dropdown, .elementor-nav--dropdown-tablet .elementor-menu-toggle { + display: none; } } +@media (max-width: 1024px) { + .elementor-nav--dropdown-tablet .elementor-nav--main { + display: none; } } +@media (max-width: 767px) { + .elementor-nav--dropdown-mobile .elementor-nav--main { + display: none; } } + +.elementor-widget-currency-selector:not(.elementor-nav--active) .current-menu-item, +.elementor-widget-language-selector:not(.elementor-nav--active) .current-menu-item { + display: none; } +.elementor-currencies.elementor-nav--layout-horizontal .elementor-nav ul, +.elementor-langs.elementor-nav--layout-horizontal .elementor-nav ul { + min-width: 100% !important; } +.menu-item-type-account a > span:not(:first-child), +.menu-item-type-currency a > span:not(:first-child), +.menu-item-type-lang a > span:not(:first-child) { + padding-left: 10px; } +.elementor-nav--dropdown .menu-item-type-account a, +.elementor-nav--dropdown .menu-item-type-currency a, +.elementor-nav--dropdown .menu-item-type-lang a { + justify-content: normal; } +.elementor-sign-in .elementor-item > i { + transition: color 0.2s; } + +.elementor-widget-shopping-cart:not(.elementor-cart--show-view-cart-yes) .elementor-button--view-cart, +.elementor-widget-shopping-cart:not(.elementor-cart--show-shipping-yes) .elementor-cart__summary :not(div), +.elementor-widget-shopping-cart:not(.elementor-cart--show-subtotal-yes) .elementor-cart__toggle .elementor-button-text, +.elementor-widget-shopping-cart:not(.elementor-cart--show-remove-button-yes) .elementor-cart__product-remove { + display: none; } + +.elementor-cart__toggle a.elementor-button:not(#e) { + color: #818a91; } +.elementor-cart__toggle .elementor-button { + background: transparent; + border-radius: 0; + border: 1px solid; + border-color: inherit; + display: inline-flex; + align-items: center; } +.elementor-cart--align-icon-left .elementor-cart__toggle .elementor-button { + flex-direction: row-reverse; } +.elementor-cart--align-icon-left .elementor-cart__toggle .elementor-button-text { + margin-left: 0.3em; } +.elementor-cart--align-icon-right .elementor-cart__toggle .elementor-button-text { + margin-right: 0.3em; } +.elementor-cart__toggle .elementor-button-icon { + position: relative; + transition: color 0.1s; } + +.elementor-cart--items-indicator-bubble .elementor-cart__toggle .elementor-button-icon[data-counter]:before { + content: attr(data-counter); + display: block; + position: absolute; + min-width: 1.6em; + height: 1.6em; + line-height: 1.5em; + top: -0.7em; + right: -0.7em; + border-radius: 100%; + color: #fff; + background-color: #d9534f; + text-align: center; + font-size: 10px; } +.elementor-cart--empty-indicator-hide .elementor-cart__toggle .elementor-button-icon[data-counter='0']:before { + content: none; + display: none; } + +.elementor-cart__container { + transform: scale(1); + overflow: hidden; + position: fixed; + z-index: 9998; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background-color: rgba(0, 0, 0, 0.25); + transition: background-color 0.4s, transform 0s; } + .elementor-cart__container .elementor-cart__main { + transition: 0.3s; + position: fixed; + top: 0; + width: 350px; + max-width: 100%; + left: 0; + bottom: 0; + padding: 0 30px; + background-color: white; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.2); + transform: translateX(0); } + .elementor-cart__container:not(.elementor-cart--shown) { + background-color: transparent; + transform: scale(0); + transition: background-color 0.4s, transform 0s 0.4s; } + .elementor-cart__container:not(.elementor-cart--shown) .elementor-cart__main { + overflow: hidden; + opacity: 0; + transform: translateX(100%); } + .elementor-cart__container:not(.elementor-cart--shown) .dialog-lightbox-close-button { + display: none; } + +.elementor-cart__main { + display: flex; + flex-direction: column; + align-items: stretch; + font-size: 14px; } + +.elementor-cart__title { + min-height: 65px; + font-size: 20px; + line-height: 60px; } +.elementor-cart__close-button { + position: absolute; + font-size: 25px; + width: 1em; + height: 1em; + margin: 20px 0; + color: #818a91; + align-self: flex-end; + transition: color 0.5s; + cursor: pointer; } + +.elementor-cart__products { + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + scrollbar-width: thin; } + .elementor-cart__products::-webkit-scrollbar { + width: 14px; } + .elementor-cart__products::-webkit-scrollbar-track { + background: transparent; } + .elementor-cart__products::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.2); + border-radius: 14px; + border: 3px solid transparent; + background-clip: content-box; } + .elementor-cart__products::-webkit-scrollbar-thumb:hover { + background-color: rgba(0, 0, 0, 0.4); } +.elementor-cart__product { + display: grid; + grid-template-columns: 25% auto 50px; + grid-template-rows: 75% auto; } + .elementor-cart__product-image { + grid-row-start: 1; + grid-row-end: 3; + width: 100%; } + .elementor-cart__product-image img, .elementor-cart__product-image a { + display: block; } + .elementor-cart__product-name { + grid-column-start: 2; + grid-column-end: 4; + margin: 0; } + .elementor-cart__product-price { + align-self: end; + color: #D4D4D4; } + .elementor-cart__product-price del { + font-weight: 300; } + .elementor-cart__product-name, .elementor-cart__product-price { + font-size: 14px; + padding-right: 20px; } + .elementor-cart__product-remove { + align-self: end; + justify-self: end; + color: #818a91; + width: 22px; + height: 22px; + font-size: 19px; + border-radius: 20px; + border: 1px solid currentColor; + text-align: center; + overflow: hidden; + position: relative; + transition: color 0.5s; } + .elementor-cart__product-remove > a { + display: block; + z-index: 2; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + opacity: 0; + position: absolute; } + +.elementor-cart__product:not(:last-of-type), .elementor-cart__products, .elementor-cart__summary { + border-bottom: solid 1px #D4D4D4; } +.elementor-cart__product:not(:first-of-type), .elementor-cart__summary, .elementor-cart__footer-buttons { + padding: 20px 0; } + +.elementor-cart__product, .elementor-cart__summary { + padding-bottom: 20px; } +.elementor-cart__summary-label { + clear: both; + float: right; } +.elementor-cart__summary-value { + float: left; } + +.elementor-cart__footer-buttons { + font-size: 20px; + text-align: center; + display: grid; + grid-column-gap: 10px; + grid-row-gap: 10px; } + .elementor-cart__footer-buttons .elementor-button { + border-radius: 0; } +.elementor-cart--buttons-inline .elementor-cart__footer-buttons { + grid-template-columns: 1fr 1fr; } +.elementor-cart--buttons-stacked .elementor-cart__footer-buttons { + grid-template-columns: 1fr; } + +.elementor-widget-container > .product-prices, +.elementor-widget-container > .product-variants, +.elementor-widget-container > .product-customization, +.elementor-widget-container > .images-container { + margin: 0; + padding: 0; } + +.ce-product-name { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; } +.ce-product-prices--layout-inline .ce-product-prices { + display: flex; + flex-wrap: wrap; + align-items: center; } + +.ce-product-price-regular { + font-weight: 400; + text-decoration: line-through; } +.ce-product-price { + display: inline-flex; + align-items: center; } +.ce-product-price-unit { + font-size: 0.85em; } + +.ce-product-features { + width: 100%; + max-width: 100%; } + +.elementor-skin-carousel img.elementor-carousel-image { + height: auto; } + +.elementor-skin-carousel.elementor-pagination-position-inside .swiper-pagination-fraction, +.elementor-skin-carousel.elementor-pagination-position-inside .swiper-container-horizontal > .swiper-pagination-bullets, .elementor-skin-coverflow.elementor-pagination-position-inside .swiper-pagination-fraction, +.elementor-skin-coverflow.elementor-pagination-position-inside .swiper-container-horizontal > .swiper-pagination-bullets { + bottom: 5px; } + +.elementor-skin-carousel.elementor-pagination-position-outside .swiper-container, .elementor-skin-coverflow.elementor-pagination-position-outside .swiper-container { + padding-bottom: 30px; } + +.elementor-skin-carousel.elementor-pagination-position-outside .swiper-pagination-fraction, +.elementor-skin-carousel.elementor-pagination-position-outside .swiper-container-horizontal > .swiper-pagination-bullets, .elementor-skin-coverflow.elementor-pagination-position-outside .swiper-pagination-fraction, +.elementor-skin-coverflow.elementor-pagination-position-outside .swiper-container-horizontal > .swiper-pagination-bullets { + bottom: 0; } + +.elementor-skin-carousel.elementor-pagination-position-outside .elementor-swiper-button, .elementor-skin-coverflow.elementor-pagination-position-outside .elementor-swiper-button { + top: calc(50% - 30px / 2); } + +.elementor-skin-slideshow .elementor-main-swiper { + height: auto; + position: relative; } +.elementor-skin-slideshow .swiper-zoom-container { + cursor: crosshair; } +.elementor-skin-slideshow .ce-swiper-dragging img { + cursor: grabbing; } + +.elementor-skin-slideshow .elementor-thumbnails-swiper .elementor-custom-embed-play i { + font-size: 50px; } + +.elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide { + cursor: pointer; } + .elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide:not(.swiper-slide-active):after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; } + .elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide.swiper-slide-active:after { + pointer-events: none; } + .elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide:not(.swiper-slide-active):after { + background-color: rgba(0, 0, 0, 0.3); } + +img.elementor-carousel-image { + width: 100%; + height: 100%; + object-fit: cover; + position: relative; } + +.elementor-carousel-image-overlay { + position: absolute; + pointer-events: none; + top: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + width: 100%; + height: 100%; + padding: 20px; + color: #fff; + background-color: rgba(129, 138, 145, 0.8); + transition: transform .5s, opacity .5s; } + .elementor-carousel-image-overlay i { + font-size: 21px; } + +.swiper-pagination-bullets { + color: #fff; + cursor: default; } + +.swiper-slide { + border-style: solid; + border-width: 0; + transition-property: border, background, transform; + overflow: hidden; } + .swiper-slide:not(:hover) .e-overlay-animation-fade { + opacity: 0; } + .swiper-slide:not(:hover) .e-overlay-animation-slide-up { + transform: translateY(100%); } + .swiper-slide:not(:hover) .e-overlay-animation-slide-down { + transform: translateY(-100%); } + .swiper-slide:not(:hover) .e-overlay-animation-slide-right { + transform: translateX(-100%); } + .swiper-slide:not(:hover) .e-overlay-animation-slide-left { + transform: translateX(100%); } + .swiper-slide:not(:hover) .e-overlay-animation-zoom-in { + transform: scale(0.5); + opacity: 0; } + .swiper-slide a { + display: inline; } + +.elementor-swiper { + position: relative; } + +.elementor-main-swiper { + position: static; } + .elementor-main-swiper .elementor-swiper-button-prev { + left: 10px; } + .elementor-main-swiper .elementor-swiper-button-next { + right: 10px; } + +.elementor-widget-product-images.elementor-position-right .elementor-widget-container, +.elementor-widget-product-images.elementor-position-left .elementor-widget-container { + display: flex; } +.elementor-widget-product-images.elementor-position-right .elementor-widget-container { + flex-direction: row-reverse; } +.elementor-widget-product-images.elementor-position-right .elementor-thumbnails-swiper, +.elementor-widget-product-images.elementor-position-left .elementor-thumbnails-swiper { + height: 100%; } + +.ce-product-description-short { + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; } + +.ce-product-badges { + display: inline-flex; } +.ce-product-badges--stacked .ce-product-badges { + flex-direction: column; } +.ce-product-badge { + padding: 4px 5px 4px 5px; + color: #fff; + text-align: center; + background: #2fb5d2; } +.ce-product-badge-sale { + background: #f39d72; } + +.ce-product-meta, +.ce-product-meta--layout-table .ce-product-meta__detail { + display: flex; } +.ce-product-meta--layout-inline .ce-product-meta { + flex-wrap: wrap } +.ce-product-meta--layout-stacked .ce-product-meta, +.ce-product-meta--layout-table .ce-product-meta { + flex-direction: column; } +.ce-product-meta .ce-product-meta__detail { + position: relative; } +.ce-product-meta .ce-product-meta__detail:after { + position: absolute; + border-width: 0; + bottom: 0; + right: 0; + width: 100%; } +.ce-product-meta--layout-inline .ce-product-meta__detail:after { + top: 50%; + right: auto; + left: 0; + width: auto; + height: 100%; + transform: translateY(-50%); } +.ce-product-meta--layout-table .ce-product-meta__label { + min-width: 108px; } +.ce-product-meta .ce-product-meta__label { + font-weight: 700; } + +.ce-product-stock .ce-product-stock__availability { + display: inline-flex; + align-items: center; } +.ce-product-stock .ce-product-stock__availability-label, +.ce-product-stock .ce-product-stock__min-quantity { + line-height: 1; } + +.ce-product-quantity--view-default .ce-product-quantity__btn { + display: none; } +.ce-product-quantity--view-default input[type=number] { + background: #fff; + -moz-appearance: textfield; } +.ce-product-quantity--view-default input[type=number]:focus, +.ce-product-quantity--view-default input[type=number]:hover { + -moz-appearance: initial; } +.ce-product-quantity--view-default input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: inner-spin-button; } +.elementor-widget-product-quantity:not(.ce-product-quantity--view-default) input[type=number] { + appearance: none; + -webkit-appearance: none; + -moz-appearance: textfield; } +.elementor-widget-product-quantity.elementor-align-justify .ce-product-quantity, +.elementor-widget-product-quantity.elementor-align-justify input[type=number] { + width: 100%; } +@media (max-width: 1024px) { + .elementor-widget-product-quantity.elementor-tablet-align-justify .ce-product-quantity, + .elementor-widget-product-quantity.elementor-tablet-align-justify input[type=number] { + width: 100%; } + .elementor-widget-product-quantity[class*='tablet-align']:not(.elementor-tablet-align-justify) .ce-product-quantity { + width: auto; } } +@media (max-width: 767px) { + .elementor-widget-product-quantity.elementor-mobile-align-justify .ce-product-quantity, + .elementor-widget-product-quantity.elementor-mobile-align-justify input[type=number] { + width: 100%; } + .elementor-widget-product-quantity[class*='mobile-align']:not(.elementor-mobile-align-justify) .ce-product-quantity { + width: auto; } } +.ce-product-quantity { + position: relative; + display: inline-block; } +.ce-product-quantity input[type=number] { + width: 5em; + text-align: center; + transition: all .5s; } +.ce-product-quantity .ce-product-quantity__btn { + width: 1em; + height: 1em; + line-height: 1; + font-size: 15px; + overflow: hidden; + cursor: pointer; + z-index: 1; + transition: all .5s; } +.ce-product-quantity--view-stacked input[type=number] { + background: #fff; + padding-left: 1.5em; } +.ce-product-quantity--view-stacked .ce-product-quantity__btn { + position: absolute; + left: 0; + width: 1.5em; + height: auto; + min-height: 3px; + border: solid 0; + display: flex; + align-items: center; + justify-content: center; } +.ce-product-quantity--view-stacked .ce-product-quantity__btn:hover { + background-color: rgba(0, 0, 0, 0.18); } +.ce-product-quantity--view-stacked .ce-product-quantity__plus { + margin: 1px 1px 0; + top: 0; + bottom: 50%; } +.ce-product-quantity--view-stacked .ce-product-quantity__minus { + margin: 0 1px 1px; + top: 50%; + bottom: 0; } +.ce-product-quantity--view-inline .ce-product-quantity { + display: inline-flex; + flex-wrap: nowrap; } +.ce-product-quantity--view-inline input[type=number] { + margin: 0 5px; + border-width: 0; + width: 42px; } +.ce-product-quantity--view-inline .ce-product-quantity__btn { + flex-shrink: 0; + background: #818a91; + color: #fff; + text-align: center; + box-sizing: content-box; } + +.ce-product-variants { + overflow: hidden; } +.ce-product-variants input[type=radio] { + display: none; } +.ce-product-variants label { + margin: 0; + padding: 0; } +.ce-product-variants--layout-inline .ce-product-variants, +.ce-product-variants--layout-inline .ce-product-variants__item, +.ce-product-variants--layout-table .ce-product-variants__item, +.ce-product-variants__patterns, +.ce-product-variants__count, +.ce-product-variants__options, +.ce-product-variants__radio-wrapper { + display: flex; } +.ce-product-variants--layout-inline:not(.ce-product-variants--label-inline) .ce-product-variants__item { + flex-direction: column; } +.ce-product-variants__patterns, +.ce-product-variants__options { + flex-wrap: wrap; } +.ce-product-variants__pattern { + background-clip: content-box; + cursor: pointer; } +.ce-product-variants__texture { + background-size: contain; } +.ce-product-variants__option { + text-align: center; + cursor: pointer; } +.ce-product-variants__count { + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + cursor: default; } + +.ce-product-rating, +.ce-product-rating--layout-inline .elementor-widget-container { + display: inline-flex; + flex-wrap: wrap; + align-items: center; } +.ce-product-rating--layout-stacked .elementor-widget-container { + flex-direction: column; } + +.ce-attachment .elementor-icon-box-title { + display: inline-block; } + +.elementor[data-elementor-type$="quick-view"] .elementor-section-wrap { + text-align: right; } +#ce-product-quick-view { + display: flex; + padding: 0; } +#ce-product-quick-view .dialog-widget-content { + position: static !important; + overflow: visible; + margin: 0; + border-radius: 0; + max-width: 100%; + max-height: 100vh; } +#ce-product-quick-view .dialog-message { + position: relative; + max-height: 100vh; + overflow: auto; + -webkit-overflow-scrolling: touch; + background: #fff; } +#ce-product-quick-view .dialog-close-button, +#ce-product-quick-view .dialog-buttons-wrapper { + display: none; } +#ce-product-quick-view a[data-elementor-lightbox-slideshow] { + pointer-events: none; } + +.elementor-motion-effects-element, .elementor-motion-effects-layer { + transition-property: transform, opacity; + transition-timing-function: cubic-bezier(0, 0.33, 0.07, 1.03); + transition-duration: 1s; } + +.elementor-motion-effects-container { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; } +.elementor-motion-effects-layer { + position: absolute; + top: 0; + left: 0; + background-repeat: no-repeat; + background-size: cover; } +.elementor-motion-effects-perspective { + perspective: 1200px; } + +.e-transform-hover .elementor-widget-container, +.e-transform .elementor-widget-container { + transform: perspective(var(--e-transform-perspective, 0)) + rotateZ(var(--e-transform-rotateZ, 0)) rotateX(var(--e-transform-rotateX, 0)) rotateY(var(--e-transform-rotateY, 0)) + translateX(var(--e-transform-translateX, 0)) translateY(var(--e-transform-translateY, 0)) + scaleX(calc( var(--e-transform-flipX, 1) * var(--e-transform-scaleX, var(--e-transform-scale, 1)) )) + scaleY(calc( var(--e-transform-flipY, 1) * var(--e-transform-scaleY, var(--e-transform-scale, 1)) )) + skewX(var(--e-transform-skewX, 0)) skewY(var(--e-transform-skewY, 0)); + transform-origin: var(--e-transform-origin-y, center) var(--e-transform-origin-x, center); } + +.ce-disabled { + pointer-events: none; + opacity: .35; } +/* PS 1.7.8 Compatibility fix */ +.elementor-button[data-button-action="add-to-cart"] * { + pointer-events: none; } +/* fix for TinyMCE style */ +.elementor-text-editor p, +.elementor-tab-content p, +.elementor-image-hotspot-description p, +.ce-product-description > p, +.ce-product-description-short > p { + color: inherit !important; + font: inherit !important; + line-height: inherit !important; + letter-spacing: inherit !important; } +/* fix for carousels */ +.slick-slider .slick-slide-inner > * { + width: 100% !important; + padding: 0 !important; } +.elementor-image-carousel-wrapper.featured-products { + float: none; } +/* fix: blank white page on editor */ +.elementor-html > body { + display: block !important; } +/* background-attachment: fixed; compatibility fix for iOS */ +@supports (-webkit-touch-callout: none) { + .elementor-element { + background-attachment: scroll !important; } } +/* fix for Classic theme */ +.page-content.page-cms .elementor { + text-align: right; } \ No newline at end of file diff --git a/modules/creativeelements/views/css/frontend-rtl.min.css b/modules/creativeelements/views/css/frontend-rtl.min.css new file mode 100644 index 00000000..64283248 --- /dev/null +++ b/modules/creativeelements/views/css/frontend-rtl.min.css @@ -0,0 +1 @@ +.dialog-widget-content{background-color:#fff;position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5;box-sizing:border-box}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{font-size:15px;color:#495157;padding:30px 0 10px;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 30px 30px;min-height:50px}.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-header,.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button{font-family:Roboto;width:50%;border:none;background:0 0;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:hover{background-color:#f4f6f7}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;left:30px;font-size:15px;line-height:1}.dialog-close-button:not(:hover){opacity:.4}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}.dialog-confirm-widget .dialog-button:first-child{border-left:1px solid #e6e9ec}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-calc,.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-initial{max-width:100%}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-aspect-ratio-916 .elementor-fit-aspect-ratio{padding-bottom:177.8%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0;background-color:#000}.elementor-fit-aspect-ratio video{width:100%}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-header{padding:0;background-color:#fff;box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding-top:25px}.elementor-templates-modal .dialog-content{height:100%}.elementor-templates-modal .dialog-loading{display:none}.elementor-templates-modal__header{display:flex;align-items:center;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{line-height:1;text-transform:uppercase;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:right;padding-right:15px}.elementor-templates-modal__header__logo-area>*{display:flex;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:linear-gradient(-135deg,#f2295b,#434363);border-radius:2px;margin-left:10px}.elementor-templates-modal__header__logo__title{padding-top:2px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:flex;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:flex;align-items:center;justify-content:center;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close--normal{width:45px;border-right:1px solid #e6e9ec}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px 20px 10px 10px;margin-left:10px;color:#fff;background-color:#a4afb7;font-size:11px;font-weight:400;line-height:1;text-transform:uppercase;border-radius:2px;cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-right:10px;margin-right:15px;border-right:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:#fff}.elementor-hidden{display:none}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:'';display:block;clear:both;width:0;height:0}.elementor{-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual}.elementor *,.elementor :after,.elementor :before{box-sizing:border-box}.elementor a{box-shadow:none;text-decoration:none}.elementor hr{margin:0;background-color:transparent}.elementor img{height:auto;max-width:100%;border:none;border-radius:0;box-shadow:none}.elementor .elementor-widget:not(.elementor-widget-text-editor) figure{margin:0}.elementor embed,.elementor iframe,.elementor object,.elementor video{max-width:100%;width:100%;margin:0;line-height:1;border:none}.elementor .elementor-custom-embed{line-height:0}.elementor .elementor-background,.elementor .elementor-background-holder,.elementor .elementor-background-video-container{height:100%;width:100%;top:0;left:0;position:absolute;overflow:hidden;z-index:0}.elementor .elementor-background-video-container{transition:opacity 1s;pointer-events:none}.elementor .elementor-background-video-container.elementor-loading{opacity:0}.elementor .elementor-background-video-embed{max-width:none}.elementor .elementor-background-video-embed,.elementor .elementor-background-video-hosted{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%)}.elementor .elementor-background-video{position:absolute;max-width:none;top:50%;left:50%;transform:translateY(-50%) translateX(-50%)}.elementor .elementor-html5-video{object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor-widget-wrap>.elementor-element.elementor-absolute{position:absolute}.elementor-widget-wrap>.elementor-element.elementor-fixed{position:fixed}.elementor-widget-wrap .elementor-element.elementor-widget__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget__width-calc,.elementor-widget-wrap .elementor-element.elementor-widget__width-initial{max-width:100%}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{z-index:1}.elementor-invisible{visibility:hidden}.elementor-align-center{text-align:center}.elementor-align-center .elementor-button{width:auto}.elementor-align-right{text-align:right}.elementor-align-right .elementor-button{width:auto}.elementor-align-left{text-align:left}.elementor-align-left .elementor-button{width:auto}.elementor-align-justify .elementor-button{width:100%}.elementor-custom-embed-play{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;opacity:.8;text-shadow:1px 0 6px rgba(0,0,0,.3);transition:.5s}.elementor-custom-embed-play.elementor-playing i{font-family:FontAwesome;animation:2s linear infinite fa-spin}.elementor-custom-embed-play.elementor-playing i:before{content:"\f1ce"}.elementor-swiper-button{position:absolute;display:inline-flex;z-index:1;cursor:pointer;font-size:32px;color:rgba(238,238,238,.9);top:50%;transform:translateY(-50%)}.elementor-swiper-button.swiper-button-disabled{opacity:.3}.elementor-tag{display:inline-flex}@media (max-width:1024px){.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-calc,.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-initial{max-width:100%}.elementor-tablet-align-center{text-align:center}.elementor-tablet-align-center .elementor-button{width:auto}.elementor-tablet-align-right{text-align:right}.elementor-tablet-align-right .elementor-button{width:auto}.elementor-tablet-align-left{text-align:left}.elementor-tablet-align-left .elementor-button{width:auto}.elementor-tablet-align-justify .elementor-button{width:100%}}@media (max-width:767px){.elementor-mobile-align-center{text-align:center}.elementor-mobile-align-center .elementor-button{width:auto}.elementor-mobile-align-right{text-align:right}.elementor-mobile-align-right .elementor-button{width:auto}.elementor-mobile-align-left{text-align:left}.elementor-mobile-align-left .elementor-button{width:auto}.elementor-mobile-align-justify .elementor-button{width:100%}}.elementor-section{position:relative}.elementor-section .elementor-container{display:flex;margin-right:auto;margin-left:auto;position:relative}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-section.elementor-section-stretched{position:relative;width:100%}.elementor-section.elementor-section-items-top>.elementor-container{align-items:flex-start}.elementor-section.elementor-section-items-middle>.elementor-container{align-items:center}.elementor-section.elementor-section-items-bottom>.elementor-container{align-items:flex-end}.elementor-section-content-top>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{align-items:flex-start}.elementor-section-content-middle>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{align-items:center}.elementor-section-content-bottom>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{align-items:flex-end}.elementor-row{width:100%;display:flex}@media (max-width:1024px){.elementor-row{flex-wrap:wrap}}.elementor-column-wrap{width:100%;position:relative;display:flex}.elementor-widget-wrap{position:relative;width:100%;flex-wrap:wrap;align-content:flex-start}.elementor-html .elementor-widget-wrap,.elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap{display:flex}.elementor-widget-wrap>.elementor-element{width:100%}.elementor-widget{position:relative}.elementor-widget:not(:last-child){margin-bottom:20px}.elementor-widget:not(:last-child).elementor-absolute,.elementor-widget:not(:last-child).elementor-widget__width-auto,.elementor-widget:not(:last-child).elementor-widget__width-calc,.elementor-widget:not(:last-child).elementor-widget__width-initial{margin-bottom:0}.elementor-column{position:relative;min-height:1px;display:flex}.elementor-column-gap-narrow>.elementor-row>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-row>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-row>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-row>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-row>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:768px){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}.elementor-column.elementor-col-10,.elementor-column[data-col="10"]{width:10%}.elementor-column.elementor-col-11,.elementor-column[data-col="11"]{width:11.111%}.elementor-column.elementor-col-12,.elementor-column[data-col="12"]{width:12.5%}.elementor-column.elementor-col-14,.elementor-column[data-col="14"]{width:14.285%}.elementor-column.elementor-col-16,.elementor-column[data-col="16"]{width:16.666%}.elementor-column.elementor-col-20,.elementor-column[data-col="20"]{width:20%}.elementor-column.elementor-col-25,.elementor-column[data-col="25"]{width:25%}.elementor-column.elementor-col-30,.elementor-column[data-col="30"]{width:30%}.elementor-column.elementor-col-33,.elementor-column[data-col="33"]{width:33.333%}.elementor-column.elementor-col-40,.elementor-column[data-col="40"]{width:40%}.elementor-column.elementor-col-50,.elementor-column[data-col="50"]{width:50%}.elementor-column.elementor-col-60,.elementor-column[data-col="60"]{width:60%}.elementor-column.elementor-col-66,.elementor-column[data-col="66"]{width:66.666%}.elementor-column.elementor-col-70,.elementor-column[data-col="70"]{width:70%}.elementor-column.elementor-col-75,.elementor-column[data-col="75"]{width:75%}.elementor-column.elementor-col-80,.elementor-column[data-col="80"]{width:80%}.elementor-column.elementor-col-83,.elementor-column[data-col="83"]{width:83.333%}.elementor-column.elementor-col-90,.elementor-column[data-col="90"]{width:90%}.elementor-column.elementor-col-100,.elementor-column[data-col="100"]{width:100%}}@media (max-width:479px){.elementor-column.elementor-xs-10{width:10%}.elementor-column.elementor-xs-11{width:11.111%}.elementor-column.elementor-xs-12{width:12.5%}.elementor-column.elementor-xs-14{width:14.285%}.elementor-column.elementor-xs-16{width:16.666%}.elementor-column.elementor-xs-20{width:20%}.elementor-column.elementor-xs-25{width:25%}.elementor-column.elementor-xs-30{width:30%}.elementor-column.elementor-xs-33{width:33.333%}.elementor-column.elementor-xs-40{width:40%}.elementor-column.elementor-xs-50{width:50%}.elementor-column.elementor-xs-60{width:60%}.elementor-column.elementor-xs-66{width:66.666%}.elementor-column.elementor-xs-70{width:70%}.elementor-column.elementor-xs-75{width:75%}.elementor-column.elementor-xs-80{width:80%}.elementor-column.elementor-xs-83{width:83.333%}.elementor-column.elementor-xs-90{width:90%}.elementor-column.elementor-xs-100{width:100%}}@media (max-width:767px){.elementor-column.elementor-sm-10{width:10%}.elementor-column.elementor-sm-11{width:11.111%}.elementor-column.elementor-sm-12{width:12.5%}.elementor-column.elementor-sm-14{width:14.285%}.elementor-column.elementor-sm-16{width:16.666%}.elementor-column.elementor-sm-20{width:20%}.elementor-column.elementor-sm-25{width:25%}.elementor-column.elementor-sm-30{width:30%}.elementor-column.elementor-sm-33{width:33.333%}.elementor-column.elementor-sm-40{width:40%}.elementor-column.elementor-sm-50{width:50%}.elementor-column.elementor-sm-60{width:60%}.elementor-column.elementor-sm-66{width:66.666%}.elementor-column.elementor-sm-70{width:70%}.elementor-column.elementor-sm-75{width:75%}.elementor-column.elementor-sm-80{width:80%}.elementor-column.elementor-sm-83{width:83.333%}.elementor-column.elementor-sm-90{width:90%}.elementor-column.elementor-sm-100{width:100%}}@media (min-width:768px) and (max-width:1024px){.elementor-column.elementor-md-10{width:10%}.elementor-column.elementor-md-11{width:11.111%}.elementor-column.elementor-md-12{width:12.5%}.elementor-column.elementor-md-14{width:14.285%}.elementor-column.elementor-md-16{width:16.666%}.elementor-column.elementor-md-20{width:20%}.elementor-column.elementor-md-25{width:25%}.elementor-column.elementor-md-30{width:30%}.elementor-column.elementor-md-33{width:33.333%}.elementor-column.elementor-md-40{width:40%}.elementor-column.elementor-md-50{width:50%}.elementor-column.elementor-md-60{width:60%}.elementor-column.elementor-md-66{width:66.666%}.elementor-column.elementor-md-70{width:70%}.elementor-column.elementor-md-75{width:75%}.elementor-column.elementor-md-80{width:80%}.elementor-column.elementor-md-83{width:83.333%}.elementor-column.elementor-md-90{width:90%}.elementor-column.elementor-md-100{width:100%}.elementor-reverse-tablet>.elementor-container>.elementor-row>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(10){order:1}}.elementor-section-tabbed>.elementor-container,.elementor-section-tabbed>.elementor-container>.elementor-row{flex-wrap:wrap}.elementor-nav-tabs.elementor-nav--layout-horizontal{width:100%}.elementor-nav-tabs+.elementor-row>.elementor-column{min-width:100%}.elementor-nav-tabs+.elementor-row>.elementor-column:not(.elementor-active){position:absolute;top:-1000000px;visibility:hidden;pointer-events:none}.elementor-nav-tabs>.elementor-nav{overflow:hidden}.elementor-nav-tabs>.elementor-nav::-webkit-scrollbar{display:none}.elementor-section-tabbed{counter-reset:ce-tab}.elementor-section-tabbed li.menu-item-type-column{counter-increment:ce-tab}.elementor-section-tabbed .ce-tab-num::after{content:"Tab #" counter(ce-tab)}ul.elementor-icon-list-items.elementor-inline-items{display:flex;flex-wrap:wrap}ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item{word-break:break-word}.elementor-grid .elementor-grid-item{word-break:break-word;min-width:0}.elementor-grid-0 .elementor-grid{display:flex;overflow:hidden;flex-wrap:wrap}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}@media (max-width:1024px){.elementor-grid-tablet-0 .elementor-grid{display:flex;overflow:hidden;flex-wrap:wrap}.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}@media (min-width:1025px){#elementor-device-mode:after{content:'desktop'}}@media (min-width:768px) and (max-width:1024px){#elementor-device-mode:after{content:'tablet'}}@media (max-width:767px){.elementor-reverse-mobile>.elementor-container>.elementor-row>:first-child{order:10}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(2){order:9}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(3){order:8}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(4){order:7}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(5){order:6}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(6){order:5}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(7){order:4}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(8){order:3}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(9){order:2}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(10){order:1}.elementor-column{width:100%}.elementor-grid-mobile-0 .elementor-grid{display:flex;overflow:hidden;flex-wrap:wrap}.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}#elementor-device-mode:after{content:'mobile'}}.elementor-form-fields-wrapper{display:flex;flex-wrap:wrap}.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group .elementor-field-subgroup,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>.elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>input,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>textarea{flex-basis:100%;max-width:100%}.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group .elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group>input{flex-grow:1}.elementor-field-group{flex-wrap:wrap;align-items:center}.elementor-field-group.elementor-field-type-submit{align-items:flex-end}.elementor-field-group .elementor-field-textual{width:100%;max-width:100%;border:1px solid #818a91;background-color:transparent;color:#373a3c;vertical-align:middle;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;outline:0}.elementor-field-group .elementor-field-textual::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-moz-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-select-wrapper{display:flex;position:relative;width:100%}.elementor-field-group .elementor-select-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:inherit;font-size:inherit;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;flex-basis:100%;padding-left:20px}.elementor-field-group .elementor-select-wrapper:before{content:'\f0d7';font-family:FontAwesome;font-size:15px;position:absolute;top:50%;transform:translateY(-50%);left:10px;pointer-events:none}.elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before{content:''}.elementor-field-subgroup{display:flex;flex-wrap:wrap}.elementor-field-subgroup .elementor-field-option label{display:inline-block}.elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option{padding-left:10px}.elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option{flex-basis:100%}.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option input,.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option label,.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option input,.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option label,.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option input,.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option label{display:inline}.elementor-field-label{text-align:right;cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:'*';color:red;padding-right:.2em}.elementor-field-textual{line-height:1.4}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;border-radius:2px}.elementor-field-textual.elementor-size-sm{font-size:15px;min-height:40px;padding:5px 14px;border-radius:3px}.elementor-field-textual.elementor-size-md{font-size:16px;min-height:47px;padding:6px 16px;border-radius:4px}.elementor-field-textual.elementor-size-lg{font-size:18px;min-height:59px;padding:7px 20px;border-radius:5px}.elementor-field-textual.elementor-size-xl{font-size:20px;min-height:72px;padding:8px 24px;border-radius:6px}.elementor-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-button-align-stretch .elementor-field-type-submit button{flex-basis:100%}.elementor-button-align-start .elementor-field-type-submit{justify-content:flex-end}.elementor-button-align-end .elementor-field-type-submit{justify-content:flex-start}@media screen and (max-width:1024px){.elementor-tablet-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-tablet-button-align-stretch .elementor-field-type-submit button{flex-basis:100%}.elementor-tablet-button-align-start .elementor-field-type-submit{justify-content:flex-end}.elementor-tablet-button-align-end .elementor-field-type-submit{justify-content:flex-start}}@media screen and (max-width:767px){.elementor-mobile-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-mobile-button-align-stretch .elementor-field-type-submit button{flex-basis:100%}.elementor-mobile-button-align-start .elementor-field-type-submit{justify-content:flex-end}.elementor-mobile-button-align-end .elementor-field-type-submit{justify-content:flex-start}}.elementor-error .elementor-field{border-color:#d9534f}.elementor-error .help-inline{color:#d9534f;font-size:.9em}.elementor-message{margin:10px 0;font-size:1em;line-height:1}.elementor-message:before{content:"\f00c";display:inline-block;font-family:fontawesome;font-weight:400;font-style:normal;vertical-align:middle;margin-right:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\f00d"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-top:0;padding-bottom:0;border:0}.elementor-form .elementor-button>span{display:flex;justify-content:center}.elementor-form .elementor-button .elementor-align-icon-right{order:0}.elementor-form .elementor-button .elementor-align-icon-left{order:2}.elementor-form .elementor-button.elementor-size-xs{min-height:33px}.elementor-form .elementor-button.elementor-size-sm{min-height:40px}.elementor-form .elementor-button.elementor-size-md{min-height:47px}.elementor-form .elementor-button.elementor-size-lg{min-height:59px}.elementor-form .elementor-button.elementor-size-xl{min-height:72px}.elementor .elementor-section-wrap,.elementor-element .elementor-widget-container{transition:opacity var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s),background var(--e-background-transition-duration, .3s),border var(--e-border-transition-duration, .3s),border-radius var(--e-border-transition-duration, .3s),box-shadow var(--e-border-transition-duration, .3s)}.e-transform-hover .elementor-widget-container{transition:transform var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s),opacity var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s),background var(--e-background-transition-duration, .3s),border var(--e-border-transition-duration, .3s),border-radius var(--e-border-transition-duration, .3s),box-shadow var(--e-border-transition-duration, .3s)}.elementor-overflow-hidden .elementor-widget-container{overflow:hidden}.elementor-element .elementor-widget-container:empty{display:none}.elementor-widget-text-path{font-size:20px;text-align:var(--alignment,right)}.elementor-widget-text-path svg{width:var(--width,500px);max-width:100%;height:auto;overflow:visible;word-spacing:var(--word-spacing,normal);transform:rotate(var(--rotate,0))}.elementor-widget-text-path svg path{vector-effect:non-scaling-stroke;fill:var(--path-fill,transparent);stroke:var(--stroke-color,transparent);stroke-width:var(--stroke-width,1px);transition:var(--stroke-transition, .3s) all}.elementor-widget-text-path svg:hover path{--path-fill:var(--path-fill-hover);--stroke-color:var(--stroke-color-hover);--stroke-width:var(--stroke-width-hover)}.elementor-widget-text-path svg text{--fill:var(--text-color);fill:var(--fill);direction:var(--direction,rtl);transition:var(--transition, .3s) all}.elementor-widget-text-path svg text:hover{--color:var(--text-color-hover, var(--text-color));--fill:var(--color);color:var(--color)}.elementor-accordion{text-align:right}.elementor-accordion .elementor-accordion-item{border:1px solid #d4d4d4}.elementor-accordion .elementor-accordion-item+.elementor-accordion-item{border-top:none}.elementor-accordion .elementor-tab-title{margin:0;padding:15px 20px;font-weight:700;line-height:1;cursor:pointer;outline:0}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right{float:right;text-align:right}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left{float:left;text-align:left}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed{display:block}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened,.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed{display:none}.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened{display:block}.elementor-accordion .elementor-tab-content{display:none;padding:15px 20px;border-top:1px solid #d4d4d4}.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:right}.elementor-alert .elementor-alert-title{display:block;font-weight:700}.elementor-alert .elementor-alert-description{font-size:13px}.elementor-alert button.elementor-alert-dismiss{position:absolute;left:10px;top:10px;padding:3px;font-size:20px;line-height:1;background:0 0;color:inherit!important;border:none;cursor:pointer}.elementor-alert.elementor-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert.elementor-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert.elementor-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert.elementor-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:767px){.elementor-accordion .elementor-tab-title{padding:12px 15px}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{width:1.2em}.elementor-accordion .elementor-tab-content{padding:7px 15px}.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}.elementor-tab-title a{color:inherit!important}.elementor-button{display:inline-block;border:none;line-height:1;background-color:#818a91;color:#fff;text-align:center;transition:.5s}a.elementor-button:not(#e),a.elementor-button:not(#e):focus,a.elementor-button:not(#e):hover,a.elementor-button:not(#e):visited{color:#fff}.elementor-button-content-wrapper{display:flex;gap:5px;justify-content:center;align-items:baseline}.elementor-button-icon{flex-grow:0;order:5}.elementor-button-text{flex-grow:1;order:10;display:inline-block}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;border-radius:2px}.elementor-button.elementor-size-sm{font-size:15px;padding:12px 24px;border-radius:3px}.elementor-button.elementor-size-md{font-size:16px;padding:15px 30px;border-radius:4px}.elementor-button.elementor-size-lg{font-size:18px;padding:20px 40px;border-radius:5px}.elementor-button.elementor-size-xl{font-size:20px;padding:25px 50px;border-radius:6px}.elementor-button .elementor-align-icon-right{order:5}.elementor-button .elementor-align-icon-left{order:15}.elementor-button .elementor-button-text{display:inline-block}.elementor-button span{text-decoration:inherit}.elementor-element.elementor-button-info .elementor-button{background-color:#5bc0de}.elementor-element.elementor-button-success .elementor-button{background-color:#5cb85c}.elementor-element.elementor-button-warning .elementor-button{background-color:#f0ad4e}.elementor-element.elementor-button-danger .elementor-button{background-color:#d9534f}.elementor-widget-button .elementor-button .elementor-button-info{background-color:#5bc0de}.elementor-widget-button .elementor-button .elementor-button-success{background-color:#5cb85c}.elementor-widget-button .elementor-button .elementor-button-warning{background-color:#f0ad4e}.elementor-widget-button .elementor-button .elementor-button-danger{background-color:#d9534f}.elementor-counter .elementor-counter-number-wrapper{display:flex;font-size:69px;font-weight:600;color:#222;line-height:1}.elementor-counter .elementor-counter-number-prefix,.elementor-counter .elementor-counter-number-suffix{flex-grow:1;white-space:pre-wrap}.elementor-counter .elementor-counter-number-prefix{text-align:left}.elementor-counter .elementor-counter-number-suffix{text-align:right}.elementor-counter .elementor-counter-title{text-align:center;font-size:19px;font-weight:400;color:#666;line-height:2.5}.elementor-widget-divider .elementor-divider{line-height:0;font-size:0}.elementor-widget-divider .elementor-divider-separator{display:inline-block}.elementor-image-gallery--layout-grid .elementor-image-gallery{flex-flow:row wrap}.elementor-image-gallery--layout-masonry .elementor-image-gallery{max-height:1000px;overflow:hidden;flex-flow:column wrap}.elementor-image-gallery{display:flex}.elementor-image-gallery figure{text-align:center;width:100%;margin:0 auto}.elementor-image-gallery img{width:100%;margin:0 auto}.elementor-image-gallery figcaption{margin:0}.elementor-widget-google_maps iframe{height:300px}.elementor-widget-heading .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title>a{color:inherit!important;font-size:inherit!important}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}.elementor-icon-wrapper{line-height:0}.elementor-icon{display:inline-block;line-height:1;transition:.5s;color:#818a91;font-size:50px;text-align:center}.elementor-icon:hover{color:#818a91}.elementor-icon i{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before{position:absolute;left:50%;transform:translateX(-50%)}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#818a91;color:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#818a91;border:3px solid #818a91;background-color:transparent}.elementor-shape-circle .elementor-icon{border-radius:50%}@media (min-width:768px){.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{text-align:left;flex-direction:row}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:right;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img{margin:auto}.elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper{align-items:flex-start}.elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper{align-items:center}.elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper{align-items:flex-end}}@media (max-width:767px){.elementor-widget-icon-box .elementor-icon-box-icon{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-icon-box .elementor-icon-box-wrapper{text-align:center}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit!important}.elementor-widget-icon-box .elementor-icon-box-content{flex-grow:1}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}.elementor-widget.elementor-icon-list--layout-inline .elementor-widget-container{overflow:hidden}.elementor-widget .elementor-icon-list-items.elementor-inline-items{margin-right:-8px;margin-left:-8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item{margin-right:8px;margin-left:8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after{width:auto;right:auto;position:relative;height:100%;top:50%;transform:translateY(-50%);border-top:0;border-bottom:0;border-right:0;border-left-width:1px;border-style:solid;left:-8px}.elementor-widget .elementor-icon-list-items{list-style-type:none;margin:0;padding:0}.elementor-widget .elementor-icon-list-item{margin:0;padding:0;position:relative}.elementor-widget .elementor-icon-list-item:after{position:absolute;bottom:0;width:100%}.elementor-widget .elementor-icon-list-item,.elementor-widget .elementor-icon-list-item a{display:flex;align-items:flex-start}.elementor-widget .elementor-icon-list-item a{width:100%}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{align-self:center;padding-right:5px}.elementor-widget .elementor-icon-list-icon{flex-shrink:0}.elementor-widget.elementor-align-center .elementor-icon-list-item,.elementor-widget.elementor-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-align-left .elementor-icon-list-item,.elementor-widget.elementor-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-align-left .elementor-inline-items{justify-content:flex-end}.elementor-widget.elementor-align-right .elementor-icon-list-item,.elementor-widget.elementor-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget.elementor-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after{left:0}@media (max-width:1024px){.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-items{justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-items{justify-content:flex-end}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:767px){.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-items{justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-items{justify-content:flex-end}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a{justify-content:flex-end;text-align:left}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{justify-content:flex-start}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a{justify-content:flex-start;text-align:right}.elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after{left:0}.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image{text-align:center}.elementor-widget-image .elementor-image figure>a,.elementor-widget-image .elementor-image>a{display:inline-block}.elementor-widget-image .elementor-image figure>a img[src$=".svg"],.elementor-widget-image .elementor-image>a img[src$=".svg"]{width:48px}.elementor-widget-image .elementor-image img{vertical-align:middle;display:inline-block}.elementor-widget-image .elementor-image.elementor-image-shape-circle{border-radius:50%}.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:768px){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:left;flex-direction:row}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:right;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{align-items:flex-end}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit!important}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}.elementor-image-carousel-wrapper .slick-image-stretch:not(.slick-variable-width) .slick-slide .slick-slide-image{width:100%;object-fit:cover}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.swiper-container .swiper-slide figure{line-height:0}.swiper-container .swiper-slide figure img{width:100%}body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}.elementor-widget-progress{text-align:right}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:30px;line-height:30px;border-radius:2px}.elementor-progress-bar{display:flex;background-color:#818a91;width:0;font-size:11px;height:100%;border-radius:2px;transition:width 1s ease-in-out}.elementor-progress-text{flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:15px}.elementor-progress-percentage{padding-left:15px}.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar{background-color:#5bc0de}.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar{background-color:#5cb85c}.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar{background-color:#f0ad4e}.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar{background-color:#d9534f}.elementor-progress .elementor-title{display:block}@media (max-width:767px){.elementor-progress-wrapper{height:25px;line-height:25px}.elementor-progress-text{padding-right:10px}}.elementor-social-icons-wrapper{font-size:0}.elementor-social-icon{font-size:25px;text-align:center;padding:.5em;margin-left:5px;cursor:pointer}.elementor-social-icon i{color:#fff}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-deviantart{background-color:#05cc47}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-freecodecamp{background-color:#006400}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-gitlab{background-color:#e24329}.elementor-social-icon-globe{background-color:#818a91}.elementor-social-icon-google-plus{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-link{background-color:#818a91}.elementor-social-icon-linkedin{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#df2029}.elementor-social-icon-weixin{background-color:#7bb32e}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{border-radius:50%}.elementor-star-rating{color:#ccd6df;font-family:FontAwesome;display:inline-block}.elementor-star-rating i{display:inline-block;position:relative;font-style:normal;line-height:1;cursor:default}.elementor-star-rating i:before{content:'\f005';display:block;font-size:inherit;font-family:inherit;position:absolute;overflow:hidden;color:#f0ad4e;top:0;right:0}.elementor-star-rating .elementor-star-0:before,.elementor-star-rating .elementor-star-empty:before{content:none}.elementor-star-rating .elementor-star-1:before{width:10%}.elementor-star-rating .elementor-star-2:before{width:20%}.elementor-star-rating .elementor-star-3:before{width:30%}.elementor-star-rating .elementor-star-4:before{width:40%}.elementor-star-rating .elementor-star-5:before{width:50%}.elementor-star-rating .elementor-star-6:before{width:60%}.elementor-star-rating .elementor-star-7:before{width:70%}.elementor-star-rating .elementor-star-8:before{width:80%}.elementor-star-rating .elementor-star-9:before{width:90%}.elementor-star-rating__wrapper{display:flex;align-items:center}.elementor-star-rating__title{margin-left:10px}.elementor-star-rating--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-start}.elementor-star-rating--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-end}.elementor-star-rating--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating--align-justify .elementor-star-rating__title{margin-left:auto}.last-star{letter-spacing:0}.elementor--star-style-star_unicode .elementor-star-rating{font-family:Arial,Helvetica,sans-serif}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active{border-left-style:none}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{height:999em;width:0;left:0;border-left-style:solid}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{top:0;transform:translateY(-100%)}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after{top:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title{display:table-cell}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active{border-bottom-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{bottom:0;height:0;width:999em;border-bottom-style:solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{right:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after{left:100%}.elementor-widget-tabs .elementor-tab-content,.elementor-widget-tabs .elementor-tab-title,.elementor-widget-tabs .elementor-tab-title:after,.elementor-widget-tabs .elementor-tab-title:before,.elementor-widget-tabs .elementor-tabs-content-wrapper{border:1px #d4d4d4}.elementor-widget-tabs .elementor-tabs{text-align:right}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:0}.elementor-widget-tabs .elementor-tab-desktop-title{position:relative;padding:20px 25px;font-weight:700;line-height:1;border:solid transparent}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active{border-color:#d4d4d4}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before{display:block;content:'';position:absolute}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:767px){.elementor-tabs .elementor-tab-content,.elementor-tabs .elementor-tab-title{border-style:solid solid none}.elementor-tabs .elementor-tabs-wrapper{display:none}.elementor-tabs .elementor-tabs-content-wrapper{border-bottom-style:solid}.elementor-tabs .elementor-tab-content{padding:10px}}@media (min-width:768px){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper{flex-grow:1;border-style:solid none solid solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content{border-style:none solid solid}.elementor-tabs .elementor-tab-mobile-title{display:none}}.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;color:inherit}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;color:inherit}.elementor-testimonial-wrapper.elementor-testimonial-text-align-left{text-align:left}.elementor-testimonial-wrapper.elementor-testimonial-text-align-right{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;border-radius:50%;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-left:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:right;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}.elementor-toggle{text-align:right}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d4d4d4;cursor:pointer;outline:0}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d4d4d4;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.elementor-widget-video .elementor-widget-container{overflow:hidden;transform:translate3d(0,0,0)}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%}.elementor-widget-video .elementor-custom-embed-image-overlay:not([data-elementor-lightbox]) img{height:100%;object-fit:cover}.elementor-widget-video .elementor-video{object-fit:cover}.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;overflow:hidden;display:block;margin:0;padding:0}.slick-list:focus{outline:0}.slick-list.dragging{cursor:pointer}.slick-slider .slick-list,.slick-slider .slick-track{transform:translate3d(0,0,0)}.slick-track{position:relative;left:0;top:0;display:block}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}.elementor-slick-slider[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.elementor-slick-slider .slick-loading .slick-list{background:#fff}.elementor-slick-slider .slick-loading .slick-list:after{content:'\f1ce';font-family:FontAwesome;position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);animation:2s linear infinite fa-spin;font-size:25px;color:#a4afb7}.elementor-slick-slider .slick-next,.elementor-slick-slider .slick-prev{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;padding:0;transform:translate(0,-50%);cursor:pointer;color:transparent;border:none;outline:0;background:0 0}.elementor-slick-slider .slick-next:focus,.elementor-slick-slider .slick-next:hover,.elementor-slick-slider .slick-prev:focus,.elementor-slick-slider .slick-prev:hover{color:transparent;outline:0;background:0 0}.elementor-slick-slider .slick-next:focus:before,.elementor-slick-slider .slick-next:hover:before,.elementor-slick-slider .slick-prev:focus:before,.elementor-slick-slider .slick-prev:hover:before{opacity:1}.elementor-slick-slider .slick-next.slick-disabled:before,.elementor-slick-slider .slick-prev.slick-disabled:before{opacity:.25}.elementor-slick-slider .slick-next:before,.elementor-slick-slider .slick-prev:before{font-family:FontAwesome;font-size:35px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider .slick-prev{left:-25px}[dir=rtl] .elementor-slick-slider .slick-prev{left:auto;right:-25px}.elementor-slick-slider .slick-prev:before{content:'\f104'}[dir=rtl] .elementor-slick-slider .slick-prev:before{content:'\f105'}.elementor-slick-slider .slick-next{right:-25px}[dir=rtl] .elementor-slick-slider .slick-next{left:-25px;right:auto}.elementor-slick-slider .slick-next:before{content:'\f105'}[dir=rtl] .elementor-slick-slider .slick-next:before{content:'\f104'}.elementor-slick-slider .slick-dotted.slick-slider{margin-bottom:30px}.elementor-slick-slider ul.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center;line-height:1}.elementor-slick-slider ul.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0;padding:0;cursor:pointer}.elementor-slick-slider ul.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:0;background:0 0}.elementor-slick-slider ul.slick-dots li button:focus,.elementor-slick-slider ul.slick-dots li button:hover{outline:0}.elementor-slick-slider ul.slick-dots li button:focus:before,.elementor-slick-slider ul.slick-dots li button:hover:before{opacity:1}.elementor-slick-slider ul.slick-dots li button:before{font-family:FontAwesome;font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:'\f111';text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider ul.slick-dots li.slick-active button:before{opacity:.75;color:#000}.elementor-slick-slider .slick-arrows-inside .slick-prev{left:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-prev{left:auto;right:20px}.elementor-slick-slider .slick-arrows-inside .slick-next{right:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-next{left:20px;right:auto}.elementor-slick-slider .slick-dots-inside .slick-dots{bottom:5px}.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider{margin-bottom:0}.elementor-slick-slider .slick-slider .slick-next,.elementor-slick-slider .slick-slider .slick-prev{z-index:1}.elementor-slick-slider .slick-slide img{margin:auto}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background:center no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;transition:.3s;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:6px;height:6px;display:inline-block;border-radius:50%;background:#000;opacity:.2}.swiper-pagination-fraction{color:#000}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 6px}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#000;position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-progressbar.swiper-pagination-white{background:rgba(255,255,255,.5)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-slide .swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:1s steps(12,end) infinite swiper-preloader-spin}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") 50% no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.elementor-lightbox{--lightbox-ui-color:rgba(238, 238, 238, 0.9);--lightbox-ui-color-hover:#fff;--lightbox-text-color:var(--lightbox-ui-color);--lightbox-header-icons-size:20px;--lightbox-navigation-icons-size:25px}.elementor-lightbox .dialog-header{display:none}.elementor-lightbox .dialog-widget-content{background:0 0;box-shadow:none;width:100%;height:100%}.elementor-lightbox .dialog-message{animation-duration:.3s}.elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio){height:100%}.elementor-lightbox .dialog-message.dialog-lightbox-message{padding:0}.elementor-lightbox .dialog-lightbox-close-button{cursor:pointer;position:absolute;font-size:var(--lightbox-header-icons-size);left:.75em;top:13px;padding:.25em;z-index:2;line-height:1}.elementor-lightbox .dialog-lightbox-close-button,.elementor-lightbox .elementor-swiper-button{color:var(--lightbox-ui-color);transition:.3s;opacity:1}.elementor-lightbox .dialog-lightbox-close-button:hover,.elementor-lightbox .elementor-swiper-button:hover{color:var(--lightbox-ui-color-hover)}.elementor-lightbox .swiper-container{height:100%}.elementor-lightbox .elementor-lightbox-item{display:flex;align-items:center;justify-content:center;position:relative;padding:70px;box-sizing:border-box;height:100%;margin:auto}.elementor-lightbox .elementor-lightbox-image{max-height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elementor-lightbox .elementor-lightbox-image,.elementor-lightbox .elementor-lightbox-image:hover{opacity:1;-webkit-filter:none;filter:none;border:none}.elementor-lightbox .elementor-lightbox-image,.elementor-lightbox .elementor-video-container{box-shadow:0 0 30px rgba(0,0,0,.3),0 0 8px -5px rgba(0,0,0,.3);border-radius:2px}.elementor-lightbox .elementor-video-container{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@media (min-width:1025px){.elementor-lightbox .elementor-video-container{width:75%}.elementor:not(.elementor-edit-area-active) .elementor-hidden-desktop{display:none}}@media (max-width:1024px){.elementor-lightbox .elementor-video-container{width:100%}}.elementor-lightbox .elementor-swiper-button:focus{outline:0}.elementor-lightbox .elementor-swiper-button-next,.elementor-lightbox .elementor-swiper-button-prev{height:100%;display:flex;align-items:center;width:15%;justify-content:center;font-size:var(--lightbox-navigation-icons-size)}.elementor-lightbox .elementor-swiper-button-prev{left:0}.elementor-lightbox .elementor-swiper-button-next{right:0}@media (max-width:767px){.elementor-lightbox .elementor-lightbox-item{padding:70px 0}.elementor-lightbox .elementor-swiper-button-next,.elementor-lightbox .elementor-swiper-button-prev{width:20%}.elementor-lightbox .elementor-swiper-button-next i,.elementor-lightbox .elementor-swiper-button-prev i{padding:10px;background-color:rgba(0,0,0,.5)}.elementor-lightbox .elementor-swiper-button-prev{left:0;justify-content:flex-start}.elementor-lightbox .elementor-swiper-button-next{right:0;justify-content:flex-end}.elementor:not(.elementor-edit-area-active) .elementor-hidden-phone{display:none}}.elementor-slideshow__counter{color:currentColor;font-size:.75em;width:-webkit-max-content;width:-moz-max-content;width:max-content}.elementor-slideshow__footer,.elementor-slideshow__header{position:absolute;left:0;width:100%;padding:15px 20px;transition:.3s}.elementor-slideshow__footer{color:var(--lightbox-text-color)}.elementor-slideshow__header{color:var(--lightbox-ui-color);display:flex;font-size:var(--lightbox-header-icons-size);padding-right:1em;padding-left:2.6em;top:0;align-items:center;z-index:10}.elementor-slideshow__header>i{font-size:calc(var(--lightbox-header-icons-size) * .9);cursor:pointer;padding:.25em;margin:0 .35em}.elementor-slideshow__header>i:hover{color:var(--lightbox-ui-color-hover)}.elementor-slideshow__header>i:first-of-type{margin-right:auto}.elementor-slideshow__header .elementor-icon-share{z-index:5}.elementor-slideshow__footer{bottom:0;z-index:5;position:fixed}.elementor-slideshow__description,.elementor-slideshow__title{margin:0}.elementor-slideshow__title{font-size:16px;font-weight:700}.elementor-slideshow__description{font-size:14px}.elementor-slideshow--ui-hidden .elementor-slideshow__footer,.elementor-slideshow--ui-hidden .elementor-slideshow__header{opacity:0;pointer-events:none}.elementor-slideshow--ui-hidden .elementor-swiper-button-next,.elementor-slideshow--ui-hidden .elementor-swiper-button-prev{opacity:0}.elementor-slideshow--fullscreen-mode .elementor-video-container{width:100%}.elementor-slideshow--zoom-mode .elementor-slideshow__footer,.elementor-slideshow--zoom-mode .elementor-slideshow__header{background-color:rgba(0,0,0,.5)}.elementor-slideshow--zoom-mode .elementor-swiper-button-next,.elementor-slideshow--zoom-mode .elementor-swiper-button-prev{opacity:0;pointer-events:none}.animated{animation-duration:1.25s}.animated.animated-slow{animation-duration:2s}.animated.animated-fast{animation-duration:.75s}.animated.infinite{animation-iteration-count:infinite}.elementor-shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.elementor-shape-top{top:-1px}.elementor-shape-bottom{bottom:-1px}.elementor-shape[data-negative=false].elementor-shape-bottom,.elementor-shape[data-negative=true].elementor-shape-top{transform:rotate(180deg)}.elementor-shape svg{display:block;width:calc(100% + 1.3px);position:relative;left:50%;transform:translateX(-50%)}.elementor-shape .elementor-shape-fill{fill:#fff;transform-origin:center;transform:rotateY(0)}#elementor .elementor-element ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}@media (min-width:768px) and (max-width:1024px){.elementor-lightbox .elementor-aspect-ratio-916 .elementor-video-container{width:70%}.elementor:not(.elementor-edit-area-active) .elementor-hidden-tablet{display:none}}.elementor-widget-call-to-action .elementor-widget-container{overflow:hidden}.elementor-cta{position:relative;display:flex;overflow:hidden;transition:.5s}.elementor-cta-content{z-index:2;overflow:hidden;display:flex;flex-wrap:wrap;align-items:center;align-content:center;padding:35px;width:100%}.elementor-cta .elementor-content-item,.elementor-cta-content{position:relative;transition:.5s;color:#fff}.elementor-cta .elementor-content-item{width:100%;margin:0}.elementor-cta .elementor-content-item:not(:last-child){margin-bottom:15px}.elementor-cta .elementor-content-item .elementor-icon{color:#fff}.elementor-cta--skin-classic .elementor-cta{flex-wrap:wrap}.elementor-cta--skin-classic .elementor-cta-bg-wrapper{position:relative;min-height:200px;width:100%}.elementor-cta--skin-classic .elementor-cta-content{transition:.4s;width:100%;background-color:#f7f7f7}.elementor-cta--skin-classic .elementor-content-item,.elementor-cta--skin-classic .elementor-content-item .elementor-icon{color:#55595c;border-color:#55595c}.elementor-cta--skin-classic .elementor-cta a.elementor-button:not(#e),.elementor-cta--skin-classic .elementor-cta button.elementor-button:not(#e){color:#55595c}.elementor-cta--skin-classic .elementor-cta .elementor-button{border-color:#55595c}.elementor-cta--skin-cover .elementor-cta{display:block}.elementor-cta--skin-cover .elementor-cta-bg-wrapper{position:absolute;top:0;left:0;right:0;bottom:0;transition:.4s;width:100%}.elementor-cta--skin-cover .elementor-cta-content{min-height:280px}.elementor-cta--skin-cover .elementor-content-item,.elementor-cta--skin-cover .elementor-content-item .elementor-icon{color:#fff;border-color:#fff}.elementor-cta--skin-cover .elementor-cta .elementor-button{border-color:#fff}.elementor-cta--layout-image-above .elementor-cta{flex-wrap:wrap}.elementor-cta--layout-image-above .elementor-cta-bg-wrapper{width:100%}.elementor-cta--layout-image-left .elementor-cta,.elementor-cta--layout-image-right .elementor-cta{flex-wrap:nowrap}.elementor-cta--layout-image-left .elementor-cta-bg-wrapper,.elementor-cta--layout-image-right .elementor-cta-bg-wrapper{width:auto;min-width:50%}.elementor-cta--layout-image-left .elementor-cta-content,.elementor-cta--layout-image-right .elementor-cta-content{flex-grow:1}.elementor-cta--layout-image-left .elementor-cta{flex-direction:row-reverse}.elementor-cta--layout-image-right .elementor-cta{flex-direction:row}.elementor-cta-bg,.elementor-cta-bg-overlay{position:absolute;top:0;left:0;right:0;bottom:0;transition:.4s}.elementor-cta-bg-wrapper{z-index:1;overflow:hidden}.elementor-cta-bg-wrapper img.elementor-cta-bg{width:100%;height:100%;object-fit:cover;z-index:1}.elementor-cta-bg-overlay{z-index:2}.elementor-cta .elementor-button{cursor:pointer;align-self:center;margin-left:auto;margin-right:auto;border:2px solid #fff;background:0 0}.elementor-cta .elementor-button:hover{background:0 0;text-decoration:none}.elementor-cta-title{font-size:23px}.elementor-cta--valign-top .elementor-cta-content{align-content:flex-start;align-items:flex-start}.elementor-cta--valign-middle .elementor-cta-content{align-content:center;align-items:center}.elementor-cta--valign-bottom .elementor-cta-content{align-content:flex-end;align-items:flex-end}.elementor-cta:hover .elementor-cta-bg-overlay{background-color:rgba(0,0,0,.3)}@media (max-device-width:1024px){.elementor-cta{cursor:pointer}}@media (min-width:1025px){.elementor-cta--desktop-layout-image-above .elementor-cta{flex-wrap:wrap}.elementor-cta--desktop-layout-image-above .elementor-cta-bg-wrapper{width:100%}.elementor-cta--desktop-layout-image-left .elementor-cta,.elementor-cta--desktop-layout-image-right .elementor-cta{flex-wrap:nowrap}.elementor-cta--desktop-layout-image-left .elementor-cta-bg-wrapper,.elementor-cta--desktop-layout-image-right .elementor-cta-bg-wrapper{width:auto;min-width:50%}.elementor-cta--desktop-layout-image-left .elementor-cta-content,.elementor-cta--desktop-layout-image-right .elementor-cta-content{flex-grow:1}.elementor-cta--desktop-layout-image-left .elementor-cta{flex-direction:row-reverse}.elementor-cta--desktop-layout-image-right .elementor-cta{flex-direction:row}}@media (max-width:1024px){.elementor-cta--tablet-layout-image-above .elementor-cta{flex-wrap:wrap}.elementor-cta--tablet-layout-image-above .elementor-cta-bg-wrapper{width:100%}.elementor-cta--tablet-layout-image-left .elementor-cta,.elementor-cta--tablet-layout-image-right .elementor-cta{flex-wrap:nowrap}.elementor-cta--tablet-layout-image-left .elementor-cta-bg-wrapper,.elementor-cta--tablet-layout-image-right .elementor-cta-bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet-layout-image-left .elementor-cta-content,.elementor-cta--tablet-layout-image-right .elementor-cta-content{flex-grow:1}.elementor-cta--tablet-layout-image-left .elementor-cta{flex-direction:row-reverse}.elementor-cta--tablet-layout-image-right .elementor-cta{flex-direction:row}}@media (max-width:767px){.elementor-cta--mobile-layout-image-above .elementor-cta{flex-wrap:wrap}.elementor-cta--mobile-layout-image-above .elementor-cta-bg-wrapper{width:100%}.elementor-cta--mobile-layout-image-left .elementor-cta,.elementor-cta--mobile-layout-image-right .elementor-cta{flex-wrap:nowrap}.elementor-cta--mobile-layout-image-left .elementor-cta-bg-wrapper,.elementor-cta--mobile-layout-image-right .elementor-cta-bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile-layout-image-left .elementor-cta-content,.elementor-cta--mobile-layout-image-right .elementor-cta-content{flex-grow:1}.elementor-cta--mobile-layout-image-left .elementor-cta{flex-direction:row-reverse}.elementor-cta--mobile-layout-image-right .elementor-cta{flex-direction:row}}.elementor-ribbon{position:absolute;z-index:2;top:0;left:0;right:auto;transform:rotate(0);width:150px;overflow:hidden;height:150px}.elementor-ribbon-inner{text-align:center;left:0;width:200%;transform:translate3d(35px,-50%,0) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:#000;color:#fff}.elementor-ribbon.elementor-ribbon-left{transform:rotate(0);left:0;right:auto}.elementor-ribbon.elementor-ribbon-right{transform:rotate(90deg);left:auto;right:0}.elementor-bg-transform-zoom-in:hover .elementor-bg,.elementor-bg-transform-zoom-out .elementor-bg{transform:scale(1.2)}.elementor-bg-transform-zoom-out:hover .elementor-bg{transform:scale(1)}.elementor-bg-transform-move-left .elementor-bg{transform:scale(1.2) translateX(8%)}.elementor-bg-transform-move-left:hover .elementor-bg,.elementor-bg-transform-move-right .elementor-bg{transform:scale(1.2) translateX(-8%)}.elementor-bg-transform-move-right:hover .elementor-bg{transform:scale(1.2) translateX(8%)}.elementor-bg-transform-move-up .elementor-bg{transform:scale(1.2) translateY(8%)}.elementor-bg-transform-move-down .elementor-bg,.elementor-bg-transform-move-up:hover .elementor-bg{transform:scale(1.2) translateY(-8%)}.elementor-bg-transform-move-down:hover .elementor-bg{transform:scale(1.2) translateY(8%)}.elementor-animated-content:hover .elementor-animated-item--grow{transform:scale(1.1)}.elementor-animated-content:hover .elementor-animated-item--shrink{transform:scale(.85)}.elementor-animated-content:hover .elementor-animated-item--enter-zoom-in,.elementor-animated-content:hover .elementor-animated-item--enter-zoom-out,.elementor-animated-content:hover .elementor-animated-item--fade-in{transform:scale(1);opacity:1}.elementor-animated-content:hover .elementor-animated-item--exit-zoom-in,.elementor-animated-content:hover .elementor-animated-item--exit-zoom-out,.elementor-animated-content:hover .elementor-animated-item--fade-out{opacity:0}.elementor-animated-content:hover .elementor-animated-item--exit-zoom-out{transform:scale(.2)}.elementor-animated-content:hover .elementor-animated-item--exit-zoom-in{transform:scale(2)}.elementor-animated-content:hover .elementor-animated-item--enter-from-bottom,.elementor-animated-content:hover .elementor-animated-item--enter-from-left,.elementor-animated-content:hover .elementor-animated-item--enter-from-right,.elementor-animated-content:hover .elementor-animated-item--enter-from-top{opacity:1;transform:none}.elementor-animated-content:hover .elementor-animated-item--exit-to-right{transform:translateX(1000px)}.elementor-animated-content:hover .elementor-animated-item--exit-to-left{transform:translateX(-1000px)}.elementor-animated-content:hover .elementor-animated-item--exit-to-top{transform:translateY(-600px)}.elementor-animated-content:hover .elementor-animated-item--exit-to-bottom{transform:translateY(600px)}.elementor-animated-content:hover .elementor-animated-item--exit-to-bottom,.elementor-animated-content:hover .elementor-animated-item--exit-to-left,.elementor-animated-content:hover .elementor-animated-item--exit-to-right,.elementor-animated-content:hover .elementor-animated-item--exit-to-top{opacity:0}.elementor-animated-content:hover .elementor-animated-item--move-right{transform:translateX(30px)}.elementor-animated-content:hover .elementor-animated-item--move-left{transform:translateX(-30px)}.elementor-animated-content:hover .elementor-animated-item--move-up{transform:translateY(-30px)}.elementor-animated-content:hover .elementor-animated-item--move-down{transform:translateY(30px)}.elementor-animated-content [class^=elementor-animated-item]{will-change:transform,opacity}.elementor-animated-content .elementor-animated-item--enter-zoom-in{transform:scale(.2)}.elementor-animated-content .elementor-animated-item--enter-zoom-out{transform:scale(2)}.elementor-animated-content .elementor-animated-item--enter-zoom-in,.elementor-animated-content .elementor-animated-item--enter-zoom-out,.elementor-animated-content .elementor-animated-item--fade-in{opacity:0}.elementor-animated-content .elementor-animated-item--exit-zoom-in,.elementor-animated-content .elementor-animated-item--exit-zoom-out,.elementor-animated-content .elementor-animated-item--fade-out{opacity:1;transform:scale(1)}.elementor-animated-content .elementor-animated-item--enter-from-right{transform:translateX(1000px)}.elementor-animated-content .elementor-animated-item--enter-from-left{transform:translateX(-1000px)}.elementor-animated-content .elementor-animated-item--enter-from-top{transform:translateY(-600px)}.elementor-animated-content .elementor-animated-item--enter-from-bottom{transform:translateY(500px)}.elementor-animated-content .elementor-animated-item--enter-from-bottom,.elementor-animated-content .elementor-animated-item--enter-from-left,.elementor-animated-content .elementor-animated-item--enter-from-right,.elementor-animated-content .elementor-animated-item--enter-from-top{opacity:0}.elementor-animated-content .elementor-animated-item--exit-to-bottom,.elementor-animated-content .elementor-animated-item--exit-to-left,.elementor-animated-content .elementor-animated-item--exit-to-right,.elementor-animated-content .elementor-animated-item--exit-to-top{opacity:1;transform:none}.elementor-flip-box{position:relative;height:300px;width:100%;perspective:1000px;transform-style:preserve-3d}.elementor-flip-box>a{display:block}.elementor-flip-box-side{position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;transition:.6s ease-in-out}.elementor-flip-box-front{background:#0e9dd2}.elementor-flip-box-back{background:#444}.elementor-flip-box-overlay{display:flex;align-items:center;width:100%;height:100%;padding:35px}.elementor-flip-box-content{width:100%}.elementor-flip-box-content>:not(:last-child){margin-bottom:15px}.elementor-flip-box-image img{width:50%}.elementor-flip-box .elementor-view-stacked .elementor-icon{background:#202020}.elementor-flip-box .elementor-icon,.elementor-flip-box-description,.elementor-flip-box-title{color:#fff;border-color:#fff}.elementor-flip-box .elementor-button{cursor:pointer;border:2px solid currentColor;background:0 0}.elementor-flip-box-back--valign-top .elementor-flip-box-back .elementor-flip-box-overlay,.elementor-flip-box-front--valign-top .elementor-flip-box-front .elementor-flip-box-overlay{align-content:flex-start;align-items:flex-start}.elementor-flip-box-back--valign-middle .elementor-flip-box-back .elementor-flip-box-overlay,.elementor-flip-box-front--valign-middle .elementor-flip-box-front .elementor-flip-box-overlay{align-content:center;align-items:center}.elementor-flip-box-back--valign-bottom .elementor-flip-box-back .elementor-flip-box-overlay,.elementor-flip-box-front--valign-bottom .elementor-flip-box-front .elementor-flip-box-overlay{align-content:flex-end;align-items:flex-end}.elementor-flip-box--3d .elementor-flip-box-overlay{transform-style:preserve-3d;transform:translateZ(.1px)}.elementor-flip-box--3d .elementor-flip-box-content{transform:translateZ(90px) scale(.91)}.elementor-flip-box--effect-flip .elementor-flip-box-side{transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}.elementor-flip-box--effect-flip .elementor-flip-box-front{transform:none;z-index:1}.elementor-flip-box--effect-flip .elementor-flip-box:hover .elementor-flip-box-back,.elementor-flip-box--effect-push .elementor-flip-box-front,.elementor-flip-box--effect-push .elementor-flip-box:hover .elementor-flip-box-back,.elementor-flip-box--effect-slide .elementor-flip-box:hover .elementor-flip-box-back{transform:none}.elementor-flip-box--effect-flip.elementor-flip-box--direction-right .elementor-flip-box-back{transform:rotateY(-180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-left .elementor-flip-box-back,.elementor-flip-box--effect-flip.elementor-flip-box--direction-right .elementor-flip-box:hover .elementor-flip-box-front{transform:rotateY(180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-left .elementor-flip-box:hover .elementor-flip-box-front{transform:rotateY(-180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-up .elementor-flip-box-back{transform:rotateX(-180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-down .elementor-flip-box-back,.elementor-flip-box--effect-flip.elementor-flip-box--direction-up .elementor-flip-box:hover .elementor-flip-box-front{transform:rotateX(180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-down .elementor-flip-box:hover .elementor-flip-box-front{transform:rotateX(-180deg)}.elementor-flip-box--effect-push.elementor-flip-box--direction-right .elementor-flip-box:hover .elementor-flip-box-front{transform:translateX(100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-left .elementor-flip-box:hover .elementor-flip-box-front{transform:translateX(-100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-up .elementor-flip-box:hover .elementor-flip-box-front{transform:translateY(-100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-down .elementor-flip-box:hover .elementor-flip-box-front{transform:translateY(100%)}.elementor-flip-box--effect-push .elementor-flip-box,.elementor-flip-box--effect-slide .elementor-flip-box{overflow:hidden}.elementor-flip-box--effect-push.elementor-flip-box--direction-right .elementor-flip-box-back,.elementor-flip-box--effect-slide.elementor-flip-box--direction-right .elementor-flip-box-back{transform:translateX(-100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-left .elementor-flip-box-back,.elementor-flip-box--effect-slide.elementor-flip-box--direction-left .elementor-flip-box-back{transform:translateX(100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-up .elementor-flip-box-back,.elementor-flip-box--effect-slide.elementor-flip-box--direction-up .elementor-flip-box-back{transform:translateY(100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-down .elementor-flip-box-back,.elementor-flip-box--effect-slide.elementor-flip-box--direction-down .elementor-flip-box-back{transform:translateY(-100%)}.elementor-flip-box--effect-zoom-out .elementor-flip-box .elementor-flip-box-front{transition:opacity .35s,width .1ms,transform .7s;opacity:1;transform:scale(1);z-index:1;width:100%}.elementor-flip-box--effect-zoom-out .elementor-flip-box:hover .elementor-flip-box-front{transition:opacity .7s .1s,width .1ms .7s,transform .8s;width:0;opacity:0;transform:scale(.7)}.elementor-flip-box--effect-zoom-in .elementor-flip-box .elementor-flip-box-back{transition:opacity .5s .2s,transform .7s;opacity:0;transform:scale(.7)}.elementor-flip-box--effect-zoom-in .elementor-flip-box:hover .elementor-flip-box-back{transition:opacity .5s,transform .7s;opacity:1;transform:scale(1)}.elementor-flip-box--effect-fade .elementor-flip-box .elementor-flip-box-back{opacity:0}.elementor-flip-box--effect-fade .elementor-flip-box:hover .elementor-flip-box-back{opacity:1}.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box-front{display:none}.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box-back{transform:none;opacity:1}.elementor-headline{font-size:43px;line-height:1.2;display:block}.elementor-headline--style-rotate .elementor-headline-dynamic-wrapper{text-align:right}.elementor-headline--style-highlight .elementor-headline-dynamic-wrapper{overflow:visible;text-align:inherit}.elementor-headline--style-highlight .elementor-headline-dynamic-text{z-index:1}.elementor-headline--style-highlight .elementor-headline-plain-text{z-index:1;position:relative}.elementor-headline--style-highlight svg{position:absolute;top:50%;left:50%;width:calc(100% + 20px);height:calc(100% + 20px);transform:translate(-50%,-50%);overflow:visible}.elementor-headline--style-highlight svg path{stroke:red;stroke-width:9;fill:none;stroke-dasharray:1500;animation:10s infinite elementor-headline-dash}.elementor-headline--style-highlight svg path:nth-of-type(2){animation-delay:.6s}@keyframes elementor-headline-dash{0%{stroke-dasharray:0 1500}15%{stroke-dasharray:1500 1500}85%{opacity:1}90%{stroke-dasharray:1500 1500;opacity:0}100%{stroke-dasharray:0 1500;opacity:0}}.elementor-headline-dynamic-wrapper{display:inline-block;position:relative}.elementor-headline-dynamic-wrapper .elementor-headline-dynamic-text{display:inline-block;position:absolute;top:0;right:0}.elementor-headline-dynamic-wrapper .elementor-headline-dynamic-text.elementor-headline-text-active{position:relative}.elementor-headline-animation-type-flip .elementor-headline-dynamic-wrapper{perspective:300px}.elementor-headline-animation-type-flip .elementor-headline-dynamic-text{opacity:0;transform-origin:50% 100%;transform:rotateX(180deg)}.elementor-headline-animation-type-flip .elementor-headline-dynamic-text.elementor-headline-text-active{opacity:1;transform:rotateX(0);animation:1.2s elementor-headline-flip-in}.elementor-headline-animation-type-flip .elementor-headline-dynamic-text.elementor-headline-text-inactive{transform:rotateX(180deg);animation:1.2s elementor-headline-flip-out}@keyframes elementor-headline-flip-in{0%{transform:rotateX(180deg);opacity:0}35%{transform:rotateX(120deg);opacity:0}65%{opacity:0}100%{transform:rotateX(360deg);opacity:1}}@keyframes elementor-headline-flip-out{0%{transform:rotateX(0);opacity:1}35%{transform:rotateX(-40deg);opacity:1}65%{opacity:0}100%{transform:rotateX(180deg);opacity:0}}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper{vertical-align:top;overflow:hidden}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper::after{content:'';position:absolute;left:0;right:auto;top:50%;transform:translateY(-50%);height:90%;width:1px;background-color:#0d0d0d}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper:not(.elementor-headline-typing-selected):after{animation:1s infinite elementor-headline-pulse}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected{background-color:#0d0d0d}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected::after{visibility:hidden}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected .elementor-headline-dynamic-text{color:#aebcb9}.elementor-headline-animation-type-typing .elementor-headline-dynamic-text:not(.elementor-headline-text-active){visibility:hidden}.elementor-headline-animation-type-typing .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in){position:absolute;visibility:hidden}@keyframes elementor-headline-pulse{0%{transform:translateY(-50%);opacity:1}40%{transform:translateY(-50%) scale(.9);opacity:0}100%{transform:translateY(-50%) scale(0);opacity:0}}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-wrapper{perspective:300px}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter{display:inline-block;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-style:preserve-3d;transform:translateZ(-20px) rotateX(90deg);opacity:0}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-text{opacity:0}.elementor-headline-text-active .elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter{opacity:1}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter.elementor-headline-animation-in{animation:.4s forwards elementor-headline-swirl-in}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in){animation:.4s forwards elementor-headline-swirl-out}@keyframes elementor-headline-swirl-in{0%{opacity:0;transform:translateZ(-20px) rotateX(90deg)}60%{opacity:1;transform:translateZ(-20px) rotateX(-10deg)}100%{opacity:1;transform:translateZ(-20px)}}@keyframes elementor-headline-swirl-out{0%{opacity:1;transform:translateZ(-20px)}60%{opacity:0;transform:translateZ(-20px) rotateX(-100deg)}100%{opacity:0;transform:translateZ(-20px) rotateX(-90deg)}}.elementor-headline-animation-type-slide-down .elementor-headline-text-wrapper{display:inline-block;padding:.2em 0}.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-wrapper{overflow:hidden;vertical-align:top}.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text{opacity:0;top:.2em}.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text.elementor-headline-text-active{top:0;opacity:1;animation:.6s elementor-headline-slide-down-in}.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text.elementor-headline-text-inactive{animation:.6s elementor-headline-slide-down-out}@keyframes elementor-headline-slide-down-in{0%{opacity:0;transform:translateY(-100%)}60%{opacity:1;transform:translateY(20%)}100%{opacity:1;transform:translateY(0)}}@keyframes elementor-headline-slide-down-out{0%{opacity:1;transform:translateY(0)}60%{opacity:0;transform:translateY(120%)}100%{opacity:0;transform:translateY(100%)}}.elementor-headline-animation-type-clip .elementor-headline-text-wrapper{display:inline-block;padding:.2em 0}.elementor-headline-animation-type-clip .elementor-headline-dynamic-wrapper{overflow:hidden;vertical-align:top}.elementor-headline-animation-type-clip .elementor-headline-dynamic-wrapper::after{content:'';position:absolute;top:0;left:0;right:auto;width:2px;height:100%;background-color:#0d0d0d}.elementor-headline-animation-type-clip .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-clip .elementor-headline-dynamic-text.elementor-headline-text-active{opacity:1}.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-wrapper{perspective:300px}.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text.elementor-headline-text-active{opacity:1;animation:.8s elementor-headline-drop-in-in}.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text.elementor-headline-text-inactive{animation:.8s elementor-headline-drop-in-out}@keyframes elementor-headline-drop-in-in{0%{opacity:0;transform:translateZ(100px)}100%{opacity:1;transform:translateZ(0)}}@keyframes elementor-headline-drop-in-out{0%{opacity:1;transform:translateZ(0)}100%{opacity:0;transform:translateZ(-100px)}}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-wrapper{perspective:300px}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter{display:inline-block;transform:rotateY(180deg);-webkit-backface-visibility:hidden;backface-visibility:hidden}.elementor-headline-text-active .elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter{transform:rotateY(0)}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter.elementor-headline-animation-in{animation:.6s forwards elementor-headline-blinds-in}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in){animation:.6s forwards elementor-headline-blinds-out}@keyframes elementor-headline-blinds-in{0%{transform:rotateY(180deg)}100%{transform:rotateY(0)}}@keyframes elementor-headline-blinds-out{0%{transform:rotateY(0)}100%{transform:rotateY(-180deg)}}.elementor-headline-animation-type-wave .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-wave .elementor-headline-dynamic-letter{display:inline-block;opacity:0;transform:scale(0)}.elementor-headline-text-active .elementor-headline-animation-type-wave .elementor-headline-dynamic-letter{opacity:1}.elementor-headline-animation-type-wave .elementor-headline-dynamic-letter.elementor-headline-animation-in{animation:.6s forwards elementor-headline-wave-up}.elementor-headline-animation-type-wave .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in){animation:.6s forwards elementor-headline-wave-down}@keyframes elementor-headline-wave-up{0%{transform:scale(0);opacity:0}60%{transform:scale(1.2);opacity:1}100%{transform:scale(1);opacity:1}}@keyframes elementor-headline-wave-down{0%{transform:scale(1);opacity:1}60%{transform:scale(0);opacity:0}}.elementor-headline-animation-type-slide .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-slide .elementor-headline-dynamic-text.elementor-headline-text-active{opacity:1;animation:.6s elementor-headline-slide-in}.elementor-headline-animation-type-slide .elementor-headline-dynamic-text.elementor-headline-text-inactive{animation:.6s elementor-headline-slide-out}@keyframes elementor-headline-slide-in{0%{opacity:0;transform:translateX(-100%)}60%{opacity:1;transform:translateX(10%)}100%{opacity:1;transform:translateX(0)}}@keyframes elementor-headline-slide-out{0%{opacity:1;transform:translateX(0)}60%{opacity:0;transform:translateX(110%)}100%{opacity:0;transform:translateX(100%)}}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-text,.elementor-headline-animation-type-swirl .elementor-headline-dynamic-text,.elementor-headline-animation-type-wave .elementor-headline-dynamic-text{white-space:nowrap}.elementor-image-hotspot{display:inline-block;position:relative}.elementor-image-hotspot .elementor-image-hotspot-wrapper{position:absolute;transform:translate(-50%,-50%)}.elementor-image-hotspot .elementor-image-hotspot-wrapper:hover .elementor-image-hotspot-content{visibility:visible;opacity:1;transform:translate3d(-50%,-110%,0)}.elementor-image-hotspot .elementor-image-hotspot-content{position:absolute;visibility:hidden;top:0;left:50%;width:240px;max-width:100vw;padding:20px;text-align:center;border-radius:5px;background:#fff;opacity:0;z-index:10;box-shadow:0 2px 20px 0 rgba(0,0,0,.07);transform:translate3d(-50%,-100%,0);transition:.3s cubic-bezier(0, 0, .2, 1)}.elementor-image-hotspot .elementor-image-hotspot-title{margin:0 0 7px}.elementor-image-hotspot .elementor-image-hotspot-description>:first-child{margin-top:0}.elementor-image-hotspot .elementor-image-hotspot-description>:last-child{margin-bottom:0}.elementor-widget-image-hotspot.elementor-view-framed .elementor-icon{border-width:2px}.elementor-widget-image-hotspot.elementor-view-framed .elementor-icon,.elementor-widget-image-hotspot.elementor-view-stacked .elementor-icon{border-radius:50%}.elementor-image-hotspot .elementor-icon i:not([class]),.elementor-image-hotspot .elementor-icon i[class='']{display:none}.elementor-widget-countdown .elementor-countdown-expire--message{display:none;padding:20px;text-align:center}.elementor-widget-countdown .elementor-countdown-item{padding:20px 0;text-align:center;background-color:#818a91;color:#fff}.elementor-widget-countdown .elementor-countdown-digits,.elementor-widget-countdown .elementor-countdown-label{line-height:1}.elementor-widget-countdown .elementor-countdown-digits{font-size:69px}.elementor-widget-countdown .elementor-countdown-label{font-size:19px}.elementor-countdown--label-block .elementor-countdown-wrapper{display:flex;justify-content:center;margin-right:auto;margin-left:auto}.elementor-countdown--label-block .elementor-countdown-digits,.elementor-countdown--label-block .elementor-countdown-label{display:block}.elementor-countdown--label-block .elementor-countdown-item{flex-basis:0;flex-grow:1}.elementor-countdown--label-inline{text-align:center}.elementor-countdown--label-inline .elementor-countdown-item{display:inline-block;padding-left:5px;padding-right:5px}.elementor[data-elementor-type$=miniature] .elementor-countdown-item{padding:10px 0}.elementor[data-elementor-type$=miniature] .elementor-countdown-digits{font-size:28px}.elementor[data-elementor-type$=miniature] .elementor-countdown-label{font-size:12px}.elementor-product-box>*,.elementor-product-grid>*,.wrapfix .elementor-product-box,.wrapfix .elementor-product-box>*>*{float:none!important;margin-left:0!important;margin-right:0!important;width:auto}.wrapfix .elementor-product-box>*,.wrapfix .elementor-product-grid>*{min-width:100%;padding:0!important}.elementor-product-grid{display:-ms-grid;display:grid;margin:0;grid-column-gap:15px;grid-row-gap:15px}.elementor-product-grid:after,.elementor-product-grid:before{display:none!important}.elementor-product-grid>*{align-self:flex-start}.elementor-widget .elementor-product-miniature{background:#fff;border:0 solid;padding:10px;transition:.4s}.elementor-product-miniature .elementor-product-link{position:relative;display:block;outline:0}.elementor-product-miniature .elementor-image{position:relative;overflow:hidden}.elementor-product-miniature .elementor-image img{display:block;margin:0 auto;transition:transform .4s}.elementor-product-miniature .elementor-second-image{position:absolute;top:0;left:0;width:100%;opacity:0;transition:opacity .4s}.elementor-img-hover-grow .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-grow .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-grow .elementor-product-miniature:hover .elementor-image img{transform:scale(1.1)}.elementor-img-hover-shrink .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-shrink .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-shrink .elementor-product-miniature:hover .elementor-image img{transform:scale(.85)}.elementor-img-hover-rotate .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-rotate .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-rotate .elementor-product-miniature:hover .elementor-image img{transform:rotate(4deg)}.elementor-img-hover-grow-rotate .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-grow-rotate .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-grow-rotate .elementor-product-miniature:hover .elementor-image img{transform:scale(1.1) rotate(4deg)}.elementor-img-hover-float .elementor-product-miniature .elementor-image img{transition-duration:.3s;transition-timing-function:ease-out}.elementor-img-hover-float .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-float .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-float .elementor-product-miniature:hover .elementor-image img{transform:translateY(-8px);transition-timing-function:ease-out}.elementor-img-hover-sink .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-sink .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-sink .elementor-product-miniature:hover .elementor-image img{transform:translateY(8px)}.elementor-img-hover-bob .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-bob .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-bob .elementor-product-miniature:hover .elementor-image img{animation-name:elementor-animation-bob-float,elementor-animation-bob;animation-duration:.3s,1.5s;animation-delay:0s,.3s;animation-timing-function:ease-out,ease-in-out;animation-iteration-count:1,infinite;animation-fill-mode:forwards;animation-direction:normal,alternate}.elementor-img-hover-hang .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-hang .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-hang .elementor-product-miniature:hover .elementor-image img{animation-name:elementor-animation-hang-sink,elementor-animation-hang;animation-duration:.3s,1.5s;animation-delay:0s,.3s;animation-timing-function:ease-out,ease-in-out;animation-iteration-count:1,infinite;animation-fill-mode:forwards;animation-direction:normal,alternate}.elementor-img-hover-buzz-out .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-buzz-out .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-buzz-out .elementor-product-miniature:hover .elementor-image img{animation-name:elementor-animation-buzz-out;animation-duration:.75s;animation-timing-function:linear;animation-iteration-count:1}.elementor-product-miniature:hover .elementor-second-image{opacity:1}.elementor-product-miniature .elementor-quick-view{position:absolute;display:block;bottom:0;width:100%;background:rgba(255,255,255,.5);background-clip:padding-box;color:#000;font-size:14px;line-height:40px;transform:translateY(100%);transition-duration:.4s}.elementor-product-miniature .elementor-quick-view .elementor-button-text{flex-grow:0}.elementor-product-miniature:hover .elementor-quick-view{cursor:pointer;transform:translateY(0)}.elementor-product-miniature .elementor-quick-view:hover{opacity:1;background-color:rgba(255,255,255,.7)}.elementor-product-miniature .elementor-badges-left,.elementor-product-miniature .elementor-badges-right{position:absolute;top:0;margin:10px}.elementor-product-miniature .elementor-badges-left{left:0}.elementor-product-miniature .elementor-badges-right{right:0}.elementor-product-miniature .elementor-badge{min-width:50px;margin-bottom:5px;padding:4px 5px;color:#fff;text-align:center}.elementor-product-miniature .elementor-badge-sale{background:#f39d72}.elementor-product-miniature .elementor-badge-new,.elementor-product-miniature .elementor-badge-pack{background:#2fb5d2}.elementor-product-miniature .elementor-content{padding:10px;text-align:center}.elementor-product-miniature .elementor-content>*{margin-top:10px;margin-bottom:0}.elementor-product-miniature .elementor-content>:first-child{margin-top:5px}.elementor-product-miniature .elementor-category,.elementor-product-miniature .elementor-title{color:#000;font-size:14px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-product-miniature .elementor-category{color:color: #afafaf}.elementor-product-miniature .elementor-description{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;font-size:13px}.elementor-product-miniature .elementor-price-wrapper{font-size:16px}.elementor-product-miniature .elementor-price-regular{color:#afafaf;font-weight:400;text-decoration:line-through}.elementor-product-miniature .elementor-price{color:#000}.elementor-product-miniature .elementor-atc{margin-top:5px}.elementor-atc--align-center .elementor-atc{text-align:center}.elementor-atc--align-right .elementor-atc{text-align:right}.elementor-atc--align-left .elementor-atc{text-align:left}.elementor-atc--align-justify .elementor-atc .elementor-button{width:100%}.elementor-product-miniature .elementor-atc .elementor-button{font-size:14px;background:#000;cursor:pointer}.elementor-product-miniature .elementor-atc .elementor-button:hover{opacity:1;background-color:#212121}.elementor-product-miniature .elementor-atc .elementor-button:disabled{cursor:not-allowed}.elementor-trustedshops-reviews .slick-track{display:table}.elementor-trustedshops-reviews .slick-initialized .slick-slide{display:table-cell;float:none}.elementor-trustedshops-reviews .slick-slide-inner{overflow:hidden}.elementor-trustedshops-reviews .elementor-trustedshops-reviews-comment,.elementor-trustedshops-reviews .elementor-trustedshops-reviews-header{padding:10px}.elementor-trustedshops-reviews .elementor-trustedshops-reviews-header::after{content:'';display:block;clear:both}.elementor-trustedshops-reviews .elementor-trustedshops-reviews-date{float:left}.elementor-trustedshops-reviews .elementor-trustedshops-reviews-stars{float:right}.elementor-trustedshops-reviews .elementor-icon-unicode .fa-star::before{content:'\2605'}.elementor-trustedshops-reviews .elementor-icon-unicode .fa-star-o::before{content:'\2606'}.elementor-search{display:flex;flex-direction:column;transition:.2s}.elementor-search--align-left .elementor-search{align-items:flex-start}.elementor-search--align-center .elementor-search{align-items:center}.elementor-search--align-right .elementor-search{align-items:flex-end}.elementor-search button,.elementor-search input[type=search]{margin:0;border:0;padding:0;display:inline-block;vertical-align:middle;white-space:normal;background:0 0;line-height:1;min-width:0;font-size:15px;-webkit-appearance:none;-moz-appearance:none}.elementor-search button:focus,.elementor-search input[type=search]:focus{outline:0;color:inherit}.elementor-search button{background-color:#818a91;font-size:16px;color:#fff;border-radius:0}.elementor-search__container{display:flex;transition:.2s;overflow:hidden;border:0 solid transparent;min-height:50px}.elementor-search__container:not(.elementor-search--topbar){width:100%;background:#eceeef}.elementor-search__input{flex-basis:100%;color:#55595c;transition:color .2s}.elementor-search__input::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__input:-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__input:-moz-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__input::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__input::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__submit{color:#fff;cursor:pointer;transition:color .2s,background .2s}.elementor-search--button-type-text .elementor-search__submit{flex-shrink:0}.elementor-search__icon:not(.elementor-search__clear){padding-left:0!important}.elementor-search__clear{padding-right:0!important;visibility:hidden;pointer-events:none;cursor:pointer}.ui-autocomplete-loading~.elementor-search__clear i{animation:2s linear infinite ceicon-spin}.ui-autocomplete-loading~.elementor-search__clear i:before{content:'\e823'}.elementor-search__icon{display:flex;align-items:center;justify-content:flex-end;color:#55595c}.elementor-search--skin-topbar .elementor-search{display:block}.elementor-search--skin-topbar .elementor-search input[type=search].elementor-search__input{font-size:32px;border-style:solid;border-width:0 0 1px;border-color:#eceaea;border-radius:0;line-height:1.5;color:#fff}.elementor-search--skin-topbar .elementor-search__toggle{display:inline-block;cursor:pointer;vertical-align:middle;color:#494c4f}.elementor-search--skin-topbar .elementor-search__toggle i{position:relative;display:block;border:0 solid;transition:.2s;width:33px;height:33px;border-radius:3px}.elementor-search--skin-topbar .elementor-search__toggle i:before{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:.55em}.elementor-search--skin-topbar .elementor-search__container{flex-direction:column;transition:transform .3s;position:fixed;z-index:9998;top:0;left:0;right:0;border:0 solid transparent;padding:20px;text-align:right;box-shadow:0 0 10px rgba(0,0,0,.1);background:#fff}.elementor-search--skin-topbar .elementor-search__container:not(.elementor-search--topbar){overflow:hidden;box-shadow:none;transform:translateY(-100%)}.elementor-search .dialog-lightbox-close-button{transition:color .5s;top:10px;left:10px}.elementor-search__input-wrapper{position:relative;display:flex;align-items:center;flex-basis:100%}.elementor-search__input-wrapper .elementor-search__input{width:100%;height:100%}.elementor-search__input-wrapper .elementor-search__clear{position:absolute;left:0;height:100%}.elementor-search__label{color:#777}.elementor-search__products{left:auto!important;z-index:9999}.elementor-search__products:empty{display:none}.elementor-search__products .elementor-search__product a.elementor-search__product-link{display:flex;align-items:center;flex-direction:row-reverse;border:none;border-radius:0;padding:5px}.elementor-search__products .elementor-search__product a.elementor-search__product-link.ui-state-focus{margin:0;border-radius:0;background:0 0}.elementor-search__products .elementor-search__product-image{align-self:flex-start;margin-left:10px}.elementor-search__products .elementor-search__product-description{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;font-size:.8em}.elementor-search__products .elementor-search__product-price del{opacity:.66}.elementor-search--skin-topbar .elementor-search__products:not(:empty){position:static;display:block!important;max-width:100%;border:none;border-radius:0;background:0 0}.elementor-email-subscription{display:inline-block;width:100%}.elementor-field-type-subscribe{display:flex;align-items:center}.elementor-field-type-subscribe input[type=email]{flex-basis:100%;width:100%;font-size:15px;color:#373a3c;background:#fff;border:1px solid #818a91;border-radius:0;transition:.5s}.elementor-field-type-subscribe input[type=email]:focus{outline:0}.elementor-field-type-submit button[type=submit],.elementor-field-type-subscribe button[type=submit]{border:0 solid;cursor:pointer}.elementor-field-type-subscribe button[type=submit]{margin-left:0!important;font-size:16px;color:#fff;background:#5bc0de;border-radius:0}.elementor-field-type-gdpr .elementor-checkbox-label,.elementor-field-type-gdpr input[type=checkbox]{margin-right:0!important;vertical-align:middle;vertical-align:-webkit-baseline-middle;vertical-align:-moz-middle-with-baseline}.elementor-form-spinner~span[class*=icon]{display:none}.elementor-field-group .elementor-field{width:100%}@media screen and (max-width:767px){.elementor-mobile-layout-multiline .elementor-field-type-subscribe{display:block}.elementor-mobile-layout-multiline .elementor-field-type-subscribe button[type=submit]{margin-right:0!important}.elementor-mobile-layout-inline .elementor-field-type-subscribe button[type=submit]{margin-top:0!important}}@media (min-width:768px) and (max-width:1024px){.elementor-tablet-layout-multiline .elementor-field-type-subscribe{display:block}.elementor-tablet-layout-multiline .elementor-field-type-subscribe button[type=submit]{margin-right:0!important}.elementor-tablet-layout-inline .elementor-field-type-subscribe button[type=submit]{margin-top:0!important}}@media (min-width:1025px){.elementor-layout-multiline .elementor-field-type-subscribe{display:block}.elementor-layout-multiline .elementor-field-type-subscribe button[type=submit]{margin-right:0!important}.elementor-layout-inline .elementor-field-type-subscribe button[type=submit]{margin-top:0!important}}.elementor-sticky--active{z-index:99}.elementor-sticky.ce-sticky--hide{transition-delay:.2s!important}.elementor-item:after,.elementor-item:before{display:block;position:absolute;transition:.3s cubic-bezier(0.58,0.3,0.005,1)}.elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{opacity:0}.elementor-item-active:after,.elementor-item-active:before,.elementor-item.highlighted:after,.elementor-item.highlighted:before,.elementor-item:focus:after,.elementor-item:focus:before,.elementor-item:hover:after,.elementor-item:hover:before{transform:scale(1)}.e--pointer-double-line .elementor-item:after,.e--pointer-double-line .elementor-item:before,.e--pointer-overline .elementor-item:after,.e--pointer-overline .elementor-item:before,.e--pointer-underline .elementor-item:after,.e--pointer-underline .elementor-item:before{height:3px;width:100%;left:0;background-color:#55595c;z-index:2}.e--pointer-double-line.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-double-line.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-overline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-overline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-underline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-underline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{height:0;width:0;left:50%}.e--pointer-double-line.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-overline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-underline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{top:10px}.e--pointer-double-line.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-overline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-underline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after{bottom:10px}.e--pointer-double-line.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-overline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-underline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{top:-10px}.e--pointer-double-line.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-overline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-underline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after{bottom:-10px}.e--pointer-double-line.e--animation-none,.e--pointer-double-line.e--animation-none .elementor-item,.e--pointer-double-line.e--animation-none .elementor-item:after,.e--pointer-double-line.e--animation-none .elementor-item:before,.e--pointer-double-line.e--animation-none .elementor-item:focus,.e--pointer-double-line.e--animation-none .elementor-item:hover,.e--pointer-double-line.e--animation-none:after,.e--pointer-double-line.e--animation-none:before,.e--pointer-double-line.e--animation-none:focus,.e--pointer-double-line.e--animation-none:hover,.e--pointer-overline.e--animation-none,.e--pointer-overline.e--animation-none .elementor-item,.e--pointer-overline.e--animation-none .elementor-item:after,.e--pointer-overline.e--animation-none .elementor-item:before,.e--pointer-overline.e--animation-none .elementor-item:focus,.e--pointer-overline.e--animation-none .elementor-item:hover,.e--pointer-overline.e--animation-none:after,.e--pointer-overline.e--animation-none:before,.e--pointer-overline.e--animation-none:focus,.e--pointer-overline.e--animation-none:hover,.e--pointer-underline.e--animation-none,.e--pointer-underline.e--animation-none .elementor-item,.e--pointer-underline.e--animation-none .elementor-item:after,.e--pointer-underline.e--animation-none .elementor-item:before,.e--pointer-underline.e--animation-none .elementor-item:focus,.e--pointer-underline.e--animation-none .elementor-item:hover,.e--pointer-underline.e--animation-none:after,.e--pointer-underline.e--animation-none:before,.e--pointer-underline.e--animation-none:focus,.e--pointer-underline.e--animation-none:hover{transition-duration:0s}.e--pointer-double-line .elementor-item:before,.e--pointer-overline .elementor-item:before{content:'';top:0}.e--pointer-double-line.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-overline.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{width:10px;left:-20px}.e--pointer-double-line .elementor-item:after,.e--pointer-underline .elementor-item:after{content:'';bottom:0}.e--pointer-double-line.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-underline.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after{width:10px;left:calc(100% + 20px)}.e--pointer-framed .elementor-item:after,.e--pointer-framed .elementor-item:before{background:0 0;left:0;top:0;bottom:0;right:0;border:3px solid #55595c}.e--pointer-framed .elementor-item:before{content:''}.e--pointer-framed.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{transform:scale(.75)}.e--pointer-framed.e--animation-shrink .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{transform:scale(1.25)}.e--pointer-framed.e--animation-grow .elementor-item:before,.e--pointer-framed.e--animation-shrink .elementor-item:before{transition:opacity .2s,transform .4s}.e--pointer-framed.e--animation-draw .elementor-item:after,.e--pointer-framed.e--animation-draw .elementor-item:before{width:3px;height:3px}.e--pointer-framed.e--animation-draw .elementor-item:before{border-width:0 3px 3px 0;transition:width .1s .2s,height .1s .3s,opacity .12s .22s}.e--pointer-framed.e--animation-draw .elementor-item:after{content:'';top:initial;bottom:0;right:initial;left:0;border-width:3px 0 0 3px;transition:width .1s,height .1s .1s,opacity 20ms .18s}.e--pointer-framed.e--animation-draw .elementor-item-active:after,.e--pointer-framed.e--animation-draw .elementor-item-active:before,.e--pointer-framed.e--animation-draw .elementor-item.highlighted:after,.e--pointer-framed.e--animation-draw .elementor-item.highlighted:before,.e--pointer-framed.e--animation-draw .elementor-item:focus:after,.e--pointer-framed.e--animation-draw .elementor-item:focus:before,.e--pointer-framed.e--animation-draw .elementor-item:hover:after,.e--pointer-framed.e--animation-draw .elementor-item:hover:before{width:100%;height:100%}.e--pointer-framed.e--animation-draw .elementor-item-active:before,.e--pointer-framed.e--animation-draw .elementor-item.highlighted:before,.e--pointer-framed.e--animation-draw .elementor-item:focus:before,.e--pointer-framed.e--animation-draw .elementor-item:hover:before{transition:opacity 20ms,height .1s,width .1s .1s}.e--pointer-framed.e--animation-draw .elementor-item-active:after,.e--pointer-framed.e--animation-draw .elementor-item.highlighted:after,.e--pointer-framed.e--animation-draw .elementor-item:focus:after,.e--pointer-framed.e--animation-draw .elementor-item:hover:after{transition:opacity 20ms .2s,height .1s .2s,width .1s .3s}.e--pointer-framed.e--animation-corners .elementor-item:after,.e--pointer-framed.e--animation-corners .elementor-item:before{width:3px;height:3px}.e--pointer-framed.e--animation-corners .elementor-item:before{border-width:3px 3px 0 0}.e--pointer-framed.e--animation-corners .elementor-item:after{content:'';top:initial;bottom:0;right:initial;left:0;border-width:0 0 3px 3px}.e--pointer-framed.e--animation-corners .elementor-item-active:after,.e--pointer-framed.e--animation-corners .elementor-item-active:before,.e--pointer-framed.e--animation-corners .elementor-item.highlighted:after,.e--pointer-framed.e--animation-corners .elementor-item.highlighted:before,.e--pointer-framed.e--animation-corners .elementor-item:focus:after,.e--pointer-framed.e--animation-corners .elementor-item:focus:before,.e--pointer-framed.e--animation-corners .elementor-item:hover:after,.e--pointer-framed.e--animation-corners .elementor-item:hover:before{width:100%;height:100%;transition:opacity 2ms,width .4s,height .4s}.e--pointer-framed.e--animation-none,.e--pointer-framed.e--animation-none .elementor-item,.e--pointer-framed.e--animation-none .elementor-item:after,.e--pointer-framed.e--animation-none .elementor-item:before,.e--pointer-framed.e--animation-none .elementor-item:focus,.e--pointer-framed.e--animation-none .elementor-item:hover,.e--pointer-framed.e--animation-none:after,.e--pointer-framed.e--animation-none:before,.e--pointer-framed.e--animation-none:focus,.e--pointer-framed.e--animation-none:hover{transition-duration:0s}.e--pointer-background .elementor-item:after,.e--pointer-background .elementor-item:before{content:'';transition:.3s}.e--pointer-background .elementor-item:before{top:0;left:0;right:0;bottom:0;background:#55595c;z-index:-1}.e--pointer-background .elementor-item-active,.e--pointer-background .elementor-item.highlighted,.e--pointer-background .elementor-item:focus,.e--pointer-background .elementor-item:hover{color:#fff}.e--pointer-background.e--animation-grow .elementor-item:before{transform:scale(.5)}.e--pointer-background.e--animation-grow .elementor-item-active:before,.e--pointer-background.e--animation-grow .elementor-item.highlighted:before,.e--pointer-background.e--animation-grow .elementor-item:focus:before,.e--pointer-background.e--animation-grow .elementor-item:hover:before{transform:scale(1);opacity:1}.e--pointer-background.e--animation-shrink .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{transform:scale(1.2);transition:.3s}.e--pointer-background.e--animation-shrink .elementor-item-active:before,.e--pointer-background.e--animation-shrink .elementor-item.highlighted:before,.e--pointer-background.e--animation-shrink .elementor-item:focus:before,.e--pointer-background.e--animation-shrink .elementor-item:hover:before{transition:opacity .15s,transform .4s}.e--pointer-background.e--animation-sweep-left .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{left:100%}.e--pointer-background.e--animation-sweep-right .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{right:100%}.e--pointer-background.e--animation-sweep-up .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{top:100%}.e--pointer-background.e--animation-sweep-down .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{bottom:100%}.e--pointer-background.e--animation-shutter-out-vertical .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{bottom:50%;top:50%}.e--pointer-background.e--animation-shutter-out-horizontal .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{right:50%;left:50%}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:after,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:after{top:0;left:0;right:0;bottom:0;background:#55595c;z-index:-1}.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:before{top:0;bottom:100%}.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:after{top:100%;bottom:0}.e--pointer-background.e--animation-shutter-in-vertical .elementor-item-active:before,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item.highlighted:before,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:focus:before,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:hover:before{bottom:50%}.e--pointer-background.e--animation-shutter-in-vertical .elementor-item-active:after,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item.highlighted:after,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:focus:after,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:hover:after{top:50%}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:before{right:0;left:100%}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:after{right:100%;left:0}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item-active:before,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item.highlighted:before,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:focus:before,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:hover:before{left:50%}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item-active:after,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item.highlighted:after,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:focus:after,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:hover:after{right:50%}.e--pointer-background.e--animation-none,.e--pointer-background.e--animation-none .elementor-item,.e--pointer-background.e--animation-none .elementor-item:after,.e--pointer-background.e--animation-none .elementor-item:before,.e--pointer-background.e--animation-none .elementor-item:focus,.e--pointer-background.e--animation-none .elementor-item:hover,.e--pointer-background.e--animation-none:after,.e--pointer-background.e--animation-none:before,.e--pointer-background.e--animation-none:focus,.e--pointer-background.e--animation-none:hover{transition-duration:0s}.e--pointer-text.e--animation-skew .elementor-item:focus,.e--pointer-text.e--animation-skew .elementor-item:hover{transform:skew(-8deg)}.e--pointer-text.e--animation-grow .elementor-item:focus,.e--pointer-text.e--animation-grow .elementor-item:hover{transform:scale(1.2)}.e--pointer-text.e--animation-shrink .elementor-item:focus,.e--pointer-text.e--animation-shrink .elementor-item:hover{transform:scale(.8)}.e--pointer-text.e--animation-float .elementor-item:focus,.e--pointer-text.e--animation-float .elementor-item:hover{transform:translateY(-8px)}.e--pointer-text.e--animation-sink .elementor-item:focus,.e--pointer-text.e--animation-sink .elementor-item:hover{transform:translateY(8px)}.e--pointer-text.e--animation-rotate .elementor-item:focus,.e--pointer-text.e--animation-rotate .elementor-item:hover{transform:rotate(6deg)}.e--pointer-text.e--animation-none,.e--pointer-text.e--animation-none .elementor-item,.e--pointer-text.e--animation-none .elementor-item:after,.e--pointer-text.e--animation-none .elementor-item:before,.e--pointer-text.e--animation-none .elementor-item:focus,.e--pointer-text.e--animation-none .elementor-item:hover,.e--pointer-text.e--animation-none:after,.e--pointer-text.e--animation-none:before,.e--pointer-text.e--animation-none:focus,.e--pointer-text.e--animation-none:hover{transition-duration:0s}.elementor-nav--main .elementor-nav a{transition:.4s}.elementor-nav--main .elementor-nav a,.elementor-nav--main .elementor-nav a.highlighted,.elementor-nav--main .elementor-nav a:focus,.elementor-nav--main .elementor-nav a:hover{padding:13px 20px}.elementor-nav--main .elementor-nav a.current{background:#373a3c;color:#fff}.elementor-nav--main .elementor-nav a.disabled{background:#55595c;color:#a1a6a9}.elementor-nav--main .elementor-nav ul{position:absolute;width:12em;border-width:0;border-style:solid;padding:0}.elementor-nav--main .elementor-nav span.scroll-down,.elementor-nav--main .elementor-nav span.scroll-up{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:20px}.elementor-nav--main .elementor-nav span.scroll-down-arrow,.elementor-nav--main .elementor-nav span.scroll-up-arrow{position:absolute;top:-2px;right:50%;margin-right:-8px;width:0;height:0;overflow:hidden;border-width:8px;border-style:dashed dashed solid;border-color:transparent transparent #494c4f}.elementor-nav--main .elementor-nav span.scroll-down-arrow{top:6px;border-style:solid dashed dashed;border-color:#494c4f transparent transparent}.elementor-nav--main .elementor-nav--dropdown .sub-arrow:before,.elementor-nav--main.elementor-nav--layout-vertical .sub-arrow:before{display:block;transform:rotate(90deg)}.elementor-nav--layout-horizontal{display:flex}.elementor-nav--layout-horizontal .elementor-nav{display:flex;flex-wrap:wrap}.elementor-nav--layout-horizontal .elementor-nav a{white-space:nowrap}.elementor-nav--align-right .elementor-nav{margin-left:auto;justify-content:flex-start}.elementor-nav--align-right .elementor-nav--layout-vertical>ul>li>a{justify-content:flex-start}.elementor-nav--align-left .elementor-nav{margin-right:auto;justify-content:flex-end}.elementor-nav--align-left .elementor-nav--layout-vertical>ul>li>a{justify-content:flex-end}.elementor-nav--align-center .elementor-nav{margin-left:auto;margin-right:auto}.elementor-nav--align-center .elementor-nav>li:first-child{margin-right:auto}.elementor-nav--align-center .elementor-nav>li:last-child{margin-left:auto}.elementor-nav--align-center .elementor-nav--layout-vertical>ul>li>a{justify-content:center}.elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav{width:100%}.elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav>li{flex-grow:1}.elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav>li>a{justify-content:center}.elementor-widget:not(.elementor-nav--toggle) .elementor-menu-toggle{display:none}.elementor-widget-nav-menu .elementor-widget-container{display:flex;flex-direction:column}.elementor-nav{position:relative;z-index:2}.elementor-nav:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.elementor-nav,.elementor-nav li,.elementor-nav ul{display:block;list-style:none;margin:0;padding:0;line-height:normal;-webkit-tap-highlight-color:transparent}.elementor-nav ul{display:none}.elementor-nav ul ul a,.elementor-nav ul ul a:active,.elementor-nav ul ul a:focus,.elementor-nav ul ul a:hover{border-left:16px solid transparent}.elementor-nav ul ul ul a,.elementor-nav ul ul ul a:active,.elementor-nav ul ul ul a:focus,.elementor-nav ul ul ul a:hover{border-left:24px solid transparent}.elementor-nav ul ul ul ul a,.elementor-nav ul ul ul ul a:active,.elementor-nav ul ul ul ul a:focus,.elementor-nav ul ul ul ul a:hover{border-left:32px solid transparent}.elementor-nav ul ul ul ul ul a,.elementor-nav ul ul ul ul ul a:active,.elementor-nav ul ul ul ul ul a:focus,.elementor-nav ul ul ul ul ul a:hover{border-left:40px solid transparent}.elementor-nav a,.elementor-nav li{position:relative}.elementor-nav li{border-width:0}.elementor-nav a{display:flex;align-items:center}.elementor-nav a,.elementor-nav a:focus,.elementor-nav a:hover{padding:10px 20px;line-height:20px}.elementor-nav a.current{background:#373a3c;color:#fff}.elementor-nav a.disabled{cursor:not-allowed;color:#a1a6a9}.elementor-nav .sub-arrow{font-size:16px;line-height:1;padding:10px 10px 10px 0;margin-top:-10px;margin-bottom:-10px}.elementor-nav .sub-arrow.fa-chevron-down{font-size:10px}.elementor-nav .sub-arrow.fa-plus:before{font-family:"Open Sans",sans-serif;content:'+'}.elementor-nav--dropdown .menu-item a.elementor-item-active:not(#e),.elementor-nav--dropdown .menu-item a.highlighted:not(#e),.elementor-nav--dropdown .menu-item a:not(#e):focus,.elementor-nav--dropdown .menu-item a:not(#e):hover{color:#fff}.elementor-nav--dropdown .menu-item .elementor-item-active,.elementor-nav--dropdown .menu-item .highlighted,.elementor-nav--dropdown .menu-item [href]:focus,.elementor-nav--dropdown .menu-item [href]:hover{background-color:#55595c}.elementor-menu-toggle{display:flex;align-items:center;justify-content:center;font-size:22px;padding:.25em;cursor:pointer;border:0 solid;border-radius:3px;background-color:rgba(0,0,0,.05);color:#494c4f}.elementor-menu-toggle i{position:relative;margin:.44em .05em;width:.9em;height:.12em;background:currentColor;transition:background 0s .16s}.elementor-menu-toggle i:after,.elementor-menu-toggle i:before{content:'';display:block;position:absolute;width:.9em;height:.12em;background:currentColor}.elementor-menu-toggle i:before{top:-.24em;transition:top .16s .16s,transform .16s}.elementor-menu-toggle i:after{bottom:-.24em;transition:bottom .16s .16s,transform .16s}.elementor-menu-toggle.elementor-active i{background:0 0}.elementor-menu-toggle.elementor-active i:before{top:0;transform:rotate(45deg);transition-delay:0s,.16s}.elementor-menu-toggle.elementor-active i:after{bottom:0;transform:rotate(-45deg);transition-delay:0s,.16s}.elementor-nav--dropdown{background-color:#fff;font-size:13px}.elementor-nav--dropdown.elementor-nav__container{margin-top:10px;transition:max-height .3s,transform .3s;transform-origin:top;overflow:auto}.elementor-nav--dropdown.elementor-nav__container ul ul{padding-right:8px}.elementor-nav--dropdown.elementor-nav__container .elementor-sub-item{font-size:.85em}.elementor-nav--dropdown a{color:#494c4f;justify-content:space-between}.elementor-nav--dropdown a.current{background:#373a3c;color:#fff}.elementor-nav--dropdown a.disabled{color:#b3b3b3}ul.elementor-nav--dropdown a,ul.elementor-nav--dropdown a:focus,ul.elementor-nav--dropdown a:hover{text-shadow:none}.elementor-nav--text-align-center .elementor-nav--dropdown .elementor-nav a{justify-content:center}.elementor-nav--toggle .elementor-menu-toggle:not(.elementor-active)+.elementor-nav__container{transform:scaleY(0);max-height:0}.elementor-nav--toggle .elementor-menu-toggle.elementor-active+.elementor-nav__container{transform:scaleY(1);max-height:100vh}.elementor-nav--stretch .elementor-nav__container.elementor-nav--dropdown{position:absolute;z-index:9997}@media (min-width:768px){.elementor-nav--dropdown-mobile .elementor-menu-toggle,.elementor-nav--dropdown-mobile .elementor-nav--dropdown{display:none}}@media (min-width:1025px){.elementor-nav--dropdown-tablet .elementor-menu-toggle,.elementor-nav--dropdown-tablet .elementor-nav--dropdown{display:none}}@media (max-width:1024px){.elementor-nav--dropdown-tablet .elementor-nav--main{display:none}}@media (max-width:767px){.elementor-nav--dropdown-mobile .elementor-nav--main{display:none}}.elementor-widget-currency-selector:not(.elementor-nav--active) .current-menu-item,.elementor-widget-language-selector:not(.elementor-nav--active) .current-menu-item{display:none}.elementor-currencies.elementor-nav--layout-horizontal .elementor-nav ul,.elementor-langs.elementor-nav--layout-horizontal .elementor-nav ul{min-width:100%!important}.menu-item-type-account a>span:not(:first-child),.menu-item-type-currency a>span:not(:first-child),.menu-item-type-lang a>span:not(:first-child){padding-left:10px}.elementor-nav--dropdown .menu-item-type-account a,.elementor-nav--dropdown .menu-item-type-currency a,.elementor-nav--dropdown .menu-item-type-lang a{justify-content:normal}.elementor-sign-in .elementor-item>i{transition:color .2s}.elementor-widget-shopping-cart:not(.elementor-cart--show-remove-button-yes) .elementor-cart__product-remove,.elementor-widget-shopping-cart:not(.elementor-cart--show-shipping-yes) .elementor-cart__summary :not(div),.elementor-widget-shopping-cart:not(.elementor-cart--show-subtotal-yes) .elementor-cart__toggle .elementor-button-text,.elementor-widget-shopping-cart:not(.elementor-cart--show-view-cart-yes) .elementor-button--view-cart{display:none}.elementor-cart__toggle a.elementor-button:not(#e){color:#818a91}.elementor-cart__toggle .elementor-button{background:0 0;border-radius:0;border:1px solid;border-color:inherit;display:inline-flex;align-items:center}.elementor-cart--align-icon-left .elementor-cart__toggle .elementor-button{flex-direction:row-reverse}.elementor-cart--align-icon-left .elementor-cart__toggle .elementor-button-text{margin-left:.3em}.elementor-cart--align-icon-right .elementor-cart__toggle .elementor-button-text{margin-right:.3em}.elementor-cart__toggle .elementor-button-icon{position:relative;transition:color .1s}.elementor-cart--items-indicator-bubble .elementor-cart__toggle .elementor-button-icon[data-counter]:before{content:attr(data-counter);display:block;position:absolute;min-width:1.6em;height:1.6em;line-height:1.5em;top:-.7em;right:-.7em;border-radius:100%;color:#fff;background-color:#d9534f;text-align:center;font-size:10px}.elementor-cart--empty-indicator-hide .elementor-cart__toggle .elementor-button-icon[data-counter='0']:before{content:none;display:none}.elementor-cart__container{transform:scale(1);overflow:hidden;position:fixed;z-index:9998;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,.25);transition:background-color .4s,transform}.elementor-cart__container .elementor-cart__main{transition:.3s;position:fixed;top:0;width:350px;max-width:100%;left:0;bottom:0;padding:0 30px;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2);transform:translateX(0)}.elementor-cart__container:not(.elementor-cart--shown){background-color:transparent;transform:scale(0);transition:background-color .4s,transform 0s .4s}.elementor-cart__container:not(.elementor-cart--shown) .elementor-cart__main{overflow:hidden;opacity:0;transform:translateX(100%)}.elementor-cart__container:not(.elementor-cart--shown) .dialog-lightbox-close-button{display:none}.elementor-cart__main{display:flex;flex-direction:column;align-items:stretch;font-size:14px}.elementor-cart__title{min-height:65px;font-size:20px;line-height:60px}.elementor-cart__close-button{position:absolute;font-size:25px;width:1em;height:1em;margin:20px 0;color:#818a91;align-self:flex-end;transition:color .5s;cursor:pointer}.elementor-cart__products{overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin}.elementor-cart__products::-webkit-scrollbar{width:14px}.elementor-cart__products::-webkit-scrollbar-track{background:0 0}.elementor-cart__products::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);border-radius:14px;border:3px solid transparent;background-clip:content-box}.elementor-cart__products::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.4)}.elementor-cart__product{display:grid;grid-template-columns:25% auto 50px;grid-template-rows:75% auto}.elementor-cart__product-image{grid-row-start:1;grid-row-end:3;width:100%}.elementor-cart__product-image a,.elementor-cart__product-image img{display:block}.elementor-cart__product-name{grid-column-start:2;grid-column-end:4;margin:0}.elementor-cart__product-price{align-self:end;color:#d4d4d4}.elementor-cart__product-price del{font-weight:300}.elementor-cart__product-name,.elementor-cart__product-price{font-size:14px;padding-right:20px}.elementor-cart__product-remove{align-self:end;justify-self:end;color:#818a91;width:22px;height:22px;font-size:19px;border-radius:20px;border:1px solid currentColor;text-align:center;overflow:hidden;position:relative;transition:color .5s}.elementor-cart__product-remove>a{display:block;z-index:2;top:0;width:100%;height:100%;overflow:hidden;opacity:0;position:absolute}.elementor-cart__product:not(:last-of-type),.elementor-cart__products,.elementor-cart__summary{border-bottom:1px solid #d4d4d4}.elementor-cart__footer-buttons,.elementor-cart__product:not(:first-of-type),.elementor-cart__summary{padding:20px 0}.elementor-cart__product,.elementor-cart__summary{padding-bottom:20px}.elementor-cart__summary-label{clear:both;float:right}.elementor-cart__summary-value{float:left}.elementor-cart__footer-buttons{font-size:20px;text-align:center;display:grid;grid-column-gap:10px;grid-row-gap:10px}.elementor-cart__footer-buttons .elementor-button{border-radius:0}.elementor-cart--buttons-inline .elementor-cart__footer-buttons{grid-template-columns:1fr 1fr}.elementor-cart--buttons-stacked .elementor-cart__footer-buttons{grid-template-columns:1fr}.elementor-widget-container>.images-container,.elementor-widget-container>.product-customization,.elementor-widget-container>.product-prices,.elementor-widget-container>.product-variants{margin:0;padding:0}.ce-product-name{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ce-product-prices--layout-inline .ce-product-prices{display:flex;flex-wrap:wrap;align-items:center}.ce-product-price-regular{font-weight:400;text-decoration:line-through}.ce-product-price{display:inline-flex;align-items:center}.ce-product-price-unit{font-size:.85em}.ce-product-features{width:100%;max-width:100%}.elementor-skin-carousel img.elementor-carousel-image{height:auto}.elementor-skin-carousel.elementor-pagination-position-inside .swiper-container-horizontal>.swiper-pagination-bullets,.elementor-skin-carousel.elementor-pagination-position-inside .swiper-pagination-fraction,.elementor-skin-coverflow.elementor-pagination-position-inside .swiper-container-horizontal>.swiper-pagination-bullets,.elementor-skin-coverflow.elementor-pagination-position-inside .swiper-pagination-fraction{bottom:5px}.elementor-skin-carousel.elementor-pagination-position-outside .swiper-container,.elementor-skin-coverflow.elementor-pagination-position-outside .swiper-container{padding-bottom:30px}.elementor-skin-carousel.elementor-pagination-position-outside .swiper-container-horizontal>.swiper-pagination-bullets,.elementor-skin-carousel.elementor-pagination-position-outside .swiper-pagination-fraction,.elementor-skin-coverflow.elementor-pagination-position-outside .swiper-container-horizontal>.swiper-pagination-bullets,.elementor-skin-coverflow.elementor-pagination-position-outside .swiper-pagination-fraction{bottom:0}.elementor-skin-carousel.elementor-pagination-position-outside .elementor-swiper-button,.elementor-skin-coverflow.elementor-pagination-position-outside .elementor-swiper-button{top:calc(50% - 30px / 2)}.elementor-skin-slideshow .elementor-main-swiper{height:auto;position:relative}.elementor-skin-slideshow .swiper-zoom-container{cursor:crosshair}.elementor-skin-slideshow .ce-swiper-dragging img{cursor:grabbing}.elementor-skin-slideshow .elementor-thumbnails-swiper .elementor-custom-embed-play i{font-size:50px}.elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide{cursor:pointer}.elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide:not(.swiper-slide-active):after{content:'';position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.3)}.elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide.swiper-slide-active:after{pointer-events:none}img.elementor-carousel-image{width:100%;height:100%;object-fit:cover;position:relative}.elementor-carousel-image-overlay{position:absolute;pointer-events:none;top:0;left:0;display:flex;align-items:center;justify-content:center;text-align:center;width:100%;height:100%;padding:20px;color:#fff;background-color:rgba(129,138,145,.8);transition:transform .5s,opacity .5s}.elementor-carousel-image-overlay i{font-size:21px}.swiper-pagination-bullets{color:#fff;cursor:default}.swiper-slide{border-style:solid;border-width:0;transition-property:border,background,transform;overflow:hidden}.swiper-slide:not(:hover) .e-overlay-animation-fade{opacity:0}.swiper-slide:not(:hover) .e-overlay-animation-slide-up{transform:translateY(100%)}.swiper-slide:not(:hover) .e-overlay-animation-slide-down{transform:translateY(-100%)}.swiper-slide:not(:hover) .e-overlay-animation-slide-right{transform:translateX(-100%)}.swiper-slide:not(:hover) .e-overlay-animation-slide-left{transform:translateX(100%)}.swiper-slide:not(:hover) .e-overlay-animation-zoom-in{transform:scale(.5);opacity:0}.swiper-slide a{display:inline}.elementor-swiper{position:relative}.elementor-main-swiper{position:static}.elementor-main-swiper .elementor-swiper-button-prev{left:10px}.elementor-main-swiper .elementor-swiper-button-next{right:10px}.elementor-widget-product-images.elementor-position-left .elementor-widget-container,.elementor-widget-product-images.elementor-position-right .elementor-widget-container{display:flex}.elementor-widget-product-images.elementor-position-right .elementor-widget-container{flex-direction:row-reverse}.elementor-widget-product-images.elementor-position-left .elementor-thumbnails-swiper,.elementor-widget-product-images.elementor-position-right .elementor-thumbnails-swiper{height:100%}.ce-product-description-short{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.ce-product-badges{display:inline-flex}.ce-product-badges--stacked .ce-product-badges{flex-direction:column}.ce-product-badge{padding:4px 5px;color:#fff;text-align:center;background:#2fb5d2}.ce-product-badge-sale{background:#f39d72}.ce-product-meta,.ce-product-meta--layout-table .ce-product-meta__detail{display:flex}.ce-product-meta--layout-inline .ce-product-meta{flex-wrap:wrap}.ce-product-meta--layout-stacked .ce-product-meta,.ce-product-meta--layout-table .ce-product-meta{flex-direction:column}.ce-product-meta .ce-product-meta__detail{position:relative}.ce-product-meta .ce-product-meta__detail:after{position:absolute;border-width:0;bottom:0;right:0;width:100%}.ce-product-meta--layout-inline .ce-product-meta__detail:after{top:50%;right:auto;left:0;width:auto;height:100%;transform:translateY(-50%)}.ce-product-meta--layout-table .ce-product-meta__label{min-width:108px}.ce-product-meta .ce-product-meta__label{font-weight:700}.ce-product-stock .ce-product-stock__availability{display:inline-flex;align-items:center}.ce-product-stock .ce-product-stock__availability-label,.ce-product-stock .ce-product-stock__min-quantity{line-height:1}.ce-product-quantity--view-default .ce-product-quantity__btn{display:none}.ce-product-quantity--view-default input[type=number]{background:#fff;-moz-appearance:textfield}.ce-product-quantity--view-default input[type=number]:focus,.ce-product-quantity--view-default input[type=number]:hover{-moz-appearance:initial}.ce-product-quantity--view-default input[type=number]::-webkit-inner-spin-button{-webkit-appearance:inner-spin-button}.elementor-widget-product-quantity:not(.ce-product-quantity--view-default) input[type=number]{appearance:none;-webkit-appearance:none;-moz-appearance:textfield}.elementor-widget-product-quantity.elementor-align-justify .ce-product-quantity,.elementor-widget-product-quantity.elementor-align-justify input[type=number]{width:100%}@media (max-width:1024px){.elementor-widget-product-quantity.elementor-tablet-align-justify .ce-product-quantity,.elementor-widget-product-quantity.elementor-tablet-align-justify input[type=number]{width:100%}.elementor-widget-product-quantity[class*=tablet-align]:not(.elementor-tablet-align-justify) .ce-product-quantity{width:auto}}@media (max-width:767px){.elementor-widget-product-quantity.elementor-mobile-align-justify .ce-product-quantity,.elementor-widget-product-quantity.elementor-mobile-align-justify input[type=number]{width:100%}.elementor-widget-product-quantity[class*=mobile-align]:not(.elementor-mobile-align-justify) .ce-product-quantity{width:auto}}.ce-product-quantity{position:relative;display:inline-block}.ce-product-quantity input[type=number]{width:5em;text-align:center;transition:.5s}.ce-product-quantity .ce-product-quantity__btn{width:1em;height:1em;line-height:1;font-size:15px;overflow:hidden;cursor:pointer;z-index:1;transition:.5s}.ce-product-quantity--view-stacked input[type=number]{background:#fff;padding-left:1.5em}.ce-product-quantity--view-stacked .ce-product-quantity__btn{position:absolute;left:0;width:1.5em;height:auto;min-height:3px;border:0 solid;display:flex;align-items:center;justify-content:center}.ce-product-quantity--view-stacked .ce-product-quantity__btn:hover{background-color:rgba(0,0,0,.18)}.ce-product-quantity--view-stacked .ce-product-quantity__plus{margin:1px 1px 0;top:0;bottom:50%}.ce-product-quantity--view-stacked .ce-product-quantity__minus{margin:0 1px 1px;top:50%;bottom:0}.ce-product-quantity--view-inline .ce-product-quantity{display:inline-flex;flex-wrap:nowrap}.ce-product-quantity--view-inline input[type=number]{margin:0 5px;border-width:0;width:42px}.ce-product-quantity--view-inline .ce-product-quantity__btn{flex-shrink:0;background:#818a91;color:#fff;text-align:center;box-sizing:content-box}.ce-product-variants{overflow:hidden}.ce-product-variants input[type=radio]{display:none}.ce-product-variants label{margin:0;padding:0}.ce-product-variants--layout-inline .ce-product-variants,.ce-product-variants--layout-inline .ce-product-variants__item,.ce-product-variants--layout-table .ce-product-variants__item,.ce-product-variants__count,.ce-product-variants__options,.ce-product-variants__patterns,.ce-product-variants__radio-wrapper{display:flex}.ce-product-variants--layout-inline:not(.ce-product-variants--label-inline) .ce-product-variants__item{flex-direction:column}.ce-product-variants__options,.ce-product-variants__patterns{flex-wrap:wrap}.ce-product-variants__pattern{background-clip:content-box;cursor:pointer}.ce-product-variants__texture{background-size:contain}.ce-product-variants__option{text-align:center;cursor:pointer}.ce-product-variants__count{-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;cursor:default}.ce-product-rating,.ce-product-rating--layout-inline .elementor-widget-container{display:inline-flex;flex-wrap:wrap;align-items:center}.ce-product-rating--layout-stacked .elementor-widget-container{flex-direction:column}.ce-attachment .elementor-icon-box-title{display:inline-block}.elementor[data-elementor-type$=quick-view] .elementor-section-wrap{text-align:right}#ce-product-quick-view{display:flex;padding:0}#ce-product-quick-view .dialog-widget-content{position:static!important;overflow:visible;margin:0;border-radius:0;max-width:100%;max-height:100vh}#ce-product-quick-view .dialog-message{position:relative;max-height:100vh;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}#ce-product-quick-view .dialog-buttons-wrapper,#ce-product-quick-view .dialog-close-button{display:none}#ce-product-quick-view a[data-elementor-lightbox-slideshow]{pointer-events:none}.elementor-motion-effects-element,.elementor-motion-effects-layer{transition-property:transform,opacity;transition-timing-function:cubic-bezier(0,0.33,0.07,1.03);transition-duration:1s}.elementor-motion-effects-container{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.elementor-motion-effects-layer{position:absolute;top:0;left:0;background-repeat:no-repeat;background-size:cover}.elementor-motion-effects-perspective{perspective:1200px}.e-transform .elementor-widget-container,.e-transform-hover .elementor-widget-container{transform:perspective(var(--e-transform-perspective,0)) rotateZ(var(--e-transform-rotateZ,0)) rotateX(var(--e-transform-rotateX,0)) rotateY(var(--e-transform-rotateY,0)) translateX(var(--e-transform-translateX,0)) translateY(var(--e-transform-translateY,0)) scaleX(calc(var(--e-transform-flipX,1) * var(--e-transform-scaleX,var(--e-transform-scale,1)))) scaleY(calc(var(--e-transform-flipY,1) * var(--e-transform-scaleY,var(--e-transform-scale,1)))) skewX(var(--e-transform-skewX,0)) skewY(var(--e-transform-skewY,0));transform-origin:var(--e-transform-origin-y,center) var(--e-transform-origin-x,center)}.ce-disabled{pointer-events:none;opacity:.35}.elementor-button[data-button-action=add-to-cart] *{pointer-events:none}.ce-product-description-short>p,.ce-product-description>p,.elementor-image-hotspot-description p,.elementor-tab-content p,.elementor-text-editor p{color:inherit!important;font:inherit!important;line-height:inherit!important;letter-spacing:inherit!important}.slick-slider .slick-slide-inner>*{width:100%!important;padding:0!important}.elementor-image-carousel-wrapper.featured-products{float:none}.elementor-html>body{display:block!important}@supports (-webkit-touch-callout:none){.elementor-element{background-attachment:scroll!important}}.page-content.page-cms .elementor{text-align:right} \ No newline at end of file diff --git a/modules/creativeelements/views/css/frontend.css b/modules/creativeelements/views/css/frontend.css new file mode 100644 index 00000000..2e9baa91 --- /dev/null +++ b/modules/creativeelements/views/css/frontend.css @@ -0,0 +1,5512 @@ +.dialog-widget-content { + background-color: #fff; + position: absolute; + border-radius: 3px; + box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2); + overflow: hidden; } + +.dialog-message { + font-size: 12px; + line-height: 1.5; + box-sizing: border-box; } + +.dialog-type-lightbox { + position: fixed; + height: 100%; + width: 100%; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.8); + z-index: 9999; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .dialog-type-lightbox .dialog-widget-content { + margin: auto; + width: 375px; } + .dialog-type-lightbox .dialog-header { + font-size: 15px; + color: #495157; + padding: 30px 0 10px; + font-weight: 500; } + .dialog-type-lightbox .dialog-message { + padding: 0 30px 30px; + min-height: 50px; } + .dialog-type-lightbox:not(.elementor-popup-modal) .dialog-header, + .dialog-type-lightbox:not(.elementor-popup-modal) .dialog-message { + text-align: center; } + .dialog-type-lightbox .dialog-buttons-wrapper { + border-top: 1px solid #e6e9ec; + text-align: center; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button { + font-family: Roboto; + width: 50%; + border: none; + background: none; + font-size: 15px; + cursor: pointer; + padding: 13px 0; + outline: 0; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:first-child { + color: #6d7882; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:hover { + background-color: #f4f6f7; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-ok { + color: #b01b1b; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-take_over { + color: #39b54a; } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:active { + background-color: rgba(230, 233, 236, 0.5); } + .dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button::-moz-focus-inner { + border: 0; } + +.dialog-close-button { + cursor: pointer; + position: absolute; + top: 15px; + right: 15px; + font-size: 15px; + line-height: 1; } + .dialog-close-button:not(:hover) { + opacity: .4; } + +.dialog-alert-widget .dialog-buttons-wrapper > button { + width: 100%; } + +.dialog-confirm-widget .dialog-button:first-child { + border-right: 1px solid #e6e9ec; } + +.dialog-prevent-scroll { + overflow: hidden; + max-height: 100vh; } + +.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio { + padding-bottom: 42.8571%; } + +.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio { + padding-bottom: 56.25%; } + +.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio { + padding-bottom: 75%; } + +.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio { + padding-bottom: 66.6666%; } + +.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio { + padding-bottom: 100%; } + +.elementor-aspect-ratio-916 .elementor-fit-aspect-ratio { + padding-bottom: 177.8%; } + +.elementor-fit-aspect-ratio { + position: relative; + height: 0; } + .elementor-fit-aspect-ratio iframe { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + border: 0; + background-color: #000; } + .elementor-fit-aspect-ratio video { + width: 100%; } + +.flatpickr-calendar { + width: 280px; } + .flatpickr-calendar .flatpickr-current-month span.cur-month { + font-weight: 300; } + .flatpickr-calendar .dayContainer { + width: 280px; + min-width: 280px; + max-width: 280px; } + .flatpickr-calendar .flatpickr-days { + width: 280px; } + .flatpickr-calendar .flatpickr-day { + max-width: 37px; + height: 37px; + line-height: 37px; } + +.elementor-templates-modal .dialog-widget-content { + font-family: Roboto, Arial, Helvetica, Verdana, sans-serif; + background-color: #f1f3f5; + width: 100%; } + @media (max-width: 1439px) { + .elementor-templates-modal .dialog-widget-content { + max-width: 990px; } } + @media (min-width: 1440px) { + .elementor-templates-modal .dialog-widget-content { + max-width: 1200px; } } + +.elementor-templates-modal .dialog-header { + padding: 0; + background-color: #fff; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + position: relative; + z-index: 1; } + +.elementor-templates-modal .dialog-buttons-wrapper { + display: none; } + +.elementor-templates-modal .dialog-message { + height: 750px; + max-height: 85vh; + overflow: auto; + padding-top: 25px; } + +.elementor-templates-modal .dialog-content { + height: 100%; } + +.elementor-templates-modal .dialog-loading { + display: none; } + +.elementor-templates-modal__header { + display: flex; + align-items: center; + justify-content: space-between; + height: 50px; } + .elementor-templates-modal__header__logo { + line-height: 1; + text-transform: uppercase; + font-weight: bold; + cursor: pointer; } + .elementor-templates-modal__header__logo-area { + text-align: left; + padding-left: 15px; } + .elementor-templates-modal__header__logo-area > * { + display: flex; + align-items: center; } + .elementor-templates-modal__header__logo__icon-wrapper { + padding: 4px 7px 6px; + background-image: linear-gradient(-135deg, #f2295b, #434363); + border-radius: 2px; + margin-right: 10px; } + .elementor-templates-modal__header__logo__title { + padding-top: 2px; } + .elementor-templates-modal__header__logo i { + color: #fff; + font-size: 10px; } + .elementor-templates-modal__header__items-area { + display: flex; + flex-direction: row-reverse; } + .elementor-templates-modal__header__item { + position: relative; + display: flex; + align-items: center; + justify-content: center; + box-sizing: content-box; } + .elementor-templates-modal__header__item > i { + font-size: 20px; + transition: color .5s; + cursor: pointer; } + .elementor-templates-modal__header__item > i:not(:hover) { + color: #a4afb7; } + .elementor-templates-modal__header__close--normal { + width: 45px; + border-left: 1px solid #e6e9ec; } + .elementor-templates-modal__header__close--normal i { + font-size: 18px; } + .elementor-templates-modal__header__close--skip { + padding: 10px; + padding-left: 20px; + margin-right: 10px; + color: #fff; + background-color: #a4afb7; + font-size: 11px; + font-weight: normal; + line-height: 1; + text-transform: uppercase; + border-radius: 2px; + cursor: pointer; } + .elementor-templates-modal__header__close--skip > i { + font-size: inherit; + padding-left: 10px; + margin-left: 15px; + border-left: 1px solid; } + .elementor-templates-modal__header__close--skip > i:not(:hover) { + color: #fff; } + +.elementor-hidden { + display: none; } + +.elementor-screen-only, +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + position: absolute; + top: -10000em; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; } + +.elementor-clearfix:after { + content: ''; + display: block; + clear: both; + width: 0; + height: 0; } + +.elementor { + -webkit-hyphens: manual; + -ms-hyphens: manual; + hyphens: manual; } + .elementor *, .elementor *:before, .elementor *:after { + box-sizing: border-box; } + .elementor a { + box-shadow: none; + text-decoration: none; } + .elementor hr { + margin: 0; + background-color: transparent; } + .elementor img { + height: auto; + max-width: 100%; + border: none; + border-radius: 0; + box-shadow: none; } + .elementor .elementor-widget:not(.elementor-widget-text-editor) figure { + margin: 0; } + .elementor embed, + .elementor iframe, + .elementor object, + .elementor video { + max-width: 100%; + width: 100%; + margin: 0; + line-height: 1; + border: none; } + .elementor .elementor-custom-embed { + line-height: 0; } + .elementor .elementor-background-video-container, + .elementor .elementor-background-holder, + .elementor .elementor-background { + height: 100%; + width: 100%; + top: 0; + left: 0; + position: absolute; + overflow: hidden; + z-index: 0; } + .elementor .elementor-background-video-container { + transition: opacity 1s; + pointer-events: none; } + .elementor .elementor-background-video-container.elementor-loading { + opacity: 0; } + .elementor .elementor-background-video-embed { + max-width: none; } + .elementor .elementor-background-video-embed, .elementor .elementor-background-video-hosted { + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); } + .elementor .elementor-background-video { + position: absolute; + max-width: none; + top: 50%; + left: 50%; + transform: translateY(-50%) translateX(-50%); } + .elementor .elementor-html5-video { + object-fit: cover; } + .elementor .elementor-background-overlay { + height: 100%; + width: 100%; + top: 0; + left: 0; + position: absolute; } + +.elementor-widget-wrap > .elementor-element.elementor-absolute { + position: absolute; } + +.elementor-widget-wrap > .elementor-element.elementor-fixed { + position: fixed; } + +.elementor-widget-wrap .elementor-element.elementor-widget__width-auto, +.elementor-widget-wrap .elementor-element.elementor-widget__width-initial, +.elementor-widget-wrap .elementor-element.elementor-widget__width-calc { + max-width: 100%; } + +@media (max-width: 1024px) { + .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-auto, + .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-initial, + .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-calc { + max-width: 100%; } } + +@media (max-width: 767px) { + .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-auto, + .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-initial, + .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-calc { + max-width: 100%; } } + +.elementor-element.elementor-absolute, .elementor-element.elementor-fixed { + z-index: 1; } + +.elementor-invisible { + visibility: hidden; } + +.elementor-align-center { + text-align: center; } + .elementor-align-center .elementor-button { + width: auto; } + +.elementor-align-right { + text-align: right; } + .elementor-align-right .elementor-button { + width: auto; } + +.elementor-align-left { + text-align: left; } + .elementor-align-left .elementor-button { + width: auto; } + +.elementor-align-justify .elementor-button { + width: 100%; } + +.elementor-custom-embed-play { + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); } + .elementor-custom-embed-play i { + font-size: 100px; + color: #fff; + opacity: 0.8; + text-shadow: 1px 0 6px rgba(0, 0, 0, 0.3); + transition: all .5s; } + .elementor-custom-embed-play.elementor-playing i { + font-family: 'FontAwesome'; + animation: fa-spin 2s infinite linear; } + .elementor-custom-embed-play.elementor-playing i:before { + content: "\f1ce"; } + +.elementor-swiper-button { + position: absolute; + display: inline-flex; + z-index: 1; + cursor: pointer; + font-size: 32px; + color: rgba(238, 238, 238, 0.9); + top: 50%; + transform: translateY(-50%); } + .elementor-swiper-button.swiper-button-disabled { + opacity: 0.3; } + +.elementor-tag { + display: inline-flex; } + +@media (max-width: 1024px) { + .elementor-tablet-align-center { + text-align: center; } + .elementor-tablet-align-center .elementor-button { + width: auto; } + .elementor-tablet-align-right { + text-align: right; } + .elementor-tablet-align-right .elementor-button { + width: auto; } + .elementor-tablet-align-left { + text-align: left; } + .elementor-tablet-align-left .elementor-button { + width: auto; } + .elementor-tablet-align-justify .elementor-button { + width: 100%; } } + +@media (max-width: 767px) { + .elementor-mobile-align-center { + text-align: center; } + .elementor-mobile-align-center .elementor-button { + width: auto; } + .elementor-mobile-align-right { + text-align: right; } + .elementor-mobile-align-right .elementor-button { + width: auto; } + .elementor-mobile-align-left { + text-align: left; } + .elementor-mobile-align-left .elementor-button { + width: auto; } + .elementor-mobile-align-justify .elementor-button { + width: 100%; } } + +.elementor-section { + position: relative; } + .elementor-section .elementor-container { + display: flex; + margin-right: auto; + margin-left: auto; + position: relative; } + .elementor-section.elementor-section-boxed > .elementor-container { + max-width: 1140px; } + .elementor-section.elementor-section-stretched { + position: relative; + width: 100%; } + .elementor-section.elementor-section-items-top > .elementor-container { + align-items: flex-start; } + .elementor-section.elementor-section-items-middle > .elementor-container { + align-items: center; } + .elementor-section.elementor-section-items-bottom > .elementor-container { + align-items: flex-end; } + @media (min-width: 768px) { + .elementor-section.elementor-section-height-full { + height: 100vh; } + .elementor-section.elementor-section-height-full > .elementor-container { + height: 100%; } } + +.elementor-section-content-top > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap { + align-items: flex-start; } + +.elementor-section-content-middle > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap { + align-items: center; } + +.elementor-section-content-bottom > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap { + align-items: flex-end; } + +.elementor-row { + width: 100%; + display: flex; } + @media (max-width: 1024px) { + .elementor-row { + flex-wrap: wrap; } } + +.elementor-column-wrap { + width: 100%; + position: relative; + display: flex; } + +.elementor-widget-wrap { + position: relative; + width: 100%; + flex-wrap: wrap; + align-content: flex-start; } + .elementor-html .elementor-widget-wrap, + .elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap { + display: flex; } + .elementor-widget-wrap > .elementor-element { + width: 100%; } + +.elementor-widget { + position: relative; } + .elementor-widget:not(:last-child) { + margin-bottom: 20px; } + .elementor-widget:not(:last-child).elementor-widget__width-auto, + .elementor-widget:not(:last-child).elementor-widget__width-initial, + .elementor-widget:not(:last-child).elementor-widget__width-calc, + .elementor-widget:not(:last-child).elementor-absolute { + margin-bottom: 0; } + +.elementor-column { + position: relative; + min-height: 1px; + display: flex; } + +.elementor-column-gap-narrow > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 5px; } + +.elementor-column-gap-default > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 10px; } + +.elementor-column-gap-extended > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 15px; } + +.elementor-column-gap-wide > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 20px; } + +.elementor-column-gap-wider > .elementor-row > .elementor-column > .elementor-element-populated { + padding: 30px; } + +.elementor-inner-section .elementor-column-gap-no .elementor-element-populated { + padding: 0; } + +@media (min-width: 768px) { + .elementor-column.elementor-col-10, .elementor-column[data-col="10"] { + width: 10%; } + .elementor-column.elementor-col-11, .elementor-column[data-col="11"] { + width: 11.111%; } + .elementor-column.elementor-col-12, .elementor-column[data-col="12"] { + width: 12.5%; } + .elementor-column.elementor-col-14, .elementor-column[data-col="14"] { + width: 14.285%; } + .elementor-column.elementor-col-16, .elementor-column[data-col="16"] { + width: 16.666%; } + .elementor-column.elementor-col-20, .elementor-column[data-col="20"] { + width: 20%; } + .elementor-column.elementor-col-25, .elementor-column[data-col="25"] { + width: 25%; } + .elementor-column.elementor-col-30, .elementor-column[data-col="30"] { + width: 30%; } + .elementor-column.elementor-col-33, .elementor-column[data-col="33"] { + width: 33.333%; } + .elementor-column.elementor-col-40, .elementor-column[data-col="40"] { + width: 40%; } + .elementor-column.elementor-col-50, .elementor-column[data-col="50"] { + width: 50%; } + .elementor-column.elementor-col-60, .elementor-column[data-col="60"] { + width: 60%; } + .elementor-column.elementor-col-66, .elementor-column[data-col="66"] { + width: 66.666%; } + .elementor-column.elementor-col-70, .elementor-column[data-col="70"] { + width: 70%; } + .elementor-column.elementor-col-75, .elementor-column[data-col="75"] { + width: 75%; } + .elementor-column.elementor-col-80, .elementor-column[data-col="80"] { + width: 80%; } + .elementor-column.elementor-col-83, .elementor-column[data-col="83"] { + width: 83.333%; } + .elementor-column.elementor-col-90, .elementor-column[data-col="90"] { + width: 90%; } + .elementor-column.elementor-col-100, .elementor-column[data-col="100"] { + width: 100%; } } + +@media (max-width: 479px) { + .elementor-column.elementor-xs-10 { + width: 10%; } + .elementor-column.elementor-xs-11 { + width: 11.111%; } + .elementor-column.elementor-xs-12 { + width: 12.5%; } + .elementor-column.elementor-xs-14 { + width: 14.285%; } + .elementor-column.elementor-xs-16 { + width: 16.666%; } + .elementor-column.elementor-xs-20 { + width: 20%; } + .elementor-column.elementor-xs-25 { + width: 25%; } + .elementor-column.elementor-xs-30 { + width: 30%; } + .elementor-column.elementor-xs-33 { + width: 33.333%; } + .elementor-column.elementor-xs-40 { + width: 40%; } + .elementor-column.elementor-xs-50 { + width: 50%; } + .elementor-column.elementor-xs-60 { + width: 60%; } + .elementor-column.elementor-xs-66 { + width: 66.666%; } + .elementor-column.elementor-xs-70 { + width: 70%; } + .elementor-column.elementor-xs-75 { + width: 75%; } + .elementor-column.elementor-xs-80 { + width: 80%; } + .elementor-column.elementor-xs-83 { + width: 83.333%; } + .elementor-column.elementor-xs-90 { + width: 90%; } + .elementor-column.elementor-xs-100 { + width: 100%; } } + +@media (max-width: 767px) { + .elementor-column.elementor-sm-10 { + width: 10%; } + .elementor-column.elementor-sm-11 { + width: 11.111%; } + .elementor-column.elementor-sm-12 { + width: 12.5%; } + .elementor-column.elementor-sm-14 { + width: 14.285%; } + .elementor-column.elementor-sm-16 { + width: 16.666%; } + .elementor-column.elementor-sm-20 { + width: 20%; } + .elementor-column.elementor-sm-25 { + width: 25%; } + .elementor-column.elementor-sm-30 { + width: 30%; } + .elementor-column.elementor-sm-33 { + width: 33.333%; } + .elementor-column.elementor-sm-40 { + width: 40%; } + .elementor-column.elementor-sm-50 { + width: 50%; } + .elementor-column.elementor-sm-60 { + width: 60%; } + .elementor-column.elementor-sm-66 { + width: 66.666%; } + .elementor-column.elementor-sm-70 { + width: 70%; } + .elementor-column.elementor-sm-75 { + width: 75%; } + .elementor-column.elementor-sm-80 { + width: 80%; } + .elementor-column.elementor-sm-83 { + width: 83.333%; } + .elementor-column.elementor-sm-90 { + width: 90%; } + .elementor-column.elementor-sm-100 { + width: 100%; } } + +@media (min-width: 768px) and (max-width: 1024px) { + .elementor-column.elementor-md-10 { + width: 10%; } + .elementor-column.elementor-md-11 { + width: 11.111%; } + .elementor-column.elementor-md-12 { + width: 12.5%; } + .elementor-column.elementor-md-14 { + width: 14.285%; } + .elementor-column.elementor-md-16 { + width: 16.666%; } + .elementor-column.elementor-md-20 { + width: 20%; } + .elementor-column.elementor-md-25 { + width: 25%; } + .elementor-column.elementor-md-30 { + width: 30%; } + .elementor-column.elementor-md-33 { + width: 33.333%; } + .elementor-column.elementor-md-40 { + width: 40%; } + .elementor-column.elementor-md-50 { + width: 50%; } + .elementor-column.elementor-md-60 { + width: 60%; } + .elementor-column.elementor-md-66 { + width: 66.666%; } + .elementor-column.elementor-md-70 { + width: 70%; } + .elementor-column.elementor-md-75 { + width: 75%; } + .elementor-column.elementor-md-80 { + width: 80%; } + .elementor-column.elementor-md-83 { + width: 83.333%; } + .elementor-column.elementor-md-90 { + width: 90%; } + .elementor-column.elementor-md-100 { + width: 100%; } } + +@media (min-width: 768px) and (max-width: 1024px) { + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(1) { + order: 10; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(2) { + order: 9; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(3) { + order: 8; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(4) { + order: 7; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(5) { + order: 6; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(6) { + order: 5; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(7) { + order: 4; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(8) { + order: 3; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(9) { + order: 2; } + .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(10) { + order: 1; } } + +@media (max-width: 767px) { + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(1) { + order: 10; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(2) { + order: 9; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(3) { + order: 8; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(4) { + order: 7; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(5) { + order: 6; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(6) { + order: 5; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(7) { + order: 4; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(8) { + order: 3; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(9) { + order: 2; } + .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(10) { + order: 1; } + .elementor-column { + width: 100%; } } + +.elementor-section-tabbed > .elementor-container, +.elementor-section-tabbed > .elementor-container > .elementor-row { + flex-wrap: wrap; } +.elementor-nav-tabs.elementor-nav--layout-horizontal { + width: 100%; } +.elementor-nav-tabs + .elementor-row > .elementor-column { + min-width: 100%; } + .elementor-nav-tabs + .elementor-row > .elementor-column:not(.elementor-active) { + position: absolute; + top: -1000000px; + visibility: hidden; + pointer-events: none; } +.elementor-nav-tabs > .elementor-nav { + overflow: hidden; } + .elementor-nav-tabs > .elementor-nav::-webkit-scrollbar { + display: none; } +.elementor-section-tabbed { + counter-reset: ce-tab; } +.elementor-section-tabbed li.menu-item-type-column { + counter-increment: ce-tab; } +.elementor-section-tabbed .ce-tab-num::after { + content: "Tab #" counter(ce-tab); } + +ul.elementor-icon-list-items.elementor-inline-items { + display: flex; + flex-wrap: wrap; } + ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item { + word-break: break-word; } + +.elementor-grid .elementor-grid-item { + word-break: break-word; + min-width: 0; } + +.elementor-grid-0 .elementor-grid { + display: flex; + overflow: hidden; + flex-wrap: wrap; } + +.elementor-grid-1 .elementor-grid { + grid-template-columns: repeat(1, 1fr); + display: grid; } + +.elementor-grid-2 .elementor-grid { + grid-template-columns: repeat(2, 1fr); + display: grid; } + +.elementor-grid-3 .elementor-grid { + grid-template-columns: repeat(3, 1fr); + display: grid; } + +.elementor-grid-4 .elementor-grid { + grid-template-columns: repeat(4, 1fr); + display: grid; } + +.elementor-grid-5 .elementor-grid { + grid-template-columns: repeat(5, 1fr); + display: grid; } + +.elementor-grid-6 .elementor-grid { + grid-template-columns: repeat(6, 1fr); + display: grid; } + +.elementor-grid-7 .elementor-grid { + grid-template-columns: repeat(7, 1fr); + display: grid; } + +.elementor-grid-8 .elementor-grid { + grid-template-columns: repeat(8, 1fr); + display: grid; } + +.elementor-grid-9 .elementor-grid { + grid-template-columns: repeat(9, 1fr); + display: grid; } + +.elementor-grid-10 .elementor-grid { + grid-template-columns: repeat(10, 1fr); + display: grid; } + +.elementor-grid-11 .elementor-grid { + grid-template-columns: repeat(11, 1fr); + display: grid; } + +.elementor-grid-12 .elementor-grid { + grid-template-columns: repeat(12, 1fr); + display: grid; } + +@media (max-width: 1024px) { + .elementor-grid-tablet-0 .elementor-grid { + display: flex; + overflow: hidden; + flex-wrap: wrap; } + .elementor-grid-tablet-1 .elementor-grid { + grid-template-columns: repeat(1, 1fr); + display: grid; } + .elementor-grid-tablet-2 .elementor-grid { + grid-template-columns: repeat(2, 1fr); + display: grid; } + .elementor-grid-tablet-3 .elementor-grid { + grid-template-columns: repeat(3, 1fr); + display: grid; } + .elementor-grid-tablet-4 .elementor-grid { + grid-template-columns: repeat(4, 1fr); + display: grid; } + .elementor-grid-tablet-5 .elementor-grid { + grid-template-columns: repeat(5, 1fr); + display: grid; } + .elementor-grid-tablet-6 .elementor-grid { + grid-template-columns: repeat(6, 1fr); + display: grid; } + .elementor-grid-tablet-7 .elementor-grid { + grid-template-columns: repeat(7, 1fr); + display: grid; } + .elementor-grid-tablet-8 .elementor-grid { + grid-template-columns: repeat(8, 1fr); + display: grid; } + .elementor-grid-tablet-9 .elementor-grid { + grid-template-columns: repeat(9, 1fr); + display: grid; } + .elementor-grid-tablet-10 .elementor-grid { + grid-template-columns: repeat(10, 1fr); + display: grid; } + .elementor-grid-tablet-11 .elementor-grid { + grid-template-columns: repeat(11, 1fr); + display: grid; } + .elementor-grid-tablet-12 .elementor-grid { + grid-template-columns: repeat(12, 1fr); + display: grid; } } + +@media (max-width: 767px) { + .elementor-grid-mobile-0 .elementor-grid { + display: flex; + overflow: hidden; + flex-wrap: wrap; } + .elementor-grid-mobile-1 .elementor-grid { + grid-template-columns: repeat(1, 1fr); + display: grid; } + .elementor-grid-mobile-2 .elementor-grid { + grid-template-columns: repeat(2, 1fr); + display: grid; } + .elementor-grid-mobile-3 .elementor-grid { + grid-template-columns: repeat(3, 1fr); + display: grid; } + .elementor-grid-mobile-4 .elementor-grid { + grid-template-columns: repeat(4, 1fr); + display: grid; } + .elementor-grid-mobile-5 .elementor-grid { + grid-template-columns: repeat(5, 1fr); + display: grid; } + .elementor-grid-mobile-6 .elementor-grid { + grid-template-columns: repeat(6, 1fr); + display: grid; } + .elementor-grid-mobile-7 .elementor-grid { + grid-template-columns: repeat(7, 1fr); + display: grid; } + .elementor-grid-mobile-8 .elementor-grid { + grid-template-columns: repeat(8, 1fr); + display: grid; } + .elementor-grid-mobile-9 .elementor-grid { + grid-template-columns: repeat(9, 1fr); + display: grid; } + .elementor-grid-mobile-10 .elementor-grid { + grid-template-columns: repeat(10, 1fr); + display: grid; } + .elementor-grid-mobile-11 .elementor-grid { + grid-template-columns: repeat(11, 1fr); + display: grid; } + .elementor-grid-mobile-12 .elementor-grid { + grid-template-columns: repeat(12, 1fr); + display: grid; } } + +@media (min-width: 1025px) { + #elementor-device-mode:after { + content: 'desktop'; } } + +@media (min-width: 768px) and (max-width: 1024px) { + #elementor-device-mode:after { + content: 'tablet'; } } + +@media (max-width: 767px) { + #elementor-device-mode:after { + content: 'mobile'; } } + +.elementor-form-fields-wrapper { + display: flex; + flex-wrap: wrap; } + .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > textarea, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > .elementor-select-wrapper, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group .elementor-field-subgroup { + flex-basis: 100%; + max-width: 100%; } + .elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group .elementor-select-wrapper { + flex-grow: 1; } + +.elementor-field-group { + flex-wrap: wrap; + align-items: center; } + .elementor-field-group.elementor-field-type-submit { + align-items: flex-end; } + .elementor-field-group .elementor-field-textual { + width: 100%; + max-width: 100%; + border: 1px solid #818a91; + background-color: transparent; + color: #373a3c; + vertical-align: middle; + flex-grow: 1; } + .elementor-field-group .elementor-field-textual:focus { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset; + outline: 0; } + .elementor-field-group .elementor-field-textual::-webkit-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-field-textual:-ms-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-field-textual:-moz-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-field-textual::-ms-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-field-textual::placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-field-group .elementor-select-wrapper { + display: flex; + position: relative; + width: 100%; } + .elementor-field-group .elementor-select-wrapper select { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + color: inherit; + font-size: inherit; + font-family: inherit; + font-weight: inherit; + font-style: inherit; + text-transform: inherit; + letter-spacing: inherit; + line-height: inherit; + flex-basis: 100%; + padding-right: 20px; } + .elementor-field-group .elementor-select-wrapper:before { + content: '\f0d7'; + font-family: 'FontAwesome'; + font-size: 15px; + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 10px; + pointer-events: none; } + .elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before { + content: ''; } + +.elementor-field-subgroup { + display: flex; + flex-wrap: wrap; } + .elementor-field-subgroup .elementor-field-option label { + display: inline-block; } + .elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option { + padding-right: 10px; } + .elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option { + flex-basis: 100%; } + +.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option input, +.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option label, +.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option input, +.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option label, +.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option input, +.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option label { + display: inline; } + +.elementor-field-label { + text-align: left; + cursor: pointer; } + .elementor-mark-required .elementor-field-label:after { + content: '*'; + color: red; + padding-left: 0.2em; } + +.elementor-field-textual { + line-height: 1.4; } + .elementor-field-textual.elementor-size-xs { + font-size: 13px; + min-height: 33px; + padding: 4px 12px; + border-radius: 2px; } + .elementor-field-textual.elementor-size-sm { + font-size: 15px; + min-height: 40px; + padding: 5px 14px; + border-radius: 3px; } + .elementor-field-textual.elementor-size-md { + font-size: 16px; + min-height: 47px; + padding: 6px 16px; + border-radius: 4px; } + .elementor-field-textual.elementor-size-lg { + font-size: 18px; + min-height: 59px; + padding: 7px 20px; + border-radius: 5px; } + .elementor-field-textual.elementor-size-xl { + font-size: 20px; + min-height: 72px; + padding: 8px 24px; + border-radius: 6px; } + +.elementor-button-align-center .elementor-field-type-submit { + justify-content: center; } + +.elementor-button-align-stretch .elementor-field-type-submit button { + flex-basis: 100%; } + +.elementor-button-align-start .elementor-field-type-submit { + justify-content: flex-start; } + +.elementor-button-align-end .elementor-field-type-submit { + justify-content: flex-end; } + +@media screen and (max-width: 1024px) { + .elementor-tablet-button-align-center .elementor-field-type-submit { + justify-content: center; } + .elementor-tablet-button-align-stretch .elementor-field-type-submit button { + flex-basis: 100%; } + .elementor-tablet-button-align-start .elementor-field-type-submit { + justify-content: flex-start; } + .elementor-tablet-button-align-end .elementor-field-type-submit { + justify-content: flex-end; } } + +@media screen and (max-width: 767px) { + .elementor-mobile-button-align-center .elementor-field-type-submit { + justify-content: center; } + .elementor-mobile-button-align-stretch .elementor-field-type-submit button { + flex-basis: 100%; } + .elementor-mobile-button-align-start .elementor-field-type-submit { + justify-content: flex-start; } + .elementor-mobile-button-align-end .elementor-field-type-submit { + justify-content: flex-end; } } + +.elementor-error .elementor-field { + border-color: #d9534f; } + +.elementor-error .help-inline { + color: #d9534f; + font-size: 0.9em; } + +.elementor-message { + margin: 10px 0; + font-size: 1em; + line-height: 1; } + .elementor-message:before { + content: "\f00c"; + display: inline-block; + font-family: fontawesome; + font-weight: normal; + font-style: normal; + vertical-align: middle; + margin-right: 5px; } + .elementor-message.elementor-message-danger { + color: #d9534f; } + .elementor-message.elementor-message-danger:before { + content: "\f00d"; } + .elementor-message.form-message-success { + color: #5cb85c; } + +.elementor-form .elementor-button { + padding-top: 0; + padding-bottom: 0; + border: 0 none; } + .elementor-form .elementor-button > span { + display: flex; + justify-content: center; } + .elementor-form .elementor-button .elementor-align-icon-right { + order: 2; } + .elementor-form .elementor-button .elementor-align-icon-left { + order: 0; } + .elementor-form .elementor-button.elementor-size-xs { + min-height: 33px; } + .elementor-form .elementor-button.elementor-size-sm { + min-height: 40px; } + .elementor-form .elementor-button.elementor-size-md { + min-height: 47px; } + .elementor-form .elementor-button.elementor-size-lg { + min-height: 59px; } + .elementor-form .elementor-button.elementor-size-xl { + min-height: 72px; } + +.elementor .elementor-section-wrap, +.elementor-element .elementor-widget-container { + transition: + opacity var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s), + background var(--e-background-transition-duration, .3s), + border var(--e-border-transition-duration, .3s), + border-radius var(--e-border-transition-duration, .3s), + box-shadow var(--e-border-transition-duration, .3s); } +.e-transform-hover .elementor-widget-container { + transition: + transform var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s), + opacity var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s), + background var(--e-background-transition-duration, .3s), + border var(--e-border-transition-duration, .3s), + border-radius var(--e-border-transition-duration, .3s), + box-shadow var(--e-border-transition-duration, .3s); } +.elementor-overflow-hidden .elementor-widget-container { + overflow: hidden; } +.elementor-element .elementor-widget-container:empty { + display: none; } + +.elementor-widget-text-path { + font-size: 20px; + text-align: var(--alignment, left); } + .elementor-widget-text-path svg { + width: var(--width, 500px); + max-width: 100%; + height: auto; + overflow: visible; + word-spacing: var(--word-spacing, normal); + transform: rotate(var(--rotate, 0)); } + .elementor-widget-text-path svg path { + vector-effect: non-scaling-stroke; + /* Prevent stroke size scaling when resizing the SVG. */ + fill: var(--path-fill, transparent); + stroke: var(--stroke-color, transparent); + stroke-width: var(--stroke-width, 1px); + transition: var(--stroke-transition, .3s) all; } + .elementor-widget-text-path svg:hover path { + --path-fill: var(--path-fill-hover); + --stroke-color: var(--stroke-color-hover); + --stroke-width: var(--stroke-width-hover); } + .elementor-widget-text-path svg text { + --fill: var(--text-color); + fill: var(--fill); + direction: var(--direction, ltr); + transition: var(--transition, .3s) all; } + .elementor-widget-text-path svg text:hover { + --color: var(--text-color-hover, var(--text-color)); + --fill: var(--color); + color: var(--color); } + +.elementor-accordion { + text-align: left; } + .elementor-accordion .elementor-accordion-item { + border: 1px solid #D4D4D4; } + .elementor-accordion .elementor-accordion-item + .elementor-accordion-item { + border-top: none; } + .elementor-accordion .elementor-tab-title { + margin: 0; + padding: 15px 20px; + font-weight: bold; + line-height: 1; + cursor: pointer; + outline: none; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon { + display: inline-block; + width: 1.5em; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right { + float: right; + text-align: right; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left { + float: left; + text-align: left; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed { + display: block; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened { + display: none; } + .elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed { + display: none; } + .elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened { + display: block; } + .elementor-accordion .elementor-tab-content { + display: none; + padding: 15px 20px; + border-top: 1px solid #D4D4D4; } + +@media (max-width: 767px) { + .elementor-accordion .elementor-tab-title { + padding: 12px 15px; } + .elementor-accordion .elementor-tab-title .elementor-accordion-icon { + width: 1.2em; } + .elementor-accordion .elementor-tab-content { + padding: 7px 15px; } } + +.elementor-alert { + padding: 15px; + border-left: 5px solid transparent; + position: relative; + text-align: left; } + .elementor-alert .elementor-alert-title { + display: block; + font-weight: bold; } + .elementor-alert .elementor-alert-description { + font-size: 13px; } + .elementor-alert button.elementor-alert-dismiss { + position: absolute; + right: 10px; + top: 10px; + padding: 3px; + font-size: 20px; + line-height: 1; + background: transparent; + color: inherit !important; + border: none; + cursor: pointer; } + .elementor-alert.elementor-alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bcdff1; } + .elementor-alert.elementor-alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #cae6be; } + .elementor-alert.elementor-alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #f9f0c3; } + .elementor-alert.elementor-alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #e8c4c4; } + +@media (max-width: 767px) { + .elementor-alert { + padding: 10px; } + .elementor-alert button.elementor-alert-dismiss { + right: 7px; + top: 7px; } } + +.elementor-tab-title a { + color: inherit !important; } + +.elementor-button { + display: inline-block; + border: none; + line-height: 1; + background-color: #818a91; + color: #fff; + text-align: center; + transition: all 0.5s; } + a.elementor-button:not(#e), + a.elementor-button:not(#e):hover, + a.elementor-button:not(#e):focus, + a.elementor-button:not(#e):visited { + color: #fff; } + .elementor-button-content-wrapper { + display: flex; + gap: 5px; + justify-content: center; + align-items: baseline; } + .elementor-button-icon { + flex-grow: 0; + order: 5 } + .elementor-button-text { + flex-grow: 1; + order: 10; + display: inline-block } + .elementor-button.elementor-size-xs { + font-size: 13px; + padding: 10px 20px; + border-radius: 2px; } + .elementor-button.elementor-size-sm { + font-size: 15px; + padding: 12px 24px; + border-radius: 3px; } + .elementor-button.elementor-size-md { + font-size: 16px; + padding: 15px 30px; + border-radius: 4px; } + .elementor-button.elementor-size-lg { + font-size: 18px; + padding: 20px 40px; + border-radius: 5px; } + .elementor-button.elementor-size-xl { + font-size: 20px; + padding: 25px 50px; + border-radius: 6px; } + .elementor-button .elementor-align-icon-right { + order: 15 } + .elementor-button .elementor-align-icon-left { + order: 5 } + .elementor-button span { + text-decoration: inherit; } + +.elementor-element.elementor-button-info .elementor-button { + background-color: #5bc0de; } + +.elementor-element.elementor-button-success .elementor-button { + background-color: #5cb85c; } + +.elementor-element.elementor-button-warning .elementor-button { + background-color: #f0ad4e; } + +.elementor-element.elementor-button-danger .elementor-button { + background-color: #d9534f; } + +.elementor-widget-button .elementor-button .elementor-button-info { + background-color: #5bc0de; } + +.elementor-widget-button .elementor-button .elementor-button-success { + background-color: #5cb85c; } + +.elementor-widget-button .elementor-button .elementor-button-warning { + background-color: #f0ad4e; } + +.elementor-widget-button .elementor-button .elementor-button-danger { + background-color: #d9534f; } + +.elementor-counter .elementor-counter-number-wrapper { + display: flex; + font-size: 69px; + font-weight: 600; + color: #222222; + line-height: 1; } + +.elementor-counter .elementor-counter-number-prefix, .elementor-counter .elementor-counter-number-suffix { + flex-grow: 1; + white-space: pre-wrap; } + +.elementor-counter .elementor-counter-number-prefix { + text-align: right; } + +.elementor-counter .elementor-counter-number-suffix { + text-align: left; } + +.elementor-counter .elementor-counter-title { + text-align: center; + font-size: 19px; + font-weight: 400; + color: #666666; + line-height: 2.5; } + +.elementor-widget-divider .elementor-divider { + line-height: 0; + font-size: 0; } + +.elementor-widget-divider .elementor-divider-separator { + display: inline-block; } + +.elementor-image-gallery--layout-grid .elementor-image-gallery { + flex-flow: row wrap; } +.elementor-image-gallery--layout-masonry .elementor-image-gallery { + max-height: 1000px; + overflow: hidden; + flex-flow: column wrap; } +.elementor-image-gallery { + display: flex; } + .elementor-image-gallery figure { + text-align: center; + width: 100%; + margin: 0 auto; } + .elementor-image-gallery img { + width: 100%; + margin: 0 auto; } + .elementor-image-gallery figcaption { + margin: 0; } + +.elementor-widget-google_maps iframe { + height: 300px; } + +.elementor-widget-heading .elementor-heading-title { + padding: 0; + margin: 0; + line-height: 1; } + .elementor-widget-heading .elementor-heading-title > a { + color: inherit !important; + font-size: inherit !important; } + .elementor-widget-heading .elementor-heading-title.elementor-size-small { + font-size: 15px; } + .elementor-widget-heading .elementor-heading-title.elementor-size-medium { + font-size: 19px; } + .elementor-widget-heading .elementor-heading-title.elementor-size-large { + font-size: 29px; } + .elementor-widget-heading .elementor-heading-title.elementor-size-xl { + font-size: 39px; } + .elementor-widget-heading .elementor-heading-title.elementor-size-xxl { + font-size: 59px; } + +.elementor-icon-wrapper { + line-height: 0; } +.elementor-icon { + display: inline-block; + line-height: 1; + transition: all 0.5s; + color: #818a91; + font-size: 50px; + text-align: center; } + .elementor-icon:hover { + color: #818a91; } + .elementor-icon i { + width: 1em; + height: 1em; + position: relative; + display: block; } + .elementor-icon i:before { + position: absolute; + left: 50%; + transform: translateX(-50%); } + +.elementor-view-stacked .elementor-icon { + padding: .5em; + background-color: #818a91; + color: #fff; } + +.elementor-view-framed .elementor-icon { + padding: .5em; + color: #818a91; + border: 3px solid #818a91; + background-color: transparent; } + +.elementor-shape-circle .elementor-icon { + border-radius: 50%; } + +@media (min-width: 768px) { + .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper { + display: flex; } + .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon { + display: inline-flex; + flex: 0 0 auto; } + .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper { + text-align: right; + flex-direction: row-reverse; } + .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper { + text-align: left; + flex-direction: row; } + .elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img { + margin: auto; } + .elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper { + align-items: flex-start; } + .elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper { + align-items: center; } + .elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper { + align-items: flex-end; } } + +@media (max-width: 767px) { + .elementor-widget-icon-box .elementor-icon-box-icon { + margin-left: auto !important; + margin-right: auto !important; + margin-bottom: 15px; } } + +.elementor-widget-icon-box .elementor-icon-box-wrapper { + text-align: center; } + +.elementor-widget-icon-box .elementor-icon-box-title a { + color: inherit !important; } + +.elementor-widget-icon-box .elementor-icon-box-content { + flex-grow: 1; } + +.elementor-widget-icon-box .elementor-icon-box-description { + margin: 0; } + +.elementor-widget.elementor-icon-list--layout-inline .elementor-widget-container { + overflow: hidden; } + +.elementor-widget .elementor-icon-list-items.elementor-inline-items { + margin-right: -8px; + margin-left: -8px; } + .elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item { + margin-right: 8px; + margin-left: 8px; } + .elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after { + width: auto; + left: auto; + right: auto; + position: relative; + height: 100%; + top: 50%; + transform: translateY(-50%); + border-top: 0; + border-bottom: 0; + border-right: 0; + border-left-width: 1px; + border-style: solid; + right: -8px; } + +.elementor-widget .elementor-icon-list-items { + list-style-type: none; + margin: 0; + padding: 0; } + +.elementor-widget .elementor-icon-list-item { + margin: 0; + padding: 0; + position: relative; } + .elementor-widget .elementor-icon-list-item:after { + position: absolute; + bottom: 0; + width: 100%; } + .elementor-widget .elementor-icon-list-item, .elementor-widget .elementor-icon-list-item a { + display: flex; + align-items: flex-start; } + .elementor-widget .elementor-icon-list-item a { + width: 100%; } + +.elementor-widget .elementor-icon-list-icon + .elementor-icon-list-text { + align-self: center; + padding-left: 5px; } + +.elementor-widget .elementor-icon-list-icon { + flex-shrink: 0; } + +.elementor-widget.elementor-align-center .elementor-icon-list-item, .elementor-widget.elementor-align-center .elementor-icon-list-item a { + justify-content: center; } + +.elementor-widget.elementor-align-center .elementor-icon-list-item:after { + margin: auto; } + +.elementor-widget.elementor-align-center .elementor-inline-items { + justify-content: center; } + +.elementor-widget.elementor-align-left .elementor-icon-list-item, .elementor-widget.elementor-align-left .elementor-icon-list-item a { + justify-content: flex-start; + text-align: left; } + +.elementor-widget.elementor-align-left .elementor-inline-items { + justify-content: flex-start; } + +.elementor-widget.elementor-align-right .elementor-icon-list-item, .elementor-widget.elementor-align-right .elementor-icon-list-item a { + justify-content: flex-end; + text-align: right; } + +.elementor-widget.elementor-align-right .elementor-icon-list-items { + justify-content: flex-end; } + +.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after { + left: 0; } + +.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after { + right: 0; } + +@media (max-width: 1024px) { + .elementor-widget.elementor-tablet-align-center .elementor-icon-list-items { + justify-content: center; } + .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a { + justify-content: center; } + .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after { + margin: auto; } + .elementor-widget.elementor-tablet-align-left .elementor-icon-list-items { + justify-content: flex-start; } + .elementor-widget.elementor-tablet-align-left .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a { + justify-content: flex-start; + text-align: left; } + .elementor-widget.elementor-tablet-align-right .elementor-icon-list-items { + justify-content: flex-end; } + .elementor-widget.elementor-tablet-align-right .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a { + justify-content: flex-end; + text-align: right; } + .elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after { + left: 0; } + .elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after { + right: 0; } } + +@media (max-width: 767px) { + .elementor-widget.elementor-mobile-align-center .elementor-icon-list-items { + justify-content: center; } + .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a { + justify-content: center; } + .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after { + margin: auto; } + .elementor-widget.elementor-mobile-align-left .elementor-icon-list-items { + justify-content: flex-start; } + .elementor-widget.elementor-mobile-align-left .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a { + justify-content: flex-start; + text-align: left; } + .elementor-widget.elementor-mobile-align-right .elementor-icon-list-items { + justify-content: flex-end; } + .elementor-widget.elementor-mobile-align-right .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a { + justify-content: flex-end; + text-align: right; } + .elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after { + left: 0; } + .elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after { + right: 0; } } + +.elementor-widget-image { + text-align: center; } + .elementor-widget-image .elementor-image > a, + .elementor-widget-image .elementor-image figure > a { + display: inline-block; } + .elementor-widget-image .elementor-image > a img[src$=".svg"], + .elementor-widget-image .elementor-image figure > a img[src$=".svg"] { + width: 48px; } + .elementor-widget-image .elementor-image img { + vertical-align: middle; + display: inline-block; } + .elementor-widget-image .elementor-image.elementor-image-shape-circle { + border-radius: 50%; } + +.elementor-widget-image-box .elementor-image-box-content { + width: 100%; } + +@media (min-width: 768px) { + .elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper, .elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper { + display: flex; } + .elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper { + text-align: right; + flex-direction: row-reverse; } + .elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper { + text-align: left; + flex-direction: row; } + .elementor-widget-image-box.elementor-position-top .elementor-image-box-img { + margin: auto; } + .elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper { + align-items: flex-start; } + .elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper { + align-items: center; } + .elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper { + align-items: flex-end; } } + +@media (max-width: 767px) { + .elementor-widget-image-box .elementor-image-box-img { + margin-left: auto !important; + margin-right: auto !important; + margin-bottom: 15px; } } + +.elementor-widget-image-box .elementor-image-box-img { + display: inline-block; } + +.elementor-widget-image-box .elementor-image-box-title a { + color: inherit !important; } + +.elementor-widget-image-box .elementor-image-box-wrapper { + text-align: center; } + +.elementor-widget-image-box .elementor-image-box-description { + margin: 0; } + +.elementor-image-carousel-wrapper .slick-image-stretch:not(.slick-variable-width) .slick-slide .slick-slide-image { + width: 100%; + object-fit: cover; } + +.elementor-image-gallery figure img { + display: block; } + +.elementor-image-gallery figure figcaption { + width: 100%; } + +.swiper-container .swiper-slide figure { + line-height: 0; } + .swiper-container .swiper-slide figure img { + width: 100%; } + +body.elementor-page .elementor-widget-menu-anchor { + margin-bottom: 0; } + +.elementor-widget-progress { + text-align: left; } + +.elementor-progress-wrapper { + position: relative; + background-color: #eeeeee; + color: #ffffff; + height: 30px; + line-height: 30px; + border-radius: 2px; } + +.elementor-progress-bar { + display: flex; + background-color: #818a91; + width: 0; + font-size: 11px; + height: 100%; + border-radius: 2px; + transition: width 1s ease-in-out; } + +.elementor-progress-text { + flex-grow: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding-left: 15px; } + +.elementor-progress-percentage { + padding-right: 15px; } + +.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar { + background-color: #5bc0de; } + +.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar { + background-color: #5cb85c; } + +.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar { + background-color: #f0ad4e; } + +.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar { + background-color: #d9534f; } + +.elementor-progress .elementor-title { + display: block; } + +@media (max-width: 767px) { + .elementor-progress-wrapper { + height: 25px; + line-height: 25px; } + .elementor-progress-text { + padding-left: 10px; } } + +.elementor-social-icons-wrapper { + font-size: 0; } + +.elementor-social-icon { + font-size: 25px; + text-align: center; + padding: 0.5em; + margin-right: 5px; + cursor: pointer; } + .elementor-social-icon i { + color: white; } + .elementor-social-icon:last-child { + margin: 0; } + .elementor-social-icon:hover { + opacity: .9; + color: white; } + .elementor-social-icon-android { + background-color: #A4C639; } + .elementor-social-icon-apple { + background-color: #999999; } + .elementor-social-icon-behance { + background-color: #1769ff; } + .elementor-social-icon-bitbucket { + background-color: #205081; } + .elementor-social-icon-codepen { + background-color: #000000; } + .elementor-social-icon-delicious { + background-color: #3399ff; } + .elementor-social-icon-deviantart { + background-color: #05cc47; } + .elementor-social-icon-digg { + background-color: #005be2; } + .elementor-social-icon-dribbble { + background-color: #ea4c89; } + .elementor-social-icon-envelope { + background-color: #ea4335; } + .elementor-social-icon-facebook { + background-color: #3b5998; } + .elementor-social-icon-flickr { + background-color: #0063dc; } + .elementor-social-icon-foursquare { + background-color: #2d5be3; } + .elementor-social-icon-freecodecamp { + background-color: #006400; } + .elementor-social-icon-github { + background-color: #333333; } + .elementor-social-icon-gitlab { + background-color: #e24329; } + .elementor-social-icon-globe { + background-color: #818a91; } + .elementor-social-icon-google-plus { + background-color: #dd4b39; } + .elementor-social-icon-houzz { + background-color: #7ac142; } + .elementor-social-icon-instagram { + background-color: #262626; } + .elementor-social-icon-jsfiddle { + background-color: #487AA2; } + .elementor-social-icon-link { + background-color: #818a91; } + .elementor-social-icon-linkedin { + background-color: #0077b5; } + .elementor-social-icon-medium { + background-color: #00ab6b; } + .elementor-social-icon-meetup { + background-color: #ec1c40; } + .elementor-social-icon-mixcloud { + background-color: #273a4b; } + .elementor-social-icon-odnoklassniki { + background-color: #F4731C; } + .elementor-social-icon-pinterest { + background-color: #bd081c; } + .elementor-social-icon-product-hunt { + background-color: #da552f; } + .elementor-social-icon-reddit { + background-color: #ff4500; } + .elementor-social-icon-rss { + background-color: #f26522; } + .elementor-social-icon-shopping-cart { + background-color: #4CAF50; } + .elementor-social-icon-skype { + background-color: #00AFF0; } + .elementor-social-icon-slideshare { + background-color: #0077b5; } + .elementor-social-icon-snapchat { + background-color: #fffc00; } + .elementor-social-icon-soundcloud { + background-color: #ff8800; } + .elementor-social-icon-spotify { + background-color: #2ebd59; } + .elementor-social-icon-stack-overflow { + background-color: #fe7a15; } + .elementor-social-icon-steam { + background-color: #00adee; } + .elementor-social-icon-stumbleupon { + background-color: #EB4924; } + .elementor-social-icon-telegram { + background-color: #2CA5E0; } + .elementor-social-icon-thumb-tack { + background-color: #1aa1d8; } + .elementor-social-icon-tripadvisor { + background-color: #589442; } + .elementor-social-icon-tumblr { + background-color: #35465c; } + .elementor-social-icon-twitch { + background-color: #6441A5; } + .elementor-social-icon-twitter { + background-color: #1DA1F2; } + .elementor-social-icon-vimeo { + background-color: #1ab7ea; } + .elementor-social-icon-vk { + background-color: #45668e; } + .elementor-social-icon-weibo { + background-color: #df2029; } + .elementor-social-icon-weixin { + background-color: #7bb32e; } + .elementor-social-icon-whatsapp { + background-color: #25d366; } + .elementor-social-icon-wordpress { + background-color: #21759b; } + .elementor-social-icon-xing { + background-color: #026466; } + .elementor-social-icon-yelp { + background-color: #af0606; } + .elementor-social-icon-youtube { + background-color: #cd201f; } + .elementor-social-icon-500px { + background-color: #0099e5; } + +.elementor-shape-rounded .elementor-icon.elementor-social-icon { + border-radius: 10%; } + +.elementor-shape-circle .elementor-icon.elementor-social-icon { + border-radius: 50%; } + +.elementor-star-rating { + color: #CCD6DF; + font-family: FontAwesome; + display: inline-block; } + .elementor-star-rating i { + display: inline-block; + position: relative; + font-style: normal; + line-height: 1; + cursor: default; } + .elementor-star-rating i:before { + content: '\f005'; + display: block; + font-size: inherit; + font-family: inherit; + position: absolute; + overflow: hidden; + color: #f0ad4e; + top: 0; + left: 0; } + .elementor-star-rating .elementor-star-empty:before, + .elementor-star-rating .elementor-star-0:before { + content: none; } + .elementor-star-rating .elementor-star-1:before { + width: 10%; } + .elementor-star-rating .elementor-star-2:before { + width: 20%; } + .elementor-star-rating .elementor-star-3:before { + width: 30%; } + .elementor-star-rating .elementor-star-4:before { + width: 40%; } + .elementor-star-rating .elementor-star-5:before { + width: 50%; } + .elementor-star-rating .elementor-star-6:before { + width: 60%; } + .elementor-star-rating .elementor-star-7:before { + width: 70%; } + .elementor-star-rating .elementor-star-8:before { + width: 80%; } + .elementor-star-rating .elementor-star-9:before { + width: 90%; } + .elementor-star-rating__wrapper { + display: flex; + align-items: center; } + .elementor-star-rating__title { + margin-right: 10px; } + .elementor-star-rating--align-right .elementor-star-rating__wrapper { + text-align: right; + justify-content: flex-end; } + .elementor-star-rating--align-left .elementor-star-rating__wrapper { + text-align: left; + justify-content: flex-start; } + .elementor-star-rating--align-center .elementor-star-rating__wrapper { + text-align: center; + justify-content: center; } + .elementor-star-rating--align-justify .elementor-star-rating__title { + margin-right: auto; } + +.last-star { + letter-spacing: 0; } + +.elementor--star-style-star_unicode .elementor-star-rating { + font-family: 'Arial', 'Helvetica', sans-serif; } + .elementor--star-style-star_unicode .elementor-star-rating i:not(.elementor-star-empty, .elementor-star-0):before { + content: '\002605'; } + +.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper { + width: 25%; + flex-shrink: 0; } + +.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active { + border-right-style: none; } + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after { + height: 999em; + width: 0; + right: 0; + border-right-style: solid; } + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before { + top: 0; + transform: translateY(-100%); } + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after { + top: 100%; } + +.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title { + display: table-cell; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active { + border-bottom-style: none; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after { + bottom: 0; + height: 0; + width: 999em; + border-bottom-style: solid; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before { + right: 100%; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after { + left: 100%; } + +.elementor-widget-tabs .elementor-tab-title, +.elementor-widget-tabs .elementor-tab-title:before, +.elementor-widget-tabs .elementor-tab-title:after, +.elementor-widget-tabs .elementor-tab-content, +.elementor-widget-tabs .elementor-tabs-content-wrapper { + border: 1px none #D4D4D4; } + +.elementor-widget-tabs .elementor-tabs { + text-align: left; } + +.elementor-widget-tabs .elementor-tabs-wrapper { + overflow: hidden; } + +.elementor-widget-tabs .elementor-tab-title { + cursor: pointer; + outline: none; } + +.elementor-widget-tabs .elementor-tab-desktop-title { + position: relative; + padding: 20px 25px; + font-weight: bold; + line-height: 1; + border: solid transparent; } + .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active { + border-color: #D4D4D4; } + .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after { + display: block; + content: ''; + position: absolute; } + +.elementor-widget-tabs .elementor-tab-mobile-title { + padding: 10px 10px; + cursor: pointer; } + +.elementor-widget-tabs .elementor-tab-content { + padding: 20px; + display: none; } + +@media (max-width: 767px) { + .elementor-tabs .elementor-tab-title, + .elementor-tabs .elementor-tab-content { + border-style: solid; + border-bottom-style: none; } + .elementor-tabs .elementor-tabs-wrapper { + display: none; } + .elementor-tabs .elementor-tabs-content-wrapper { + border-bottom-style: solid; } + .elementor-tabs .elementor-tab-content { + padding: 10px; } } + +@media (min-width: 768px) { + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs { + display: flex; } + .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper { + flex-grow: 1; + border-style: solid; + border-left-style: none; } + .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content { + border-style: solid; + border-top-style: none; } + .elementor-tabs .elementor-tab-mobile-title { + display: none; } } + +.elementor-testimonial-wrapper { + overflow: hidden; + text-align: center; } + .elementor-testimonial-wrapper .elementor-testimonial-content { + font-size: 1.3em; + margin-bottom: 20px; } + .elementor-testimonial-wrapper .elementor-testimonial-name { + line-height: 1.5; + color: inherit; } + .elementor-testimonial-wrapper .elementor-testimonial-job { + font-size: 0.85em; + color: inherit; } + .elementor-testimonial-wrapper.elementor-testimonial-text-align-left { + text-align: left; } + .elementor-testimonial-wrapper.elementor-testimonial-text-align-right { + text-align: right; } + .elementor-testimonial-wrapper .elementor-testimonial-meta { + width: 100%; + line-height: 1; } + .elementor-testimonial-wrapper .elementor-testimonial-meta-inner { + display: inline-block; } + .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details, + .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image { + display: table-cell; + vertical-align: middle; } + .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img { + width: 60px; + height: 60px; + border-radius: 50%; + object-fit: cover; + max-width: none; } + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image { + padding-right: 15px; } + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details { + text-align: left; } + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details, + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image { + display: block; } + .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image { + margin-bottom: 20px; } + +.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap { + background-color: #818a91; + color: #fff; } + +.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap { + color: #818a91; + border: 3px solid; + background-color: transparent; } + +.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap { + margin-top: 8px; } + .elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter { + width: 1em; + height: 1em; } + +.elementor-widget-text-editor .elementor-drop-cap { + float: left; + text-align: center; + line-height: 1; + font-size: 50px; } + .elementor-widget-text-editor .elementor-drop-cap-letter { + display: inline-block; } + +.elementor-toggle { + text-align: left; } + .elementor-toggle .elementor-tab-title { + font-weight: bold; + line-height: 1; + margin: 0; + padding: 15px; + border-bottom: 1px solid #D4D4D4; + cursor: pointer; + outline: none; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon { + display: inline-block; + width: 1em; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right { + float: right; + text-align: right; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left { + float: left; + text-align: left; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed { + display: block; } + .elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened { + display: none; } + .elementor-toggle .elementor-tab-title.elementor-active { + border-bottom: none; } + .elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed { + display: none; } + .elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened { + display: block; } + .elementor-toggle .elementor-tab-content { + padding: 15px; + border-bottom: 1px solid #D4D4D4; + display: none; } + +@media (max-width: 767px) { + .elementor-toggle .elementor-tab-title { + padding: 12px; } + .elementor-toggle .elementor-tab-content { + padding: 12px 10px; } } + +.elementor-widget-video .elementor-widget-container { + overflow: hidden; + transform: translate3d(0, 0, 0); } + +.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-size: cover; + background-position: 50%; } + +.elementor-widget-video .elementor-custom-embed-image-overlay { + cursor: pointer; + text-align: center; } + .elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i { + opacity: 1; } + .elementor-widget-video .elementor-custom-embed-image-overlay img { + display: block; + width: 100%; } + .elementor-widget-video .elementor-custom-embed-image-overlay:not([data-elementor-lightbox]) img { + height: 100%; + object-fit: cover; } + +.elementor-widget-video .elementor-video { + object-fit: cover; } + +.slick-slider { + position: relative; + display: block; + box-sizing: border-box; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -ms-touch-action: pan-y; + touch-action: pan-y; + -webkit-tap-highlight-color: transparent; } + +.slick-list { + position: relative; + overflow: hidden; + display: block; + margin: 0; + padding: 0; } + .slick-list:focus { + outline: none; } + .slick-list.dragging { + cursor: pointer; } + +.slick-slider .slick-track, +.slick-slider .slick-list { + transform: translate3d(0, 0, 0); } + +.slick-track { + position: relative; + left: 0; + top: 0; + display: block; } + .slick-track:before, .slick-track:after { + content: ""; + display: table; } + .slick-track:after { + clear: both; } + .slick-loading .slick-track { + visibility: hidden; } + +.slick-slide { + float: left; + height: 100%; + min-height: 1px; + display: none; } + .elementor-slick-slider[dir="rtl"] .slick-slide { + float: right; } + .slick-slide img { + display: block; } + .slick-slide.slick-loading img { + display: none; } + .slick-slide.dragging img { + pointer-events: none; } + .slick-initialized .slick-slide { + display: block; } + .slick-loading .slick-slide { + visibility: hidden; } + .slick-vertical .slick-slide { + display: block; + height: auto; + border: 1px solid transparent; } + +.slick-arrow.slick-hidden { + display: none; } + +.elementor-slick-slider .slick-loading .slick-list { + background: #fff; } + .elementor-slick-slider .slick-loading .slick-list:after { + content: '\f1ce'; + font-family: FontAwesome; + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + animation: fa-spin 2s infinite linear; + font-size: 25px; + color: #a4afb7; } + +.elementor-slick-slider .slick-prev, +.elementor-slick-slider .slick-next { + font-size: 0; + line-height: 0; + position: absolute; + top: 50%; + display: block; + width: 20px; + padding: 0; + transform: translate(0, -50%); + cursor: pointer; + color: transparent; + border: none; + outline: none; + background: transparent; } + .elementor-slick-slider .slick-prev:hover, .elementor-slick-slider .slick-prev:focus, + .elementor-slick-slider .slick-next:hover, + .elementor-slick-slider .slick-next:focus { + color: transparent; + outline: none; + background: transparent; } + .elementor-slick-slider .slick-prev:hover:before, .elementor-slick-slider .slick-prev:focus:before, + .elementor-slick-slider .slick-next:hover:before, + .elementor-slick-slider .slick-next:focus:before { + opacity: 1; } + .elementor-slick-slider .slick-prev.slick-disabled:before, + .elementor-slick-slider .slick-next.slick-disabled:before { + opacity: .25; } + .elementor-slick-slider .slick-prev:before, + .elementor-slick-slider .slick-next:before { + font-family: 'FontAwesome'; + font-size: 35px; + line-height: 1; + opacity: .75; + color: white; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +.elementor-slick-slider .slick-prev { + left: -25px; } + [dir="rtl"] .elementor-slick-slider .slick-prev { + left: auto; + right: -25px; } + .elementor-slick-slider .slick-prev:before { + content: '\f104'; } + [dir="rtl"] .elementor-slick-slider .slick-prev:before { + content: '\f105'; } + +.elementor-slick-slider .slick-next { + right: -25px; } + [dir="rtl"] .elementor-slick-slider .slick-next { + left: -25px; + right: auto; } + .elementor-slick-slider .slick-next:before { + content: '\f105'; } + [dir="rtl"] .elementor-slick-slider .slick-next:before { + content: '\f104'; } + +.elementor-slick-slider .slick-dotted.slick-slider { + margin-bottom: 30px; } + +.elementor-slick-slider ul.slick-dots { + position: absolute; + bottom: -25px; + display: block; + width: 100%; + padding: 0; + margin: 0; + list-style: none; + text-align: center; + line-height: 1; } + .elementor-slick-slider ul.slick-dots li { + position: relative; + display: inline-block; + width: 20px; + height: 20px; + margin: 0; + padding: 0; + cursor: pointer; } + .elementor-slick-slider ul.slick-dots li button { + font-size: 0; + line-height: 0; + display: block; + width: 20px; + height: 20px; + padding: 5px; + cursor: pointer; + color: transparent; + border: 0; + outline: none; + background: transparent; } + .elementor-slick-slider ul.slick-dots li button:hover, .elementor-slick-slider ul.slick-dots li button:focus { + outline: none; } + .elementor-slick-slider ul.slick-dots li button:hover:before, .elementor-slick-slider ul.slick-dots li button:focus:before { + opacity: 1; } + .elementor-slick-slider ul.slick-dots li button:before { + font-family: 'FontAwesome'; + font-size: 6px; + line-height: 20px; + position: absolute; + top: 0; + left: 0; + width: 20px; + height: 20px; + content: '\f111'; + text-align: center; + opacity: .25; + color: black; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .elementor-slick-slider ul.slick-dots li.slick-active button:before { + opacity: .75; + color: black; } + +.elementor-slick-slider .slick-arrows-inside .slick-prev { + left: 20px; } + [dir="rtl"] .elementor-slick-slider .slick-arrows-inside .slick-prev { + left: auto; + right: 20px; } + +.elementor-slick-slider .slick-arrows-inside .slick-next { + right: 20px; } + [dir="rtl"] .elementor-slick-slider .slick-arrows-inside .slick-next { + left: 20px; + right: auto; } + +.elementor-slick-slider .slick-dots-inside .slick-dots { + bottom: 5px; } + +.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider { + margin-bottom: 0; } + +.elementor-slick-slider .slick-slider .slick-prev, +.elementor-slick-slider .slick-slider .slick-next { + z-index: 1; } + +.elementor-slick-slider .slick-slide img { + margin: auto; } + +/** + * Swiper 3.4.2 + * Customized by Elementor team + */ +.swiper-container { + margin-left: auto; + margin-right: auto; + position: relative; + overflow: hidden; + /* Fix of Webkit flickering */ + z-index: 1; } + +.swiper-container-no-flexbox .swiper-slide { + float: left; } + +.swiper-container-vertical > .swiper-wrapper { + flex-direction: column; } + +.swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: flex; + transition-property: transform; + box-sizing: content-box; } + +.swiper-container-android .swiper-slide, .swiper-wrapper { + transform: translate3d(0px, 0, 0); } + +.swiper-container-multirow > .swiper-wrapper { + flex-wrap: wrap; } + +.swiper-container-free-mode > .swiper-wrapper { + transition-timing-function: ease-out; + margin: 0 auto; } + +.swiper-slide { + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; } + +/* Auto Height */ +.swiper-container-autoheight { + height: auto; } + .swiper-container-autoheight .swiper-slide { + height: auto; } + .swiper-container-autoheight .swiper-wrapper { + align-items: flex-start; + transition-property: transform, height; } + +/* a11y */ +.swiper-container .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; } + +/* IE10 Windows Phone 8 Fixes */ +.swiper-wp8-horizontal { + -ms-touch-action: pan-y; + touch-action: pan-y; } + +.swiper-wp8-vertical { + -ms-touch-action: pan-x; + touch-action: pan-x; } + +/* Arrows */ +.swiper-button-prev, .swiper-button-next { + position: absolute; + top: 50%; + width: 27px; + height: 44px; + margin-top: -22px; + z-index: 10; + cursor: pointer; + background-size: 27px 44px; + background: no-repeat center; } + +.swiper-button-prev.swiper-button-disabled, .swiper-button-next.swiper-button-disabled { + opacity: 0.35; + cursor: auto; + pointer-events: none; } + +.swiper-button-prev, .swiper-container-rtl .swiper-button-next { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); + left: 10px; + right: auto; } + +.swiper-button-prev.swiper-button-black, .swiper-container-rtl .swiper-button-next.swiper-button-black { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-button-prev.swiper-button-white, .swiper-container-rtl .swiper-button-next.swiper-button-white { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-button-next, .swiper-container-rtl .swiper-button-prev { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E"); + right: 10px; + left: auto; } + +.swiper-button-next.swiper-button-black, .swiper-container-rtl .swiper-button-prev.swiper-button-black { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); } + +.swiper-button-next.swiper-button-white, .swiper-container-rtl .swiper-button-prev.swiper-button-white { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); } + +/* Pagination Styles */ +.swiper-pagination { + position: absolute; + text-align: center; + transition: 300ms; + transform: translate3d(0, 0, 0); + z-index: 10; } + .swiper-pagination.swiper-pagination-hidden { + opacity: 0; } + +/* Common Styles */ +.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets { + bottom: 10px; + left: 0; + width: 100%; } + +/* Bullets */ +.swiper-pagination-bullet { + width: 6px; + height: 6px; + display: inline-block; + border-radius: 50%; + background: #000; + opacity: 0.2; } + +.swiper-pagination-fraction { + color: #000; } + +button.swiper-pagination-bullet { + border: none; + margin: 0; + padding: 0; + box-shadow: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; } + +.swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; } + +.swiper-pagination-white .swiper-pagination-bullet { + background: #fff; } + +.swiper-pagination-bullet-active { + opacity: 1; } + +.swiper-pagination-white .swiper-pagination-bullet-active { + background: #fff; } + +.swiper-pagination-black .swiper-pagination-bullet-active { + background: #000; } + +.swiper-container-vertical > .swiper-pagination-bullets { + right: 10px; + top: 50%; + transform: translate3d(0px, -50%, 0); } + .swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 5px 0; + display: block; } + +.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: 0 6px; } + +/* Progressbar */ +.swiper-pagination-progressbar { + background: rgba(0, 0, 0, 0.25); + position: absolute; } + .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + background: #000; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + transform: scale(0); + transform-origin: 0 0; } + +.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + transform-origin: 100% 0; } + +.swiper-container-horizontal > .swiper-pagination-progressbar { + width: 100%; + height: 4px; + left: 0; + top: 0; } + +.swiper-container-vertical > .swiper-pagination-progressbar { + width: 4px; + height: 100%; + left: 0; + top: 0; } + +.swiper-pagination-progressbar.swiper-pagination-white { + background: rgba(255, 255, 255, 0.5); } + .swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill { + background: #fff; } + +.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill { + background: #000; } + +/* 3D Container */ +.swiper-container-3d { + perspective: 1200px; } + .swiper-container-3d .swiper-wrapper, .swiper-container-3d .swiper-slide, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-cube-shadow { + transform-style: preserve-3d; } + .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 10; } + .swiper-container-3d .swiper-slide-shadow-left { + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } + .swiper-container-3d .swiper-slide-shadow-right { + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } + .swiper-container-3d .swiper-slide-shadow-top { + background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } + .swiper-container-3d .swiper-slide-shadow-bottom { + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } + +/* Coverflow */ +.swiper-container-coverflow .swiper-wrapper, .swiper-container-flip .swiper-wrapper { + /* Windows 8 IE 10 fix */ + -ms-perspective: 1200px; } + +/* Cube + Flip */ +.swiper-container-cube, .swiper-container-flip { + overflow: visible; } + +.swiper-container-cube .swiper-slide, .swiper-container-flip .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; } + +.swiper-container-cube .swiper-slide .swiper-slide, .swiper-container-flip .swiper-slide .swiper-slide { + pointer-events: none; } + +.swiper-container-cube .swiper-slide-active, .swiper-container-flip .swiper-slide-active, .swiper-container-cube .swiper-slide-active .swiper-slide-active, .swiper-container-flip .swiper-slide-active .swiper-slide-active { + pointer-events: auto; } + +.swiper-container-cube .swiper-slide-shadow-top, .swiper-container-flip .swiper-slide-shadow-top, .swiper-container-cube .swiper-slide-shadow-bottom, .swiper-container-flip .swiper-slide-shadow-bottom, .swiper-container-cube .swiper-slide-shadow-left, .swiper-container-flip .swiper-slide-shadow-left, .swiper-container-cube .swiper-slide-shadow-right, .swiper-container-flip .swiper-slide-shadow-right { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +/* Cube */ +.swiper-container-cube .swiper-slide { + visibility: hidden; + transform-origin: 0 0; + width: 100%; + height: 100%; } + +.swiper-container-cube.swiper-container-rtl .swiper-slide { + transform-origin: 100% 0; } + +.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-next, .swiper-container-cube .swiper-slide-prev, .swiper-container-cube .swiper-slide-next + .swiper-slide { + pointer-events: auto; + visibility: visible; } + +.swiper-container-cube .swiper-cube-shadow { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 100%; + background: #000; + opacity: 0.6; + -webkit-filter: blur(50px); + filter: blur(50px); + z-index: 0; } + +/* Fade */ +.swiper-container-fade.swiper-container-free-mode .swiper-slide { + transition-timing-function: ease-out; } + +.swiper-container-fade .swiper-slide { + pointer-events: none; + transition-property: opacity; } + .swiper-container-fade .swiper-slide .swiper-slide { + pointer-events: none; } + +.swiper-container-fade .swiper-slide-active { + pointer-events: auto; } + .swiper-container-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; } + +.swiper-slide .swiper-zoom-container { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + text-align: center; } + .swiper-zoom-container > img, .swiper-zoom-container > svg, .swiper-zoom-container > canvas { + max-width: 100%; + max-height: 100%; + object-fit: contain; } + +/* Scrollbar */ +.swiper-scrollbar { + border-radius: 10px; + position: relative; + -ms-touch-action: none; + background: rgba(0, 0, 0, 0.1); } + +.swiper-container-horizontal > .swiper-scrollbar { + position: absolute; + left: 1%; + bottom: 3px; + z-index: 50; + height: 5px; + width: 98%; } + +.swiper-container-vertical > .swiper-scrollbar { + position: absolute; + right: 3px; + top: 1%; + z-index: 50; + width: 5px; + height: 98%; } + +.swiper-scrollbar-drag { + height: 100%; + width: 100%; + position: relative; + background: rgba(0, 0, 0, 0.5); + border-radius: 10px; + left: 0; + top: 0; } + +.swiper-scrollbar-cursor-drag { + cursor: move; } + +/* Preloader */ +.swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + transform-origin: 50%; + animation: swiper-preloader-spin 1s steps(12, end) infinite; } + .swiper-lazy-preloader:after { + display: block; + content: ""; + width: 100%; + height: 100%; + background-size: 100%; + background: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") no-repeat 50%; } + +.swiper-lazy-preloader-white:after { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); } + +@keyframes swiper-preloader-spin { + 100% { + transform: rotate(360deg); } } + +.elementor-lightbox { + --lightbox-ui-color: rgba(238, 238, 238, 0.9); + --lightbox-ui-color-hover: #fff; + --lightbox-text-color: var(--lightbox-ui-color); + --lightbox-header-icons-size: 20px; + --lightbox-navigation-icons-size: 25px; } + .elementor-lightbox .dialog-header { + display: none; } + .elementor-lightbox .dialog-widget-content { + background: none; + box-shadow: none; + width: 100%; + height: 100%; } + .elementor-lightbox .dialog-message { + animation-duration: .3s; } + .elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio) { + height: 100%; } + .elementor-lightbox .dialog-message.dialog-lightbox-message { + padding: 0; } + .elementor-lightbox .dialog-lightbox-close-button { + cursor: pointer; + position: absolute; + font-size: var(--lightbox-header-icons-size); + right: 0.75em; + top: 13px; + padding: .25em; + z-index: 2; + line-height: 1; } + .elementor-lightbox .dialog-lightbox-close-button, + .elementor-lightbox .elementor-swiper-button { + color: var(--lightbox-ui-color); + transition: all 0.3s; + opacity: 1; } + .elementor-lightbox .dialog-lightbox-close-button:hover, + .elementor-lightbox .elementor-swiper-button:hover { + color: var(--lightbox-ui-color-hover); } + .elementor-lightbox .swiper-container { + height: 100%; } + .elementor-lightbox .elementor-lightbox-item { + display: flex; + align-items: center; + justify-content: center; + position: relative; + padding: 70px; + box-sizing: border-box; + height: 100%; + margin: auto; } + @media (max-width: 767px) { + .elementor-lightbox .elementor-lightbox-item { + padding: 70px 0; } } + .elementor-lightbox .elementor-lightbox-image { + max-height: 100%; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .elementor-lightbox .elementor-lightbox-image, .elementor-lightbox .elementor-lightbox-image:hover { + opacity: 1; + -webkit-filter: none; + filter: none; + border: none; } + .elementor-lightbox .elementor-lightbox-image, .elementor-lightbox .elementor-video-container { + box-shadow: 0 0 30px rgba(0, 0, 0, 0.3), 0 0 8px -5px rgba(0, 0, 0, 0.3); + border-radius: 2px; } + .elementor-lightbox .elementor-video-container { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); } + @media (min-width: 1025px) { + .elementor-lightbox .elementor-video-container { + width: 75%; } } + @media (max-width: 1024px) { + .elementor-lightbox .elementor-video-container { + width: 100%; } } + @media (min-width: 768px) and (max-width: 1024px) { + .elementor-lightbox .elementor-aspect-ratio-916 .elementor-video-container { + width: 70%; } } + .elementor-lightbox .elementor-swiper-button:focus { + outline: none; } + .elementor-lightbox .elementor-swiper-button-prev, .elementor-lightbox .elementor-swiper-button-next { + height: 100%; + display: flex; + align-items: center; + width: 15%; + justify-content: center; + font-size: var(--lightbox-navigation-icons-size); } + .elementor-lightbox .elementor-swiper-button-prev { + left: 0; } + .elementor-lightbox .elementor-swiper-button-next { + right: 0; } + @media (max-width: 767px) { + .elementor-lightbox .elementor-swiper-button-prev, .elementor-lightbox .elementor-swiper-button-next { + width: 20%; } + .elementor-lightbox .elementor-swiper-button-prev i, .elementor-lightbox .elementor-swiper-button-next i { + padding: 10px; + background-color: rgba(0, 0, 0, 0.5); } + .elementor-lightbox .elementor-swiper-button-prev { + left: 0; + justify-content: flex-start; } + .elementor-lightbox .elementor-swiper-button-next { + right: 0; + justify-content: flex-end; } } + +.elementor-slideshow__counter { + color: currentColor; + font-size: .75em; + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; } + +.elementor-slideshow__header, .elementor-slideshow__footer { + position: absolute; + left: 0; + width: 100%; + padding: 15px 20px; + transition: 0.3s; } + +.elementor-slideshow__footer { + color: var(--lightbox-text-color); } + +.elementor-slideshow__header { + color: var(--lightbox-ui-color); + display: flex; + font-size: var(--lightbox-header-icons-size); + padding-left: 1em; + padding-right: 2.6em; + top: 0; + align-items: center; + z-index: 10; } + .elementor-slideshow__header > i { + font-size: calc(var(--lightbox-header-icons-size) * 0.9); /* inherit */ + cursor: pointer; + padding: .25em; + margin: 0 .35em; } + .elementor-slideshow__header > i:hover { + color: var(--lightbox-ui-color-hover); } + .elementor-slideshow__header > i:first-of-type { + margin-left: auto; } + .elementor-slideshow__header .elementor-icon-share { + z-index: 5; } + +.elementor-slideshow__footer { + bottom: 0; + z-index: 5; + position: fixed; } +.elementor-slideshow__title, .elementor-slideshow__description { + margin: 0; } +.elementor-slideshow__title { + font-size: 16px; + font-weight: bold; } +.elementor-slideshow__description { + font-size: 14px; } +.elementor-slideshow--ui-hidden .elementor-slideshow__header, .elementor-slideshow--ui-hidden .elementor-slideshow__footer { + opacity: 0; + pointer-events: none; } +.elementor-slideshow--ui-hidden .elementor-swiper-button-prev, .elementor-slideshow--ui-hidden .elementor-swiper-button-next { + opacity: 0; } + +.elementor-slideshow--fullscreen-mode .elementor-video-container { + width: 100%; } + +.elementor-slideshow--zoom-mode .elementor-slideshow__header, .elementor-slideshow--zoom-mode .elementor-slideshow__footer { + background-color: rgba(0, 0, 0, 0.5); } +.elementor-slideshow--zoom-mode .elementor-swiper-button-prev, .elementor-slideshow--zoom-mode .elementor-swiper-button-next { + opacity: 0; + pointer-events: none; } + +.animated { + animation-duration: 1.25s; } + .animated.animated-slow { + animation-duration: 2s; } + .animated.animated-fast { + animation-duration: .75s; } + +.animated.infinite { + animation-iteration-count: infinite; } + +.elementor-shape { + overflow: hidden; + position: absolute; + left: 0; + width: 100%; + line-height: 0; + direction: ltr; } + .elementor-shape-top { + top: -1px; } + .elementor-shape-bottom { + bottom: -1px; } + .elementor-shape[data-negative="false"].elementor-shape-bottom { + transform: rotate(180deg); } + .elementor-shape[data-negative="true"].elementor-shape-top { + transform: rotate(180deg); } + .elementor-shape svg { + display: block; + width: calc(100% + 1.3px); + position: relative; + left: 50%; + transform: translateX(-50%); } + .elementor-shape .elementor-shape-fill { + fill: #fff; + transform-origin: 50%; + transform: rotateY(0); } + +.elementor .elementor-element ul.elementor-icon-list-items, +#elementor .elementor-element ul.elementor-icon-list-items { + padding: 0; } + +@media (max-width: 767px) { + .elementor:not(.elementor-edit-area-active) .elementor-hidden-phone { + display: none; } } + +@media (min-width: 768px) and (max-width: 1024px) { + .elementor:not(.elementor-edit-area-active) .elementor-hidden-tablet { + display: none; } } + +@media (min-width: 1025px) { + .elementor:not(.elementor-edit-area-active) .elementor-hidden-desktop { + display: none; } } + +.elementor-widget-call-to-action .elementor-widget-container { + overflow: hidden; } +.elementor-cta { + position: relative; + display: flex; + overflow: hidden; + transition: 0.5s; } + .elementor-cta-content { + z-index: 2; + overflow: hidden; + display: flex; + flex-wrap: wrap; + align-items: center; + align-content: center; + padding: 35px; + width: 100%; } + .elementor-cta-content, .elementor-cta .elementor-content-item { + position: relative; + transition: 0.5s; + color: #fff; } + .elementor-cta .elementor-content-item { + width: 100%; + margin: 0; } + .elementor-cta .elementor-content-item:not(:last-child) { + margin-bottom: 15px; } + .elementor-cta .elementor-content-item .elementor-icon { + color: #fff; } + .elementor-cta--skin-classic .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--skin-classic .elementor-cta-bg-wrapper { + position: relative; + min-height: 200px; + width: 100%; } + .elementor-cta--skin-classic .elementor-cta-content { + transition: all 0.4s; + width: 100%; + background-color: #f7f7f7; } + .elementor-cta--skin-classic .elementor-content-item, .elementor-cta--skin-classic .elementor-content-item .elementor-icon { + color: #55595c; + border-color: #55595c; } + .elementor-cta--skin-classic .elementor-cta button.elementor-button:not(#e), + .elementor-cta--skin-classic .elementor-cta a.elementor-button:not(#e) { + color: #55595c; } + .elementor-cta--skin-classic .elementor-cta .elementor-button { + border-color: #55595c; } + .elementor-cta--skin-cover .elementor-cta { + display: block; } + .elementor-cta--skin-cover .elementor-cta-bg-wrapper { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + transition: all 0.4s; + width: 100%; } + .elementor-cta--skin-cover .elementor-cta-content { + min-height: 280px; } + .elementor-cta--skin-cover .elementor-content-item, .elementor-cta--skin-cover .elementor-content-item .elementor-icon { + color: #fff; + border-color: #fff; } + .elementor-cta--skin-cover .elementor-cta .elementor-button { + border-color: #fff; } + .elementor-cta--layout-image-above .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--layout-image-above .elementor-cta-bg-wrapper { + width: 100%; } + .elementor-cta--layout-image-left .elementor-cta, .elementor-cta--layout-image-right .elementor-cta { + flex-wrap: nowrap; } + .elementor-cta--layout-image-left .elementor-cta-bg-wrapper, .elementor-cta--layout-image-right .elementor-cta-bg-wrapper { + width: auto; + min-width: 50%; } + .elementor-cta--layout-image-left .elementor-cta-content, .elementor-cta--layout-image-right .elementor-cta-content { + flex-grow: 1; } + .elementor-cta--layout-image-left .elementor-cta { + flex-direction: row; } + .elementor-cta--layout-image-right .elementor-cta { + flex-direction: row-reverse; } + .elementor-cta-bg, .elementor-cta-bg-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + transition: all 0.4s; } + .elementor-cta-bg-wrapper { + z-index: 1; + overflow: hidden; } + .elementor-cta-bg-wrapper img.elementor-cta-bg { + width: 100%; + height: 100%; + object-fit: cover; + z-index: 1; } + .elementor-cta-bg-overlay { + z-index: 2; } + .elementor-cta .elementor-button { + cursor: pointer; + align-self: center; + margin-left: auto; + margin-right: auto; + border: solid 2px white; + background: transparent; } + .elementor-cta .elementor-button:hover { + background: transparent; + text-decoration: none; } + .elementor-cta-title { + font-size: 23px; } + .elementor-cta--valign-top .elementor-cta-content { + align-content: flex-start; + align-items: flex-start; } + .elementor-cta--valign-middle .elementor-cta-content { + align-content: center; + align-items: center; } + .elementor-cta--valign-bottom .elementor-cta-content { + align-content: flex-end; + align-items: flex-end; } + .elementor-cta:hover .elementor-cta-bg-overlay { + background-color: rgba(0, 0, 0, 0.3); } + +@media (max-device-width: 1024px) { + .elementor-cta { + cursor: pointer; } } + +@media (min-width: 1025px) { + .elementor-cta--desktop-layout-image-above .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--desktop-layout-image-above .elementor-cta-bg-wrapper { + width: 100%; } + .elementor-cta--desktop-layout-image-left .elementor-cta, .elementor-cta--desktop-layout-image-right .elementor-cta { + flex-wrap: nowrap; } + .elementor-cta--desktop-layout-image-left .elementor-cta-bg-wrapper, .elementor-cta--desktop-layout-image-right .elementor-cta-bg-wrapper { + width: auto; + min-width: 50%; } + .elementor-cta--desktop-layout-image-left .elementor-cta-content, .elementor-cta--desktop-layout-image-right .elementor-cta-content { + flex-grow: 1; } + .elementor-cta--desktop-layout-image-left .elementor-cta { + flex-direction: row; } + .elementor-cta--desktop-layout-image-right .elementor-cta { + flex-direction: row-reverse; } } + +@media (max-width: 1024px) { + .elementor-cta--tablet-layout-image-above .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--tablet-layout-image-above .elementor-cta-bg-wrapper { + width: 100%; } + .elementor-cta--tablet-layout-image-left .elementor-cta, .elementor-cta--tablet-layout-image-right .elementor-cta { + flex-wrap: nowrap; } + .elementor-cta--tablet-layout-image-left .elementor-cta-bg-wrapper, .elementor-cta--tablet-layout-image-right .elementor-cta-bg-wrapper { + width: auto; + min-width: 50%; } + .elementor-cta--tablet-layout-image-left .elementor-cta-content, .elementor-cta--tablet-layout-image-right .elementor-cta-content { + flex-grow: 1; } + .elementor-cta--tablet-layout-image-left .elementor-cta { + flex-direction: row; } + .elementor-cta--tablet-layout-image-right .elementor-cta { + flex-direction: row-reverse; } } + +@media (max-width: 767px) { + .elementor-cta--mobile-layout-image-above .elementor-cta { + flex-wrap: wrap; } + .elementor-cta--mobile-layout-image-above .elementor-cta-bg-wrapper { + width: 100%; } + .elementor-cta--mobile-layout-image-left .elementor-cta, .elementor-cta--mobile-layout-image-right .elementor-cta { + flex-wrap: nowrap; } + .elementor-cta--mobile-layout-image-left .elementor-cta-bg-wrapper, .elementor-cta--mobile-layout-image-right .elementor-cta-bg-wrapper { + width: auto; + min-width: 50%; } + .elementor-cta--mobile-layout-image-left .elementor-cta-content, .elementor-cta--mobile-layout-image-right .elementor-cta-content { + flex-grow: 1; } + .elementor-cta--mobile-layout-image-left .elementor-cta { + flex-direction: row; } + .elementor-cta--mobile-layout-image-right .elementor-cta { + flex-direction: row-reverse; } } + +.elementor-ribbon { + position: absolute; + z-index: 1; + top: 0; + left: auto; + right: 0; + transform: rotate(90deg); + width: 150px; + overflow: hidden; + height: 150px; } + .elementor-ribbon-inner { + text-align: center; + left: 0; + width: 200%; + transform: translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg); + margin-top: 35px; + font-size: 13px; + line-height: 2; + font-weight: 800; + text-transform: uppercase; + background: #000; + color: #fff; } + .elementor-ribbon.elementor-ribbon-left { + transform: rotate(0); + left: 0; + right: auto; } + .elementor-ribbon.elementor-ribbon-right { + transform: rotate(90deg); + left: auto; + right: 0; } + +.elementor-bg-transform-zoom-in:hover .elementor-bg { + transform: scale(1.2); } +.elementor-bg-transform-zoom-out .elementor-bg { + transform: scale(1.2); } +.elementor-bg-transform-zoom-out:hover .elementor-bg { + transform: scale(1); } +.elementor-bg-transform-move-left .elementor-bg { + transform: scale(1.2) translateX(8%); } +.elementor-bg-transform-move-left:hover .elementor-bg { + transform: scale(1.2) translateX(-8%); } +.elementor-bg-transform-move-right .elementor-bg { + transform: scale(1.2) translateX(-8%); } +.elementor-bg-transform-move-right:hover .elementor-bg { + transform: scale(1.2) translateX(8%); } +.elementor-bg-transform-move-up .elementor-bg { + transform: scale(1.2) translateY(8%); } +.elementor-bg-transform-move-up:hover .elementor-bg { + transform: scale(1.2) translateY(-8%); } +.elementor-bg-transform-move-down .elementor-bg { + transform: scale(1.2) translateY(-8%); } +.elementor-bg-transform-move-down:hover .elementor-bg { + transform: scale(1.2) translateY(8%); } + +.elementor-animated-content:hover .elementor-animated-item--grow { + transform: scale(1.1); } +.elementor-animated-content:hover .elementor-animated-item--shrink { + transform: scale(0.85); } +.elementor-animated-content:hover .elementor-animated-item--enter-zoom-out, .elementor-animated-content:hover .elementor-animated-item--enter-zoom-in, .elementor-animated-content:hover .elementor-animated-item--fade-in { + transform: none; + opacity: 1; } +.elementor-animated-content:hover .elementor-animated-item--exit-zoom-out, .elementor-animated-content:hover .elementor-animated-item--exit-zoom-in, .elementor-animated-content:hover .elementor-animated-item--fade-out { + opacity: 0; } +.elementor-animated-content:hover .elementor-animated-item--exit-zoom-out { + transform: scale(0.2); } +.elementor-animated-content:hover .elementor-animated-item--exit-zoom-in { + transform: scale(2); } +.elementor-animated-content:hover .elementor-animated-item--enter-from-right, .elementor-animated-content:hover .elementor-animated-item--enter-from-left, .elementor-animated-content:hover .elementor-animated-item--enter-from-top, .elementor-animated-content:hover .elementor-animated-item--enter-from-bottom { + opacity: 1; + transform: none; } +.elementor-animated-content:hover .elementor-animated-item--exit-to-right { + transform: translateX(1000px); } +.elementor-animated-content:hover .elementor-animated-item--exit-to-left { + transform: translateX(-1000px); } +.elementor-animated-content:hover .elementor-animated-item--exit-to-top { + transform: translateY(-600px); } +.elementor-animated-content:hover .elementor-animated-item--exit-to-bottom { + transform: translateY(600px); } +.elementor-animated-content:hover .elementor-animated-item--exit-to-right, .elementor-animated-content:hover .elementor-animated-item--exit-to-left, .elementor-animated-content:hover .elementor-animated-item--exit-to-top, .elementor-animated-content:hover .elementor-animated-item--exit-to-bottom { + opacity: 0; } +.elementor-animated-content:hover .elementor-animated-item--move-right { + transform: translateX(30px); } +.elementor-animated-content:hover .elementor-animated-item--move-left { + transform: translateX(-30px); } +.elementor-animated-content:hover .elementor-animated-item--move-up { + transform: translateY(-30px); } +.elementor-animated-content:hover .elementor-animated-item--move-down { + transform: translateY(30px); } + +.elementor-animated-content *[class^="elementor-animated-item"] { + will-change: transform, opacity; } + +.elementor-animated-content .elementor-animated-item--enter-zoom-in { + transform: scale(0.2); } +.elementor-animated-content .elementor-animated-item--enter-zoom-out { + transform: scale(2); } +.elementor-animated-content .elementor-animated-item--enter-zoom-out, .elementor-animated-content .elementor-animated-item--enter-zoom-in, .elementor-animated-content .elementor-animated-item--fade-in { + opacity: 0; } +.elementor-animated-content .elementor-animated-item--exit-zoom-out, .elementor-animated-content .elementor-animated-item--exit-zoom-in, .elementor-animated-content .elementor-animated-item--fade-out { + opacity: 1; + transform: scale(1); } +.elementor-animated-content .elementor-animated-item--enter-from-right { + transform: translateX(1000px); } +.elementor-animated-content .elementor-animated-item--enter-from-left { + transform: translateX(-1000px); } +.elementor-animated-content .elementor-animated-item--enter-from-top { + transform: translateY(-600px); } +.elementor-animated-content .elementor-animated-item--enter-from-bottom { + transform: translateY(500px); } +.elementor-animated-content .elementor-animated-item--enter-from-right, .elementor-animated-content .elementor-animated-item--enter-from-left, .elementor-animated-content .elementor-animated-item--enter-from-top, .elementor-animated-content .elementor-animated-item--enter-from-bottom { + opacity: 0; } +.elementor-animated-content .elementor-animated-item--exit-to-right, .elementor-animated-content .elementor-animated-item--exit-to-left, .elementor-animated-content .elementor-animated-item--exit-to-top, .elementor-animated-content .elementor-animated-item--exit-to-bottom { + opacity: 1; + transform: none; } + +.elementor-flip-box { + position: relative; + height: 300px; + width: 100%; + perspective: 1000px; + transform-style: preserve-3d; } + .elementor-flip-box > a { + display: block; } +.elementor-flip-box-side { + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 100%; + text-align: center; + transition: all .6s ease-in-out; } +.elementor-flip-box-front { + background: #0e9dd2; } +.elementor-flip-box-back { + background: #444444; } +.elementor-flip-box-overlay { + display: flex; + align-items: center; + width: 100%; + height: 100%; + padding: 35px; } +.elementor-flip-box-content { + width: 100%; } + .elementor-flip-box-content > :not(:last-child) { + margin-bottom: 15px; } +.elementor-flip-box-image img { + width: 50%; } +.elementor-flip-box .elementor-view-stacked .elementor-icon { + background: #202020; } +.elementor-flip-box .elementor-icon, +.elementor-flip-box-title, +.elementor-flip-box-description { + color: #fff; + border-color: #fff; } +.elementor-flip-box .elementor-button { + cursor: pointer; + border: solid 2px currentColor; + background: transparent; } + +.elementor-flip-box-front--valign-top .elementor-flip-box-front .elementor-flip-box-overlay, +.elementor-flip-box-back--valign-top .elementor-flip-box-back .elementor-flip-box-overlay { + align-content: flex-start; + align-items: flex-start; } +.elementor-flip-box-front--valign-middle .elementor-flip-box-front .elementor-flip-box-overlay, +.elementor-flip-box-back--valign-middle .elementor-flip-box-back .elementor-flip-box-overlay { + align-content: center; + align-items: center; } +.elementor-flip-box-front--valign-bottom .elementor-flip-box-front .elementor-flip-box-overlay, +.elementor-flip-box-back--valign-bottom .elementor-flip-box-back .elementor-flip-box-overlay { + align-content: flex-end; + align-items: flex-end; } + +.elementor-flip-box--3d .elementor-flip-box-overlay { + transform-style: preserve-3d; + transform: translateZ(.1px); } +.elementor-flip-box--3d .elementor-flip-box-content { + transform: translateZ(90px) scale(.91); } + +.elementor-flip-box--effect-flip .elementor-flip-box-side { + transform-style: preserve-3d; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } +.elementor-flip-box--effect-flip .elementor-flip-box-front { + transform: none; + z-index: 1; } +.elementor-flip-box--effect-push .elementor-flip-box-front, +.elementor-flip-box--effect-push .elementor-flip-box:hover .elementor-flip-box-back, +.elementor-flip-box--effect-flip .elementor-flip-box:hover .elementor-flip-box-back, +.elementor-flip-box--effect-slide .elementor-flip-box:hover .elementor-flip-box-back { + transform: none; } + +.elementor-flip-box--effect-flip.elementor-flip-box--direction-right .elementor-flip-box-back { + transform: rotateY(-180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-left .elementor-flip-box-back, +.elementor-flip-box--effect-flip.elementor-flip-box--direction-right .elementor-flip-box:hover .elementor-flip-box-front { + transform: rotateY(180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-left .elementor-flip-box:hover .elementor-flip-box-front { + transform: rotateY(-180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-up .elementor-flip-box-back { + transform: rotateX(-180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-down .elementor-flip-box-back, +.elementor-flip-box--effect-flip.elementor-flip-box--direction-up .elementor-flip-box:hover .elementor-flip-box-front { + transform: rotateX(180deg); } +.elementor-flip-box--effect-flip.elementor-flip-box--direction-down .elementor-flip-box:hover .elementor-flip-box-front { + transform: rotateX(-180deg); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-right .elementor-flip-box:hover .elementor-flip-box-front { + transform: translateX(100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-left .elementor-flip-box:hover .elementor-flip-box-front { + transform: translateX(-100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-up .elementor-flip-box:hover .elementor-flip-box-front { + transform: translateY(-100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-down .elementor-flip-box:hover .elementor-flip-box-front { + transform: translateY(100%); } + +.elementor-flip-box--effect-push .elementor-flip-box, +.elementor-flip-box--effect-slide .elementor-flip-box { + overflow: hidden; } + +.elementor-flip-box--effect-push.elementor-flip-box--direction-right .elementor-flip-box-back, +.elementor-flip-box--effect-slide.elementor-flip-box--direction-right .elementor-flip-box-back { + transform: translateX(-100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-left .elementor-flip-box-back, +.elementor-flip-box--effect-slide.elementor-flip-box--direction-left .elementor-flip-box-back { + transform: translateX(100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-up .elementor-flip-box-back, +.elementor-flip-box--effect-slide.elementor-flip-box--direction-up .elementor-flip-box-back { + transform: translateY(100%); } +.elementor-flip-box--effect-push.elementor-flip-box--direction-down .elementor-flip-box-back, +.elementor-flip-box--effect-slide.elementor-flip-box--direction-down .elementor-flip-box-back { + transform: translateY(-100%); } + +.elementor-flip-box--effect-zoom-out .elementor-flip-box .elementor-flip-box-front { + transition: opacity .35s, width .1ms, transform .7s; + z-index: 1; + width: 100%; } +.elementor-flip-box--effect-zoom-out .elementor-flip-box:hover .elementor-flip-box-front { + transition: opacity .7s .1s, width .1ms .7s, transform .8s; + width: 0; + opacity: 0; + transform: scale(.7); } +.elementor-flip-box--effect-zoom-in .elementor-flip-box .elementor-flip-box-back { + transition: opacity .5s .2s, transform .7s; + opacity: 0; + transform: scale(.7); } +.elementor-flip-box--effect-zoom-in .elementor-flip-box:hover .elementor-flip-box-back { + transition: opacity .5s, transform .7s; + opacity: 1; + transform: scale(1); } + +.elementor-flip-box--effect-fade .elementor-flip-box .elementor-flip-box-back { + opacity: 0; } +.elementor-flip-box--effect-fade .elementor-flip-box:hover .elementor-flip-box-back { + opacity: 1; } + +.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box-front { + display: none; } +.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box-back { + transform: none; + opacity: 1; } + +.elementor-headline { + font-size: 43px; + line-height: 1.2; + display: block; } + .elementor-headline--style-rotate .elementor-headline-dynamic-wrapper { + text-align: left; } + .elementor-headline--style-highlight .elementor-headline-dynamic-wrapper { + overflow: visible; + text-align: inherit; } + .elementor-headline--style-highlight .elementor-headline-dynamic-text { + z-index: 1; } + .elementor-headline--style-highlight .elementor-headline-plain-text { + z-index: 1; + position: relative; } + .elementor-headline--style-highlight svg { + position: absolute; + top: 50%; + left: 50%; + width: calc( 100% + 20px); + height: calc( 100% + 20px); + transform: translate(-50%, -50%); + overflow: visible; } + .elementor-headline--style-highlight svg path { + stroke: red; + stroke-width: 9; + fill: none; + stroke-dasharray: 1500; + animation: elementor-headline-dash 10s infinite; } + .elementor-headline--style-highlight svg path:nth-of-type(2) { + animation-delay: 0.6s; } + +@keyframes elementor-headline-dash { + 0% { + stroke-dasharray: 0 1500; } + 15% { + stroke-dasharray: 1500 1500; } + 85% { + opacity: 1; } + 90% { + stroke-dasharray: 1500 1500; + opacity: 0; } + 100% { + stroke-dasharray: 0 1500; + opacity: 0; } } + +.elementor-headline-dynamic-wrapper { + display: inline-block; + position: relative; } + .elementor-headline-dynamic-wrapper .elementor-headline-dynamic-text { + display: inline-block; + position: absolute; + top: 0; + left: 0; } + .elementor-headline-dynamic-wrapper .elementor-headline-dynamic-text.elementor-headline-text-active { + position: relative; } + +.elementor-headline-animation-type-flip .elementor-headline-dynamic-wrapper { + perspective: 300px; } + +.elementor-headline-animation-type-flip .elementor-headline-dynamic-text { + opacity: 0; + transform-origin: 50% 100%; + transform: rotateX(180deg); } + .elementor-headline-animation-type-flip .elementor-headline-dynamic-text.elementor-headline-text-active { + opacity: 1; + transform: rotateX(0); + animation: elementor-headline-flip-in 1.2s; } + .elementor-headline-animation-type-flip .elementor-headline-dynamic-text.elementor-headline-text-inactive { + transform: rotateX(180deg); + animation: elementor-headline-flip-out 1.2s; } + +@keyframes elementor-headline-flip-in { + 0% { + transform: rotateX(180deg); + opacity: 0; } + 35% { + transform: rotateX(120deg); + opacity: 0; } + 65% { + opacity: 0; } + 100% { + transform: rotateX(360deg); + opacity: 1; } } + +@keyframes elementor-headline-flip-out { + 0% { + transform: rotateX(0); + opacity: 1; } + 35% { + transform: rotateX(-40deg); + opacity: 1; } + 65% { + opacity: 0; } + 100% { + transform: rotateX(180deg); + opacity: 0; } } + +.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper { + vertical-align: top; + overflow: hidden; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper::after { + /* vertical bar */ + content: ''; + position: absolute; + left: auto; + right: 0; + top: 50%; + transform: translateY(-50%); + height: 90%; + width: 1px; + background-color: #0d0d0d; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper:not(.elementor-headline-typing-selected):after { + animation: elementor-headline-pulse 1s infinite; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected { + background-color: #0d0d0d; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected::after { + visibility: hidden; } + .elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected .elementor-headline-dynamic-text { + color: #aebcb9; } + +.elementor-headline-animation-type-typing .elementor-headline-dynamic-text:not(.elementor-headline-text-active) { + visibility: hidden; } + +.elementor-headline-animation-type-typing .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in) { + position: absolute; + visibility: hidden; } + +@keyframes elementor-headline-pulse { + 0% { + transform: translateY(-50%) scale(1); + opacity: 1; } + 40% { + transform: translateY(-50%) scale(0.9); + opacity: 0; } + 100% { + transform: translateY(-50%) scale(0); + opacity: 0; } } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-wrapper { + perspective: 300px; } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter { + display: inline-block; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-text { + opacity: 0; } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter { + transform-style: preserve-3d; + transform: translateZ(-20px) rotateX(90deg); + opacity: 0; } + .elementor-headline-text-active .elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter { + opacity: 1; } + .elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter.elementor-headline-animation-in { + animation: elementor-headline-swirl-in .4s forwards; } + .elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in) { + animation: elementor-headline-swirl-out .4s forwards; } + +@keyframes elementor-headline-swirl-in { + 0% { + opacity: 0; + transform: translateZ(-20px) rotateX(90deg); } + 60% { + opacity: 1; + transform: translateZ(-20px) rotateX(-10deg); } + 100% { + opacity: 1; + transform: translateZ(-20px); } } + +@keyframes elementor-headline-swirl-out { + 0% { + opacity: 1; + transform: translateZ(-20px); } + 60% { + opacity: 0; + transform: translateZ(-20px) rotateX(-100deg); } + 100% { + opacity: 0; + transform: translateZ(-20px) rotateX(-90deg); } } + +.elementor-headline-animation-type-slide-down .elementor-headline-text-wrapper { + display: inline-block; + padding: .2em 0; } + +.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-wrapper { + overflow: hidden; + vertical-align: top; } + +.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text { + opacity: 0; + top: .2em; } + .elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text.elementor-headline-text-active { + top: 0; + opacity: 1; + animation: elementor-headline-slide-down-in .6s; } + .elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text.elementor-headline-text-inactive { + animation: elementor-headline-slide-down-out .6s; } + +@keyframes elementor-headline-slide-down-in { + 0% { + opacity: 0; + transform: translateY(-100%); } + 60% { + opacity: 1; + transform: translateY(20%); } + 100% { + opacity: 1; + transform: translateY(0); } } + +@keyframes elementor-headline-slide-down-out { + 0% { + opacity: 1; + transform: translateY(0); } + 60% { + opacity: 0; + transform: translateY(120%); } + 100% { + opacity: 0; + transform: translateY(100%); } } + +.elementor-headline-animation-type-clip .elementor-headline-text-wrapper { + display: inline-block; + padding: .2em 0; } + +.elementor-headline-animation-type-clip .elementor-headline-dynamic-wrapper { + overflow: hidden; + vertical-align: top; } + .elementor-headline-animation-type-clip .elementor-headline-dynamic-wrapper::after { + /* line */ + content: ''; + position: absolute; + top: 0; + left: auto; + right: 0; + width: 2px; + height: 100%; + background-color: #0d0d0d; } + +.elementor-headline-animation-type-clip .elementor-headline-dynamic-text { + opacity: 0; } + .elementor-headline-animation-type-clip .elementor-headline-dynamic-text.elementor-headline-text-active { + opacity: 1; } + +.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-wrapper { + perspective: 300px; } + +.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text { + opacity: 0; } + .elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text.elementor-headline-text-active { + opacity: 1; + animation: elementor-headline-drop-in-in .8s; } + .elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text.elementor-headline-text-inactive { + animation: elementor-headline-drop-in-out .8s; } + +@keyframes elementor-headline-drop-in-in { + 0% { + opacity: 0; + transform: translateZ(100px); } + 100% { + opacity: 1; + transform: translateZ(0); } } + +@keyframes elementor-headline-drop-in-out { + 0% { + opacity: 1; + transform: translateZ(0); } + 100% { + opacity: 0; + transform: translateZ(-100px); } } + +.elementor-headline-animation-type-blinds .elementor-headline-dynamic-wrapper { + perspective: 300px; } + +.elementor-headline-animation-type-blinds .elementor-headline-dynamic-text { + opacity: 0; } + +.elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter { + display: inline-block; + transform: rotateY(180deg); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .elementor-headline-text-active .elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter { + transform: rotateY(0); } + .elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter.elementor-headline-animation-in { + animation: elementor-headline-blinds-in .6s forwards; } + .elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in) { + animation: elementor-headline-blinds-out .6s forwards; } + +@keyframes elementor-headline-blinds-in { + 0% { + transform: rotateY(180deg); } + 100% { + transform: rotateY(0); } } + +@keyframes elementor-headline-blinds-out { + 0% { + transform: rotateY(0); } + 100% { + transform: rotateY(-180deg); } } + +.elementor-headline-animation-type-wave .elementor-headline-dynamic-text { + opacity: 0; } + +.elementor-headline-animation-type-wave .elementor-headline-dynamic-letter { + display: inline-block; + opacity: 0; + transform: scale(0); } + .elementor-headline-text-active .elementor-headline-animation-type-wave .elementor-headline-dynamic-letter { + opacity: 1; } + .elementor-headline-animation-type-wave .elementor-headline-dynamic-letter.elementor-headline-animation-in { + animation: elementor-headline-wave-up .6s forwards; } + .elementor-headline-animation-type-wave .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in) { + animation: elementor-headline-wave-down .6s forwards; } + +@keyframes elementor-headline-wave-up { + 0% { + transform: scale(0); + opacity: 0; } + 60% { + transform: scale(1.2); + opacity: 1; } + 100% { + transform: scale(1); + opacity: 1; } } + +@keyframes elementor-headline-wave-down { + 0% { + transform: scale(1); + opacity: 1; } + 60% { + transform: scale(0); + opacity: 0; } } + +.elementor-headline-animation-type-slide .elementor-headline-dynamic-text { + opacity: 0; } + .elementor-headline-animation-type-slide .elementor-headline-dynamic-text.elementor-headline-text-active { + opacity: 1; + animation: elementor-headline-slide-in .6s; } + .elementor-headline-animation-type-slide .elementor-headline-dynamic-text.elementor-headline-text-inactive { + animation: elementor-headline-slide-out .6s; } + +@keyframes elementor-headline-slide-in { + 0% { + opacity: 0; + transform: translateX(-100%); } + 60% { + opacity: 1; + transform: translateX(10%); } + 100% { + opacity: 1; + transform: translateX(0); } } + +@keyframes elementor-headline-slide-out { + 0% { + opacity: 1; + transform: translateX(0); } + 60% { + opacity: 0; + transform: translateX(110%); } + 100% { + opacity: 0; + transform: translateX(100%); } } + +.elementor-headline-animation-type-swirl .elementor-headline-dynamic-text, .elementor-headline-animation-type-blinds .elementor-headline-dynamic-text, .elementor-headline-animation-type-wave .elementor-headline-dynamic-text { + white-space: nowrap; } + +.elementor-image-hotspot { + display: inline-block; + position: relative; } + .elementor-image-hotspot .elementor-image-hotspot-wrapper { + position: absolute; + transform: translate(-50%, -50%); } + .elementor-image-hotspot .elementor-image-hotspot-wrapper:hover .elementor-image-hotspot-content { + visibility: visible; + opacity: 1; + transform: translate3d(-50%, -110%, 0); } + .elementor-image-hotspot .elementor-image-hotspot-content { + position: absolute; + visibility: hidden; + top: 0; + left: 50%; + width: 240px; + max-width: 100vw; + padding: 20px; + text-align: center; + border-radius: 5px; + background: #fff; + opacity: 0; + z-index: 10; + box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.07); + transform: translate3d(-50%, -100%, 0); + transition: all 0.3s cubic-bezier(0, 0, 0.2, 1); } + .elementor-image-hotspot .elementor-image-hotspot-title { + margin: 0 0 7px 0; } + .elementor-image-hotspot .elementor-image-hotspot-description > :first-child { + margin-top: 0; } + .elementor-image-hotspot .elementor-image-hotspot-description > :last-child { + margin-bottom: 0; } +.elementor-widget-image-hotspot.elementor-view-framed .elementor-icon { + border-width: 2px; } +.elementor-widget-image-hotspot.elementor-view-stacked .elementor-icon, +.elementor-widget-image-hotspot.elementor-view-framed .elementor-icon { + border-radius: 50%; } +.elementor-image-hotspot .elementor-icon i[class=''], +.elementor-image-hotspot .elementor-icon i:not([class]) { + display: none; } + +.elementor-widget-countdown .elementor-countdown-expire--message { + display: none; + padding: 20px; + text-align: center; } +.elementor-widget-countdown .elementor-countdown-item { + padding: 20px 0; + text-align: center; + background-color: #818a91; + color: #ffffff; } +.elementor-widget-countdown .elementor-countdown-digits, +.elementor-widget-countdown .elementor-countdown-label { + line-height: 1; } +.elementor-widget-countdown .elementor-countdown-digits { + font-size: 69px; } +.elementor-widget-countdown .elementor-countdown-label { + font-size: 19px; } +.elementor-countdown--label-block .elementor-countdown-wrapper { + display: flex; + justify-content: center; + margin-right: auto; + margin-left: auto; } +.elementor-countdown--label-block .elementor-countdown-digits, +.elementor-countdown--label-block .elementor-countdown-label { + display: block; } +.elementor-countdown--label-block .elementor-countdown-item { + flex-basis: 0; + flex-grow: 1; } +.elementor-countdown--label-inline { + text-align: center; } + .elementor-countdown--label-inline .elementor-countdown-item { + display: inline-block; + padding-left: 5px; + padding-right: 5px; } +.elementor[data-elementor-type$="miniature"] .elementor-countdown-item { + padding: 10px 0; } +.elementor[data-elementor-type$="miniature"] .elementor-countdown-digits { + font-size: 28px; } +.elementor[data-elementor-type$="miniature"] .elementor-countdown-label { + font-size: 12px; } + +.elementor-product-grid > *, +.elementor-product-box > *, +.wrapfix .elementor-product-box, +.wrapfix .elementor-product-box > * > * { + float: none !important; + margin-left: 0 !important; + margin-right: 0 !important; + width: auto; } +.wrapfix .elementor-product-grid > *, +.wrapfix .elementor-product-box > * { + min-width: 100%; + padding: 0 !important; } + +.elementor-product-grid { + display: -ms-grid; + display: grid; + margin: 0; + grid-column-gap: 15px; + grid-row-gap: 15px; } + .elementor-product-grid:before, + .elementor-product-grid:after { + display: none !important; } + .elementor-product-grid > * { + align-self: flex-start; } + +.elementor-widget .elementor-product-miniature { + background: #ffffff; + border: 0 solid; + padding: 10px; + transition: all 0.4s; } +.elementor-product-miniature .elementor-product-link { + position: relative; + display: block; + outline: none; } +.elementor-product-miniature .elementor-image { + position: relative; + overflow: hidden; } + .elementor-product-miniature .elementor-image img { + display: block; + margin: 0 auto; + transition: transform 0.4s; } +.elementor-product-miniature .elementor-second-image { + position: absolute; + top: 0; + left: 0; + width: 100%; + opacity: 0; + transition: opacity 0.4s; } + .elementor-img-hover-grow .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-grow .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-grow .elementor-product-miniature:hover .elementor-image img { + transform: scale(1.1); } + .elementor-img-hover-shrink .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-shrink .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-shrink .elementor-product-miniature:hover .elementor-image img { + transform: scale(0.85); } + .elementor-img-hover-rotate .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-rotate .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-rotate .elementor-product-miniature:hover .elementor-image img { + transform: rotate(4deg); } + .elementor-img-hover-grow-rotate .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-grow-rotate .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-grow-rotate .elementor-product-miniature:hover .elementor-image img { + transform: scale(1.1) rotate(4deg); } + .elementor-img-hover-float .elementor-product-miniature .elementor-image img{ + transition-duration: .3s; + transition-timing-function: ease-out; } + .elementor-img-hover-float .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-float .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-float .elementor-product-miniature:hover .elementor-image img { + transform: translateY(-8px); } + .elementor-img-hover-sink .elementor-product-miniature .elementor-image img{ + transition-duration: .3s; + transition-timing-function: ease-out; } + .elementor-img-hover-sink .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-sink .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-sink .elementor-product-miniature:hover .elementor-image img { + transform: translateY(8px); } + .elementor-img-hover-bob .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-bob .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-bob .elementor-product-miniature:hover .elementor-image img { + animation-name: elementor-animation-bob-float, elementor-animation-bob; + animation-duration: .3s, 1.5s; + animation-delay: 0s, .3s; + animation-timing-function: ease-out, ease-in-out; + animation-iteration-count: 1, infinite; + animation-fill-mode: forwards; + animation-direction: normal, alternate; } + .elementor-img-hover-hang .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-hang .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-hang .elementor-product-miniature:hover .elementor-image img { + animation-name: elementor-animation-hang-sink, elementor-animation-hang; + animation-duration: .3s, 1.5s; + animation-delay: 0s, .3s; + animation-timing-function: ease-out, ease-in-out; + animation-iteration-count: 1, infinite; + animation-fill-mode: forwards; + animation-direction: normal, alternate; } + .elementor-img-hover-buzz-out .elementor-product-miniature:active .elementor-image img, + .elementor-img-hover-buzz-out .elementor-product-miniature:focus .elementor-image img, + .elementor-img-hover-buzz-out .elementor-product-miniature:hover .elementor-image img { + animation-name: elementor-animation-buzz-out; + animation-duration: .75s; + animation-timing-function: linear; + animation-iteration-count: 1; } + .elementor-product-miniature:hover .elementor-second-image { + opacity: 1; } +.elementor-product-miniature .elementor-quick-view { + position: absolute; + display: block; + bottom: 0; + width: 100%; + background: rgba(255, 255, 255, 0.5); + background-clip: padding-box; + color: #000; + font-size: 14px; + line-height: 40px; + transform: translateY(100%); + transition-duration: 0.4s; } + .elementor-product-miniature .elementor-quick-view .elementor-button-text { + flex-grow: 0; } + .elementor-product-miniature:hover .elementor-quick-view { + cursor: pointer; + transform: translateY(0); } + .elementor-product-miniature .elementor-quick-view:hover { + opacity: 1; + background-color: rgba(255, 255, 255, 0.7); } +.elementor-product-miniature .elementor-badges-left, +.elementor-product-miniature .elementor-badges-right { + position: absolute; + top: 0; + margin: 10px; } +.elementor-product-miniature .elementor-badges-left { + left: 0; } +.elementor-product-miniature .elementor-badges-right { + right: 0; } +.elementor-product-miniature .elementor-badge { + min-width: 50px; + margin-bottom: 5px; + padding: 4px 5px 4px 5px; + color: #fff; + text-align: center; } +.elementor-product-miniature .elementor-badge-sale { + background: #f39d72; } +.elementor-product-miniature .elementor-badge-new { + background: #2fb5d2; } +.elementor-product-miniature .elementor-badge-pack { + background: #2fb5d2; } +.elementor-product-miniature .elementor-content { + padding: 10px; + text-align: center; } +.elementor-product-miniature .elementor-content > * { + margin-top: 10px; + margin-bottom: 0; } + .elementor-product-miniature .elementor-content > :first-child { + margin-top: 5px; } +.elementor-product-miniature .elementor-title, +.elementor-product-miniature .elementor-category { + color: #000; + font-size: 14px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; } +.elementor-product-miniature .elementor-category { + color: color: #afafaf; } +.elementor-product-miniature .elementor-description { + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + font-size: 13px; } +.elementor-product-miniature .elementor-price-wrapper { + font-size: 16px; } +.elementor-product-miniature .elementor-price-regular { + color: #afafaf; + font-weight: normal; + text-decoration: line-through; } +.elementor-product-miniature .elementor-price { + color: #000; } +.elementor-product-miniature .elementor-atc { + margin-top: 5px; } + .elementor-atc--align-center .elementor-atc { + text-align: center; } + .elementor-atc--align-right .elementor-atc { + text-align: right; } + .elementor-atc--align-left .elementor-atc { + text-align: left; } + .elementor-atc--align-justify .elementor-atc .elementor-button { + width: 100%; } +.elementor-product-miniature .elementor-atc .elementor-button { + font-size: 14px; + background: #000; + cursor: pointer; } + .elementor-product-miniature .elementor-atc .elementor-button:hover { + opacity: 1; + background-color: #212121; } + .elementor-product-miniature .elementor-atc .elementor-button:disabled { + cursor: not-allowed; } + +.elementor-trustedshops-reviews .slick-track { + display: table; } + .elementor-trustedshops-reviews .slick-initialized .slick-slide { + display: table-cell; + float: none; } + .elementor-trustedshops-reviews .slick-slide-inner { + overflow: hidden; } +.elementor-trustedshops-reviews .elementor-trustedshops-reviews-header, +.elementor-trustedshops-reviews .elementor-trustedshops-reviews-comment { + padding: 10px; } + .elementor-trustedshops-reviews .elementor-trustedshops-reviews-header::after { + content: ''; + display: block; + clear: both; } + .elementor-trustedshops-reviews .elementor-trustedshops-reviews-date { + float: left; } + .elementor-trustedshops-reviews .elementor-trustedshops-reviews-stars { + float: right; } + .elementor-trustedshops-reviews .elementor-icon-unicode .fa-star::before { + content: '\2605'; } + .elementor-trustedshops-reviews .elementor-icon-unicode .fa-star-o::before { + content: '\2606'; } + +.elementor-search { + display: flex; + flex-direction: column; + transition: 0.2s; } +.elementor-search--align-left .elementor-search { + align-items: flex-start; } +.elementor-search--align-center .elementor-search { + align-items: center; } +.elementor-search--align-right .elementor-search { + align-items: flex-end; } + .elementor-search input[type="search"], .elementor-search button { + margin: 0; + border: 0; + padding: 0; + display: inline-block; + vertical-align: middle; + white-space: normal; + background: none; + line-height: 1; + min-width: 0; + font-size: 15px; + -webkit-appearance: none; + -moz-appearance: none; } + .elementor-search input[type="search"]::-webkit-search-cancel-button { + content: 'x'; + -webkit-appearance: none; + } + .elementor-search input[type="search"]:focus, .elementor-search button:focus { + outline: 0; + color: inherit; } + .elementor-search button { + background-color: #818a91; + font-size: 16px; + color: #fff; + border-radius: 0; } + .elementor-search__container { + display: flex; + transition: 0.2s; + overflow: hidden; + border: 0 solid transparent; + min-height: 50px; } + .elementor-search__container:not(.elementor-search--topbar) { + width: 100%; + background: #eceeef; } + .elementor-search__input { + flex-basis: 100%; + color: #55595c; + transition: color 0.2s; } + .elementor-search__input::-webkit-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__input:-ms-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__input:-moz-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__input::-ms-input-placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__input::placeholder { + color: inherit; + font-family: inherit; + opacity: 0.6; } + .elementor-search__submit { + color: #fff; + cursor: pointer; + transition: color 0.2s, background 0.2s; } + .elementor-search--button-type-text .elementor-search__submit { + flex-shrink: 0; } + .elementor-search__icon:not(.elementor-search__clear) { + padding-right: 0 !important; } + .elementor-search__clear { + padding-left: 0 !important; + visibility: hidden; + pointer-events: none; + cursor: pointer; } + .ui-autocomplete-loading ~ .elementor-search__clear i { + animation: ceicon-spin 2s infinite linear; } + .ui-autocomplete-loading ~ .elementor-search__clear i:before { + content: '\e823'; } + .elementor-search__icon { + opacity: 0.6; + display: flex; + align-items: center; + justify-content: flex-end; + color: #55595c; } + .elementor-search--skin-topbar .elementor-search { + display: block; } + .elementor-search--skin-topbar .elementor-search input[type="search"].elementor-search__input { + font-size: 32px; + border-style: solid; + border-width: 0 0 1px 0; + border-color: #eceaea; + border-radius: 0; + line-height: 1.5; + color: #fff; } + .elementor-search--skin-topbar .elementor-search__toggle { + display: inline-block; + cursor: pointer; + vertical-align: middle; + color: #494c4f; } + .elementor-search--skin-topbar .elementor-search__toggle i { + position: relative; + display: block; + border: solid 0; + transition: 0.2s; + width: 33px; + height: 33px; + border-radius: 3px; } + .elementor-search--skin-topbar .elementor-search__toggle i:before { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + font-size: 0.55em; } + .elementor-search--skin-topbar .elementor-search__container { + flex-direction: column; + transition: transform 0.3s; + position: fixed; + z-index: 9998; + top: 0; + left: 0; + right: 0; + border: 0 solid transparent; + padding: 20px; + text-align: left; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + background: #fff; } + .elementor-search--skin-topbar .elementor-search__container:not(.elementor-search--topbar) { + overflow: hidden; + box-shadow: none; + transform: translateY(-100%); } +.elementor-search .dialog-lightbox-close-button { + transition: color 0.5s; + top: 10px; + right: 10px; } +.elementor-search__input-wrapper { + position: relative; + display: flex; + align-items: center; + flex-basis: 100%; } + .elementor-search__input-wrapper .elementor-search__input { + width: 100%; + height: 100%; } + .elementor-search__input-wrapper .elementor-search__clear { + position: absolute; + right: 0; + height: 100%; } +.elementor-search__label { + color: #777777; } +.elementor-search__products { + left: auto !important; + z-index: 9999; } + .elementor-search__products:empty { + display: none !important; } +.elementor-search__products .elementor-search__product a.elementor-search__product-link { + display: flex; + align-items: center; + border: none; + border-radius: 0; + padding: 5px; } +.elementor-search__products .elementor-search__product a.elementor-search__product-link.ui-state-focus { + margin: 0; + border-radius: 0; + background: transparent; } +.elementor-search__products .elementor-search__product-image { + align-self: flex-start; + margin-right: 10px; } +.elementor-search__products .elementor-search__product-description { + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + font-size: .8em; } +.elementor-search__products .elementor-search__product-price del { + opacity: .66; } +.elementor-search--skin-topbar .elementor-search__products:not(:empty) { + position: static; + display: block !important; + max-width: 100%; + border: none; + border-radius: 0; + background: transparent; } + +.elementor-email-subscription { + display: inline-block; + width: 100%; } +.elementor-field-type-subscribe { + display: flex; + align-items: center; } +.elementor-field-type-subscribe input[type=email] { + flex-basis: 100%; + width: 100%; + font-size: 15px; + color: #373a3c; + background: #fff; + border: 1px solid #818a91; + border-radius: 0; + transition: all 0.5s; } +.elementor-field-type-subscribe input[type=email]:focus { + outline: 0; } +.elementor-field-type-submit button[type=submit], +.elementor-field-type-subscribe button[type=submit] { + border: 0 solid; + cursor: pointer; } +.elementor-field-type-subscribe button[type=submit] { + margin-right: 0 !important; + font-size: 16px; + color: #fff; + background: #5bc0de; + border-radius: 0; } +.elementor-field-type-gdpr input[type=checkbox], +.elementor-field-type-gdpr .elementor-checkbox-label { + margin-left: 0 !important; + vertical-align: middle; + vertical-align: -webkit-baseline-middle; + vertical-align: -moz-middle-with-baseline; } +.elementor-form-spinner ~ span[class*=icon] { + display: none; } +.elementor-field-group .elementor-field { + width: 100%; } + +@media screen and (max-width: 767px) { + .elementor-mobile-layout-multiline .elementor-field-type-subscribe { + display: block; } + .elementor-mobile-layout-multiline .elementor-field-type-subscribe button[type=submit] { + margin-left: 0 !important; } + .elementor-mobile-layout-inline .elementor-field-type-subscribe button[type=submit] { + margin-top: 0 !important; } } + +@media (min-width: 768px) and (max-width: 1024px) { + .elementor-tablet-layout-multiline .elementor-field-type-subscribe { + display: block; } + .elementor-tablet-layout-multiline .elementor-field-type-subscribe button[type=submit] { + margin-left: 0 !important; } + .elementor-tablet-layout-inline .elementor-field-type-subscribe button[type=submit] { + margin-top: 0 !important; } } + +@media (min-width: 1025px) { + .elementor-layout-multiline .elementor-field-type-subscribe { + display: block; } + .elementor-layout-multiline .elementor-field-type-subscribe button[type=submit] { + margin-left: 0 !important; } + .elementor-layout-inline .elementor-field-type-subscribe button[type=submit] { + margin-top: 0 !important; } } + +.elementor-sticky--active { + z-index: 99; } + +.elementor-sticky.ce-sticky--hide { + transition-delay: .2s !important;} + +.elementor-item:before, .elementor-item:after { + display: block; + position: absolute; + transition: 0.3s; + transition-timing-function: cubic-bezier(0.58, 0.3, 0.005, 1); } + +.elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + opacity: 0; } + +.elementor-item:hover:before, .elementor-item:hover:after, +.elementor-item:focus:before, .elementor-item:focus:after, +.elementor-item.highlighted:before, .elementor-item.highlighted:after, +.elementor-item-active:before, .elementor-item-active:after { + transform: scale(1); } + +.e--pointer-double-line .elementor-item:before, .e--pointer-double-line .elementor-item:after, +.e--pointer-underline .elementor-item:before, .e--pointer-underline .elementor-item:after, +.e--pointer-overline .elementor-item:before, .e--pointer-overline .elementor-item:after { + height: 3px; + width: 100%; + left: 0; + background-color: #55595c; + z-index: 2; } + +.e--pointer-double-line.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-double-line.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-underline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-underline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-overline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-overline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + height: 0; + width: 0; + left: 50%; } + +.e--pointer-double-line.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-underline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-overline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + top: 10px; } +.e--pointer-double-line.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-underline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-overline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + bottom: 10px; } +.e--pointer-double-line.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-underline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-overline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + top: -10px; } +.e--pointer-double-line.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-underline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-overline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + bottom: -10px; } + +.e--pointer-double-line.e--animation-none, +.e--pointer-double-line.e--animation-none .elementor-item, .e--pointer-underline.e--animation-none, +.e--pointer-underline.e--animation-none .elementor-item, .e--pointer-overline.e--animation-none, +.e--pointer-overline.e--animation-none .elementor-item, +.e--pointer-double-line.e--animation-none:before, .e--pointer-double-line.e--animation-none:after, +.e--pointer-double-line.e--animation-none:hover, .e--pointer-double-line.e--animation-none:focus, +.e--pointer-double-line.e--animation-none .elementor-item:before, +.e--pointer-double-line.e--animation-none .elementor-item:after, +.e--pointer-double-line.e--animation-none .elementor-item:hover, +.e--pointer-double-line.e--animation-none .elementor-item:focus, +.e--pointer-underline.e--animation-none:before, .e--pointer-underline.e--animation-none:after, +.e--pointer-underline.e--animation-none:hover, .e--pointer-underline.e--animation-none:focus, +.e--pointer-underline.e--animation-none .elementor-item:before, +.e--pointer-underline.e--animation-none .elementor-item:after, +.e--pointer-underline.e--animation-none .elementor-item:hover, +.e--pointer-underline.e--animation-none .elementor-item:focus, +.e--pointer-overline.e--animation-none:before, .e--pointer-overline.e--animation-none:after, +.e--pointer-overline.e--animation-none:hover, .e--pointer-overline.e--animation-none:focus, +.e--pointer-overline.e--animation-none .elementor-item:before, +.e--pointer-overline.e--animation-none .elementor-item:after, +.e--pointer-overline.e--animation-none .elementor-item:hover, +.e--pointer-overline.e--animation-none .elementor-item:focus { + transition-duration: 0s; } + +.e--pointer-double-line .elementor-item:before, .e--pointer-overline .elementor-item:before { + content: ''; + top: 0; } +.e--pointer-double-line.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before, +.e--pointer-overline.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + width: 10px; + left: -20px; } +.e--pointer-double-line .elementor-item:after, .e--pointer-underline .elementor-item:after { + content: ''; + bottom: 0; } +.e--pointer-double-line.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after, +.e--pointer-underline.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after { + width: 10px; + left: calc( 100% + 20px); } + +.e--pointer-framed .elementor-item:before, .e--pointer-framed .elementor-item:after { + background: transparent; + left: 0; + top: 0; + bottom: 0; + right: 0; + border: 3px solid #55595c; } +.e--pointer-framed .elementor-item:before { + content: ''; } + +.e--pointer-framed.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + transform: scale(0.75); } +.e--pointer-framed.e--animation-shrink .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + transform: scale(1.25); } + +.e--pointer-framed.e--animation-grow .elementor-item:before, .e--pointer-framed.e--animation-shrink .elementor-item:before { + transition: opacity 0.2s, transform 0.4s; } +.e--pointer-framed.e--animation-draw .elementor-item:before, .e--pointer-framed.e--animation-draw .elementor-item:after { + width: 3px; + height: 3px; } +.e--pointer-framed.e--animation-draw .elementor-item:before { + border-width: 0 0 3px 3px; + transition: width 0.1s 0.2s, height 0.1s 0.3s, opacity 0.12s 0.22s; } +.e--pointer-framed.e--animation-draw .elementor-item:after { + content: ''; + top: initial; + bottom: 0; + left: initial; + right: 0; + border-width: 3px 3px 0 0; + transition: width 0.1s, height 0.1s 0.1s, opacity 0.02s 0.18s; } + +.e--pointer-framed.e--animation-draw .elementor-item:hover:before, +.e--pointer-framed.e--animation-draw .elementor-item:hover:after, +.e--pointer-framed.e--animation-draw .elementor-item:focus:before, +.e--pointer-framed.e--animation-draw .elementor-item:focus:after, +.e--pointer-framed.e--animation-draw .elementor-item.highlighted:before, +.e--pointer-framed.e--animation-draw .elementor-item.highlighted:after, +.e--pointer-framed.e--animation-draw .elementor-item-active:before, +.e--pointer-framed.e--animation-draw .elementor-item-active:after { + width: 100%; + height: 100%; } +.e--pointer-framed.e--animation-draw .elementor-item:hover:before, +.e--pointer-framed.e--animation-draw .elementor-item:focus:before, +.e--pointer-framed.e--animation-draw .elementor-item.highlighted:before, +.e--pointer-framed.e--animation-draw .elementor-item-active:before { + transition: opacity 0.02s, height 0.1s, width 0.1s 0.1s; } +.e--pointer-framed.e--animation-draw .elementor-item:hover:after, +.e--pointer-framed.e--animation-draw .elementor-item:focus:after, +.e--pointer-framed.e--animation-draw .elementor-item.highlighted:after, +.e--pointer-framed.e--animation-draw .elementor-item-active:after { + transition: opacity 0.02s 0.2s, height 0.1s 0.2s, width 0.1s 0.3s; } + +.e--pointer-framed.e--animation-corners .elementor-item:before, .e--pointer-framed.e--animation-corners .elementor-item:after { + width: 3px; + height: 3px; } +.e--pointer-framed.e--animation-corners .elementor-item:before { + border-width: 3px 0 0 3px; } +.e--pointer-framed.e--animation-corners .elementor-item:after { + content: ''; + top: initial; + bottom: 0; + left: initial; + right: 0; + border-width: 0 3px 3px 0; } +.e--pointer-framed.e--animation-corners .elementor-item:hover:before, +.e--pointer-framed.e--animation-corners .elementor-item:hover:after, +.e--pointer-framed.e--animation-corners .elementor-item:focus:before, +.e--pointer-framed.e--animation-corners .elementor-item:focus:after, +.e--pointer-framed.e--animation-corners .elementor-item.highlighted:before, +.e--pointer-framed.e--animation-corners .elementor-item.highlighted:after, +.e--pointer-framed.e--animation-corners .elementor-item-active:before, +.e--pointer-framed.e--animation-corners .elementor-item-active:after { + width: 100%; + height: 100%; + transition: opacity 0.002s, width 0.4s, height 0.4s; } + +.e--pointer-framed.e--animation-none, +.e--pointer-framed.e--animation-none .elementor-item, +.e--pointer-framed.e--animation-none:before, .e--pointer-framed.e--animation-none:after, +.e--pointer-framed.e--animation-none:hover, .e--pointer-framed.e--animation-none:focus, +.e--pointer-framed.e--animation-none .elementor-item:before, +.e--pointer-framed.e--animation-none .elementor-item:after, +.e--pointer-framed.e--animation-none .elementor-item:hover, +.e--pointer-framed.e--animation-none .elementor-item:focus { + transition-duration: 0s; } + +.e--pointer-background .elementor-item:before, .e--pointer-background .elementor-item:after { + content: ''; + transition: 0.3s; } +.e--pointer-background .elementor-item:before { + top: 0; + left: 0; + right: 0; + bottom: 0; + background: #55595c; + z-index: -1; } +.e--pointer-background .elementor-item:hover, +.e--pointer-background .elementor-item:focus, +.e--pointer-background .elementor-item.highlighted, +.e--pointer-background .elementor-item-active { + color: #fff; } + +.e--pointer-background.e--animation-grow .elementor-item:before { + transform: scale(0.5); } +.e--pointer-background.e--animation-grow .elementor-item:hover:before, +.e--pointer-background.e--animation-grow .elementor-item:focus:before, +.e--pointer-background.e--animation-grow .elementor-item.highlighted:before, +.e--pointer-background.e--animation-grow .elementor-item-active:before { + transform: scale(1); + opacity: 1; } + +.e--pointer-background.e--animation-shrink .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + transform: scale(1.2); + transition: 0.3s; } +.e--pointer-background.e--animation-shrink .elementor-item:hover:before, +.e--pointer-background.e--animation-shrink .elementor-item:focus:before, +.e--pointer-background.e--animation-shrink .elementor-item.highlighted:before, +.e--pointer-background.e--animation-shrink .elementor-item-active:before { + transition: opacity 0.15s, transform 0.4s; } + +.e--pointer-background.e--animation-sweep-left .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + left: 100%; } +.e--pointer-background.e--animation-sweep-right .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + right: 100%; } +.e--pointer-background.e--animation-sweep-up .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + top: 100%; } +.e--pointer-background.e--animation-sweep-down .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + bottom: 100%; } + +.e--pointer-background.e--animation-shutter-out-vertical .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + bottom: 50%; + top: 50%; } +.e--pointer-background.e--animation-shutter-out-horizontal .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before { + right: 50%; + left: 50%; } +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:after, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:after { + top: 0; + left: 0; + right: 0; + bottom: 0; + background: #55595c; + z-index: -1; } + +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:before { + top: 0; + bottom: 100%; } +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:after { + top: 100%; + bottom: 0; } +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:hover:before, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:focus:before, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item.highlighted:before, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item-active:before { + bottom: 50%; } +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:hover:after, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:focus:after, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item.highlighted:after, +.e--pointer-background.e--animation-shutter-in-vertical .elementor-item-active:after { + top: 50%; } + +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:before { + right: 0; + left: 100%; } +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:after { + right: 100%; + left: 0; } +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:hover:before, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:focus:before, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item.highlighted:before, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item-active:before { + left: 50%; } +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:hover:after, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:focus:after, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item.highlighted:after, +.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item-active:after { + right: 50%; } + +.e--pointer-background.e--animation-none, +.e--pointer-background.e--animation-none .elementor-item, +.e--pointer-background.e--animation-none:before, .e--pointer-background.e--animation-none:after, +.e--pointer-background.e--animation-none:hover, .e--pointer-background.e--animation-none:focus, +.e--pointer-background.e--animation-none .elementor-item:before, +.e--pointer-background.e--animation-none .elementor-item:after, +.e--pointer-background.e--animation-none .elementor-item:hover, +.e--pointer-background.e--animation-none .elementor-item:focus { + transition-duration: 0s; } + +.e--pointer-text.e--animation-skew .elementor-item:hover, +.e--pointer-text.e--animation-skew .elementor-item:focus { + transform: skew(-8deg); } +.e--pointer-text.e--animation-grow .elementor-item:hover, +.e--pointer-text.e--animation-grow .elementor-item:focus { + transform: scale(1.2); } +.e--pointer-text.e--animation-shrink .elementor-item:hover, +.e--pointer-text.e--animation-shrink .elementor-item:focus { + transform: scale(0.8); } +.e--pointer-text.e--animation-float .elementor-item:hover, +.e--pointer-text.e--animation-float .elementor-item:focus { + transform: translateY(-8px); } +.e--pointer-text.e--animation-sink .elementor-item:hover, +.e--pointer-text.e--animation-sink .elementor-item:focus { + transform: translateY(8px); } +.e--pointer-text.e--animation-rotate .elementor-item:hover, +.e--pointer-text.e--animation-rotate .elementor-item:focus { + transform: rotate(6deg); } + +.e--pointer-text.e--animation-none, +.e--pointer-text.e--animation-none .elementor-item { + transition-duration: 0s; } + .e--pointer-text.e--animation-none:before, .e--pointer-text.e--animation-none:after, + .e--pointer-text.e--animation-none:hover, .e--pointer-text.e--animation-none:focus, + .e--pointer-text.e--animation-none .elementor-item:before, + .e--pointer-text.e--animation-none .elementor-item:after, + .e--pointer-text.e--animation-none .elementor-item:hover, + .e--pointer-text.e--animation-none .elementor-item:focus { + transition-duration: 0s; } + +.elementor-nav--main .elementor-nav a { + transition: 0.4s; } + .elementor-nav--main .elementor-nav a, + .elementor-nav--main .elementor-nav a:hover, + .elementor-nav--main .elementor-nav a:focus, + .elementor-nav--main .elementor-nav a.highlighted { + padding: 13px 20px; } + .elementor-nav--main .elementor-nav a.current { + background: #373a3c; + color: #fff; } + .elementor-nav--main .elementor-nav a.disabled { + background: #55595c; + color: #a1a6a9; } + +.elementor-nav--main .elementor-nav ul { + position: absolute; + width: 12em; + border-width: 0; + border-style: solid; + padding: 0; } + +.elementor-nav--main .elementor-nav span.scroll-up, +.elementor-nav--main .elementor-nav span.scroll-down { + position: absolute; + display: none; + visibility: hidden; + overflow: hidden; + background: #fff; + height: 20px; } + +.elementor-nav--main .elementor-nav span.scroll-up-arrow, +.elementor-nav--main .elementor-nav span.scroll-down-arrow { + position: absolute; + top: -2px; + left: 50%; + margin-left: -8px; + width: 0; + height: 0; + overflow: hidden; + border-width: 8px; + border-style: dashed dashed solid dashed; + border-color: transparent transparent #494c4f transparent; } +.elementor-nav--main .elementor-nav span.scroll-down-arrow { + top: 6px; + border-style: solid dashed dashed dashed; + border-color: #494c4f transparent transparent transparent; } + +.elementor-nav--main.elementor-nav--layout-vertical .sub-arrow:before, +.elementor-nav--main .elementor-nav--dropdown .sub-arrow:before { + display: block; + transform: rotate(-90deg); } + +.elementor-nav--layout-horizontal { + display: flex; } + .elementor-nav--layout-horizontal .elementor-nav { + display: flex; + flex-wrap: wrap; } + .elementor-nav--layout-horizontal .elementor-nav a { + white-space: nowrap; } + +.elementor-nav--align-right .elementor-nav { + margin-left: auto; + justify-content: flex-end; } +.elementor-nav--align-right .elementor-nav--layout-vertical > ul > li > a { + justify-content: flex-end; } +.elementor-nav--align-left .elementor-nav { + margin-right: auto; + justify-content: flex-start; } +.elementor-nav--align-left .elementor-nav--layout-vertical > ul > li > a { + justify-content: flex-start; } +.elementor-nav--align-center .elementor-nav { + margin-left: auto; + margin-right: auto; } +.elementor-nav--align-center .elementor-nav > li:first-child { + margin-left: auto; } +.elementor-nav--align-center .elementor-nav > li:last-child { + margin-right: auto; } +.elementor-nav--align-center .elementor-nav--layout-vertical > ul > li > a { + justify-content: center; } +.elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav { + width: 100%; } + .elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav > li { + flex-grow: 1; } + .elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav > li > a { + justify-content: center; } + +.elementor-widget:not(.elementor-nav--toggle) .elementor-menu-toggle { + display: none; } + +.elementor-widget-nav-menu .elementor-widget-container { + display: flex; + flex-direction: column; } + +.elementor-nav { + position: relative; + z-index: 2; } + .elementor-nav:after { + content: "\00a0"; + display: block; + height: 0; + font: 0px/0 serif; + clear: both; + visibility: hidden; + overflow: hidden; } + .elementor-nav, + .elementor-nav ul, + .elementor-nav li { + display: block; + list-style: none; + margin: 0; + padding: 0; + line-height: normal; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + .elementor-nav ul { + display: none; } + .elementor-nav ul ul a, + .elementor-nav ul ul a:hover, + .elementor-nav ul ul a:focus, + .elementor-nav ul ul a:active { + border-left: 16px solid transparent; } + .elementor-nav ul ul ul a, + .elementor-nav ul ul ul a:hover, + .elementor-nav ul ul ul a:focus, + .elementor-nav ul ul ul a:active { + border-left: 24px solid transparent; } + .elementor-nav ul ul ul ul a, + .elementor-nav ul ul ul ul a:hover, + .elementor-nav ul ul ul ul a:focus, + .elementor-nav ul ul ul ul a:active { + border-left: 32px solid transparent; } + .elementor-nav ul ul ul ul ul a, + .elementor-nav ul ul ul ul ul a:hover, + .elementor-nav ul ul ul ul ul a:focus, + .elementor-nav ul ul ul ul ul a:active { + border-left: 40px solid transparent; } + .elementor-nav li, + .elementor-nav a { + position: relative; } + .elementor-nav li { + border-width: 0; } + .elementor-nav a { + display: flex; + align-items: center; } + .elementor-nav a, .elementor-nav a:hover, .elementor-nav a:focus { + padding: 10px 20px; + line-height: 20px; } + .elementor-nav a.current { + background: #373a3c; + color: #fff; } + .elementor-nav a.disabled { + cursor: not-allowed; + color: #a1a6a9; } + .elementor-nav .sub-arrow { + font-size: 16px; + line-height: 1; + padding: 10px 0 10px 10px; + margin-top: -10px; + margin-bottom: -10px; } + .elementor-nav .sub-arrow.fa-chevron-down { + font-size: 10px; } + .elementor-nav .sub-arrow.fa-plus:before { + font-family: "Open Sans", sans-serif; + content: '+'; } + +.elementor-nav--dropdown .menu-item a:not(#e):hover, +.elementor-nav--dropdown .menu-item a:not(#e):focus, +.elementor-nav--dropdown .menu-item a.highlighted:not(#e), +.elementor-nav--dropdown .menu-item a.elementor-item-active:not(#e) { + color: #fff; } +.elementor-nav--dropdown .menu-item [href]:hover, +.elementor-nav--dropdown .menu-item [href]:focus, +.elementor-nav--dropdown .menu-item .highlighted, +.elementor-nav--dropdown .menu-item .elementor-item-active { + background-color: #55595c; } + +.elementor-menu-toggle { + display: flex; + align-items: center; + justify-content: center; + font-size: 22px; + padding: 0.25em; + cursor: pointer; + border: 0 solid; + border-radius: 3px; + background-color: rgba(0, 0, 0, 0.05); + color: #494c4f; } + .elementor-menu-toggle i { + position: relative; + margin: .44em .05em; + width: .9em; + height: .12em; + background: currentColor; + transition: background 0s .16s; } + .elementor-menu-toggle i:before, + .elementor-menu-toggle i:after { + content: ''; + display: block; + position: absolute; + width: .9em; + height: .12em; + background: currentColor; } + .elementor-menu-toggle i:before { + top: -.24em; + transition: top .16s .16s, transform .16s; } + .elementor-menu-toggle i:after { + bottom: -.24em; + transition: bottom .16s .16s, transform .16s; } + .elementor-menu-toggle.elementor-active i { + background: transparent; } + .elementor-menu-toggle.elementor-active i:before { + top: 0; + transform: rotate(45deg); + transition-delay: 0s, .16s; } + .elementor-menu-toggle.elementor-active i:after { + bottom: 0; + transform: rotate(-45deg); + transition-delay: 0s, .16s; } + +.elementor-nav--dropdown { + background-color: #fff; + font-size: 13px; } + .elementor-nav--dropdown.elementor-nav__container { + margin-top: 10px; + transition: max-height 0.3s, transform 0.3s; + transform-origin: top; + overflow: auto; } + .elementor-nav--dropdown.elementor-nav__container ul ul { + padding-left: 8px; } + .elementor-nav--dropdown.elementor-nav__container .elementor-sub-item { + font-size: 0.85em; } + .elementor-nav--dropdown a { + color: #494c4f; + justify-content: space-between; } + .elementor-nav--dropdown a.current { + background: #373a3c; + color: #fff; } + .elementor-nav--dropdown a.disabled { + color: #b3b3b3; } +ul.elementor-nav--dropdown a, ul.elementor-nav--dropdown a:hover, ul.elementor-nav--dropdown a:focus { + text-shadow: none; } + +.elementor-nav--text-align-center .elementor-nav--dropdown .elementor-nav a { + justify-content: center; } + +.elementor-nav--toggle .elementor-menu-toggle:not(.elementor-active) + .elementor-nav__container { + transform: scaleY(0); + max-height: 0; } +.elementor-nav--toggle .elementor-menu-toggle.elementor-active + .elementor-nav__container { + transform: scaleY(1); + max-height: 100vh; } + +.elementor-nav--stretch .elementor-nav__container.elementor-nav--dropdown { + position: absolute; + z-index: 9997; } + +@media (min-width: 768px) { + .elementor-nav--dropdown-mobile .elementor-nav--dropdown, .elementor-nav--dropdown-mobile .elementor-menu-toggle { + display: none; } } +@media (min-width: 1025px) { + .elementor-nav--dropdown-tablet .elementor-nav--dropdown, .elementor-nav--dropdown-tablet .elementor-menu-toggle { + display: none; } } +@media (max-width: 1024px) { + .elementor-nav--dropdown-tablet .elementor-nav--main { + display: none; } } +@media (max-width: 767px) { + .elementor-nav--dropdown-mobile .elementor-nav--main { + display: none; } } + +.elementor-widget-currency-selector:not(.elementor-nav--active) .current-menu-item, +.elementor-widget-language-selector:not(.elementor-nav--active) .current-menu-item { + display: none; } +.elementor-currencies.elementor-nav--layout-horizontal .elementor-nav ul, +.elementor-langs.elementor-nav--layout-horizontal .elementor-nav ul { + min-width: 100% !important; } +.menu-item-type-account a > span:not(:first-child), +.menu-item-type-currency a > span:not(:first-child), +.menu-item-type-lang a > span:not(:first-child) { + padding-left: 10px; } +.elementor-nav--dropdown .menu-item-type-account a, +.elementor-nav--dropdown .menu-item-type-currency a, +.elementor-nav--dropdown .menu-item-type-lang a { + justify-content: normal; } +.elementor-sign-in .elementor-item > i { + transition: color 0.2s; } + +.elementor-widget-shopping-cart:not(.elementor-cart--show-view-cart-yes) .elementor-button--view-cart, +.elementor-widget-shopping-cart:not(.elementor-cart--show-shipping-yes) .elementor-cart__summary :not(div), +.elementor-widget-shopping-cart:not(.elementor-cart--show-subtotal-yes) .elementor-cart__toggle .elementor-button-text, +.elementor-widget-shopping-cart:not(.elementor-cart--show-remove-button-yes) .elementor-cart__product-remove { + display: none; } + +.elementor-cart__toggle a.elementor-button:not(#e) { + color: #818a91; } +.elementor-cart__toggle .elementor-button { + background: transparent; + border-radius: 0; + border: 1px solid; + border-color: inherit; + display: inline-flex; + align-items: center; } +.elementor-cart--align-icon-right .elementor-cart__toggle .elementor-button { + flex-direction: row-reverse; } +.elementor-cart--align-icon-left .elementor-cart__toggle .elementor-button-text { + margin-left: 0.5em; } +.elementor-cart--align-icon-right .elementor-cart__toggle .elementor-button-text { + margin-right: 0.5em; } +.elementor-cart__toggle .elementor-button-icon { + position: relative; + transition: color 0.1s; } + +.elementor-cart--items-indicator-bubble .elementor-cart__toggle .elementor-button-icon[data-counter]:before { + content: attr(data-counter); + display: block; + position: absolute; + min-width: 1.6em; + height: 1.6em; + line-height: 1.5em; + top: -0.7em; + right: -0.7em; + border-radius: 100%; + color: #fff; + background-color: #d9534f; + text-align: center; + font-size: 10px; } +.elementor-cart--empty-indicator-hide .elementor-cart__toggle .elementor-button-icon[data-counter='0']:before { + content: none; + display: none; } + +.elementor-cart__container { + transform: scale(1); + overflow: hidden; + position: fixed; + z-index: 9998; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background-color: rgba(0, 0, 0, 0.25); + transition: background-color 0.4s, transform 0s; } + .elementor-cart__container .elementor-cart__main { + transition: 0.3s; + position: fixed; + top: 0; + width: 350px; + max-width: 100%; + right: 0; + bottom: 0; + padding: 0 30px; + background-color: white; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.2); + transform: translateX(0); } + .elementor-cart__container:not(.elementor-cart--shown) { + background-color: transparent; + transform: scale(0); + transition: background-color 0.4s, transform 0s 0.4s; } + .elementor-cart__container:not(.elementor-cart--shown) .elementor-cart__main { + overflow: hidden; + opacity: 0; + transform: translateX(100%); } + .elementor-cart__container:not(.elementor-cart--shown) .dialog-lightbox-close-button { + display: none; } + +.elementor-cart__main { + display: flex; + flex-direction: column; + align-items: stretch; + font-size: 14px; } + +.elementor-cart__title { + min-height: 65px; + font-size: 20px; + line-height: 60px; } +.elementor-cart__close-button { + position: absolute; + font-size: 25px; + width: 1em; + height: 1em; + margin: 20px 0; + color: #818a91; + align-self: flex-end; + transition: color 0.5s; + cursor: pointer; } + +.elementor-cart__products { + overflow: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + scrollbar-width: thin; } + .elementor-cart__products::-webkit-scrollbar { + width: 14px; } + .elementor-cart__products::-webkit-scrollbar-track { + background: transparent; } + .elementor-cart__products::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.2); + border-radius: 14px; + border: 3px solid transparent; + background-clip: content-box; } + .elementor-cart__products::-webkit-scrollbar-thumb:hover { + background-color: rgba(0, 0, 0, 0.4); } +.elementor-cart__product { + display: grid; + grid-template-columns: 25% auto 50px; + grid-template-rows: 75% auto; } + .elementor-cart__product-image { + grid-row-start: 1; + grid-row-end: 3; + width: 100%; } + .elementor-cart__product-image img, .elementor-cart__product-image a { + display: block; } + .elementor-cart__product-name { + grid-column-start: 2; + grid-column-end: 4; + margin: 0; } + .elementor-cart__product-price { + align-self: end; + color: #D4D4D4; } + .elementor-cart__product-price del { + font-weight: 300; } + .elementor-cart__product-name, .elementor-cart__product-price { + font-size: 14px; + padding-left: 20px; } + .elementor-cart__product-remove { + align-self: end; + justify-self: end; + color: #818a91; + width: 22px; + height: 22px; + font-size: 19px; + border-radius: 20px; + border: 1px solid currentColor; + text-align: center; + overflow: hidden; + position: relative; + transition: color 0.5s; } + .elementor-cart__product-remove > a { + display: block; + z-index: 2; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + opacity: 0; + position: absolute; } + +.elementor-cart__product:not(:last-of-type), .elementor-cart__products, .elementor-cart__summary { + border-bottom: solid 1px #D4D4D4; } +.elementor-cart__product:not(:first-of-type), .elementor-cart__summary, .elementor-cart__footer-buttons { + padding: 20px 0; } + +.elementor-cart__product, .elementor-cart__summary { + padding-bottom: 20px; } +.elementor-cart__summary-label { + clear: both; + float: left; } +.elementor-cart__summary-value { + float: right; } + +.elementor-cart__footer-buttons { + font-size: 20px; + text-align: center; + display: grid; + grid-column-gap: 10px; + grid-row-gap: 10px; } + .elementor-cart__footer-buttons .elementor-button { + border-radius: 0; } +.elementor-cart--buttons-inline .elementor-cart__footer-buttons { + grid-template-columns: 1fr 1fr; } +.elementor-cart--buttons-stacked .elementor-cart__footer-buttons { + grid-template-columns: 1fr; } + +.elementor-widget-container > .product-prices, +.elementor-widget-container > .product-variants, +.elementor-widget-container > .product-customization, +.elementor-widget-container > .images-container { + margin: 0; + padding: 0; } + +.ce-product-name { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; } +.ce-product-prices--layout-inline .ce-product-prices { + display: flex; + flex-wrap: wrap; + align-items: center; } + +.ce-product-price-regular { + font-weight: 400; + text-decoration: line-through; } +.ce-product-price { + display: inline-flex; + align-items: center; } +.ce-product-price-unit { + font-size: 0.85em; } + +.ce-product-features { + width: 100%; + max-width: 100%; } + +.elementor-skin-carousel img.elementor-carousel-image { + height: auto; } + +.elementor-skin-carousel.elementor-pagination-position-inside .swiper-pagination-fraction, +.elementor-skin-carousel.elementor-pagination-position-inside .swiper-container-horizontal > .swiper-pagination-bullets, .elementor-skin-coverflow.elementor-pagination-position-inside .swiper-pagination-fraction, +.elementor-skin-coverflow.elementor-pagination-position-inside .swiper-container-horizontal > .swiper-pagination-bullets { + bottom: 5px; } + +.elementor-skin-carousel.elementor-pagination-position-outside .swiper-container, .elementor-skin-coverflow.elementor-pagination-position-outside .swiper-container { + padding-bottom: 30px; } + +.elementor-skin-carousel.elementor-pagination-position-outside .swiper-pagination-fraction, +.elementor-skin-carousel.elementor-pagination-position-outside .swiper-container-horizontal > .swiper-pagination-bullets, .elementor-skin-coverflow.elementor-pagination-position-outside .swiper-pagination-fraction, +.elementor-skin-coverflow.elementor-pagination-position-outside .swiper-container-horizontal > .swiper-pagination-bullets { + bottom: 0; } + +.elementor-skin-carousel.elementor-pagination-position-outside .elementor-swiper-button, .elementor-skin-coverflow.elementor-pagination-position-outside .elementor-swiper-button { + top: calc(50% - 30px / 2); } + +.elementor-skin-slideshow .elementor-main-swiper { + height: auto; + position: relative; } +.elementor-skin-slideshow .swiper-zoom-container { + cursor: crosshair; } +.elementor-skin-slideshow .ce-swiper-dragging img { + cursor: grabbing; } + +.elementor-skin-slideshow .elementor-thumbnails-swiper .elementor-custom-embed-play i { + font-size: 50px; } + +.elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide { + cursor: pointer; } + .elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; } + .elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide.swiper-slide-active:after { + pointer-events: none; } + .elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide:not(.swiper-slide-active):after { + background-color: rgba(0, 0, 0, 0.3); } + +img.elementor-carousel-image { + width: 100%; + height: 100%; + object-fit: cover; + position: relative; } + +.elementor-carousel-image-overlay { + position: absolute; + pointer-events: none; + top: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + width: 100%; + height: 100%; + padding: 20px; + color: #fff; + background-color: rgba(129, 138, 145, 0.8); + transition: transform .5s, opacity .5s; } + .elementor-carousel-image-overlay i { + font-size: 21px; } + +.swiper-pagination-bullets { + color: #fff; + cursor: default; } + +.swiper-slide { + border-style: solid; + border-width: 0; + transition-property: border, background, transform; + overflow: hidden; } + .swiper-slide:not(:hover) .e-overlay-animation-fade { + opacity: 0; } + .swiper-slide:not(:hover) .e-overlay-animation-slide-up { + transform: translateY(100%); } + .swiper-slide:not(:hover) .e-overlay-animation-slide-down { + transform: translateY(-100%); } + .swiper-slide:not(:hover) .e-overlay-animation-slide-right { + transform: translateX(-100%); } + .swiper-slide:not(:hover) .e-overlay-animation-slide-left { + transform: translateX(100%); } + .swiper-slide:not(:hover) .e-overlay-animation-zoom-in { + transform: scale(0.5); + opacity: 0; } + .swiper-slide a { + display: inline; } + +.elementor-swiper { + position: relative; } + +.elementor-main-swiper { + position: static; } + .elementor-main-swiper .elementor-swiper-button-prev { + left: 10px; } + .elementor-main-swiper .elementor-swiper-button-next { + right: 10px; } + +.elementor-widget-product-images.elementor-position-right .elementor-widget-container, +.elementor-widget-product-images.elementor-position-left .elementor-widget-container { + display: flex; } +.elementor-widget-product-images.elementor-position-left .elementor-widget-container { + flex-direction: row-reverse; } +.elementor-widget-product-images.elementor-position-right .elementor-thumbnails-swiper, +.elementor-widget-product-images.elementor-position-left .elementor-thumbnails-swiper { + height: 100%; } + +.ce-product-description-short { + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; } + +.ce-product-badges { + display: inline-flex; } +.ce-product-badges--stacked .ce-product-badges { + flex-direction: column; } +.ce-product-badge { + padding: 4px 5px 4px 5px; + color: #fff; + text-align: center; + background: #2fb5d2; } +.ce-product-badge-sale { + background: #f39d72; } + +.ce-product-meta, +.ce-product-meta--layout-table .ce-product-meta__detail { + display: flex; } +.ce-product-meta--layout-inline .ce-product-meta { + flex-wrap: wrap } +.ce-product-meta--layout-stacked .ce-product-meta, +.ce-product-meta--layout-table .ce-product-meta { + flex-direction: column; } +.ce-product-meta .ce-product-meta__detail { + position: relative; } +.ce-product-meta .ce-product-meta__detail:after { + position: absolute; + border-width: 0; + bottom: 0; + left: 0; + width: 100%; } +.ce-product-meta--layout-inline .ce-product-meta__detail:after { + top: 50%; + left: auto; + right: 0; + width: auto; + height: 100%; + transform: translateY(-50%); } +.ce-product-meta--layout-table .ce-product-meta__label { + min-width: 108px; } +.ce-product-meta .ce-product-meta__label { + font-weight: 700; } + +.ce-product-stock .ce-product-stock__availability { + display: inline-flex; + align-items: center; } +.ce-product-stock .ce-product-stock__availability-label, +.ce-product-stock .ce-product-stock__min-quantity { + line-height: 1; } + +.ce-product-quantity--view-default .ce-product-quantity__btn { + display: none; } +.ce-product-quantity--view-default input[type=number] { + background: #fff; + -moz-appearance: textfield; } +.ce-product-quantity--view-default input[type=number]:focus, +.ce-product-quantity--view-default input[type=number]:hover { + -moz-appearance: initial; } +.ce-product-quantity--view-default input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: inner-spin-button; } +.elementor-widget-product-quantity:not(.ce-product-quantity--view-default) input[type=number] { + appearance: none; + -webkit-appearance: none; + -moz-appearance: textfield; } +.elementor-widget-product-quantity.elementor-align-justify .ce-product-quantity, +.elementor-widget-product-quantity.elementor-align-justify input[type=number] { + width: 100%; } +@media (max-width: 1024px) { + .elementor-widget-product-quantity.elementor-tablet-align-justify .ce-product-quantity, + .elementor-widget-product-quantity.elementor-tablet-align-justify input[type=number] { + width: 100%; } + .elementor-widget-product-quantity[class*='tablet-align']:not(.elementor-tablet-align-justify) .ce-product-quantity { + width: auto; } } +@media (max-width: 767px) { + .elementor-widget-product-quantity.elementor-mobile-align-justify .ce-product-quantity, + .elementor-widget-product-quantity.elementor-mobile-align-justify input[type=number] { + width: 100%; } + .elementor-widget-product-quantity[class*='mobile-align']:not(.elementor-mobile-align-justify) .ce-product-quantity { + width: auto; } } +.ce-product-quantity { + position: relative; + display: inline-block; } +.ce-product-quantity input[type=number] { + width: 5em; + text-align: center; + transition: all .5s; } +.ce-product-quantity .ce-product-quantity__btn { + width: 1em; + height: 1em; + line-height: 1; + font-size: 15px; + overflow: hidden; + cursor: pointer; + z-index: 1; + transition: all .5s; } +.ce-product-quantity--view-stacked input[type=number] { + background: #fff; + padding-right: 1.5em; } +.ce-product-quantity--view-stacked .ce-product-quantity__btn { + position: absolute; + right: 0; + width: 1.5em; + height: auto; + min-height: 3px; + border: solid 0; + display: flex; + align-items: center; + justify-content: center; } +.ce-product-quantity--view-stacked .ce-product-quantity__btn:hover { + background-color: rgba(0, 0, 0, 0.18); } +.ce-product-quantity--view-stacked .ce-product-quantity__plus { + margin: 1px 1px 0; + top: 0; + bottom: 50%; } +.ce-product-quantity--view-stacked .ce-product-quantity__minus { + margin: 0 1px 1px; + top: 50%; + bottom: 0; } +.ce-product-quantity--view-inline .ce-product-quantity { + display: inline-flex; + flex-wrap: nowrap; } +.ce-product-quantity--view-inline input[type=number] { + margin: 0 5px; + border-width: 0; + width: 42px; } +.ce-product-quantity--view-inline .ce-product-quantity__btn { + flex-shrink: 0; + background: #818a91; + color: #fff; + text-align: center; + box-sizing: content-box; } + +.ce-product-variants { + overflow: hidden; } +.ce-product-variants input[type=radio] { + display: none; } +.ce-product-variants label { + margin: 0; + padding: 0; } +.ce-product-variants--layout-inline .ce-product-variants, +.ce-product-variants--layout-inline .ce-product-variants__item, +.ce-product-variants--layout-table .ce-product-variants__item, +.ce-product-variants__patterns, +.ce-product-variants__count, +.ce-product-variants__options, +.ce-product-variants__radio-wrapper { + display: flex; } +.ce-product-variants--layout-inline:not(.ce-product-variants--label-inline) .ce-product-variants__item { + flex-direction: column; } +.ce-product-variants__patterns, +.ce-product-variants__options { + flex-wrap: wrap; } +.ce-product-variants__pattern { + background-clip: content-box; + cursor: pointer; } +.ce-product-variants__texture { + background-size: contain; } +.ce-product-variants__option { + text-align: center; + cursor: pointer; } +.ce-product-variants__count { + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + cursor: default; } + +.ce-product-rating, +.ce-product-rating--layout-inline .elementor-widget-container { + display: inline-flex; + flex-wrap: wrap; + align-items: center; } +.ce-product-rating--layout-stacked .elementor-widget-container { + flex-direction: column; } + +.ce-attachment .elementor-icon-box-title { + display: inline-block; } + +.elementor[data-elementor-type$="quick-view"] .elementor-section-wrap { + text-align: left; } +#ce-product-quick-view { + display: flex; + padding: 0; } +#ce-product-quick-view .dialog-widget-content { + position: static !important; + overflow: visible; + margin: 0; + border-radius: 0; + max-width: 100%; + max-height: 100vh; } +#ce-product-quick-view .dialog-message { + position: relative; + max-height: 100vh; + overflow: auto; + -webkit-overflow-scrolling: touch; + background: #fff; } +#ce-product-quick-view .dialog-close-button, +#ce-product-quick-view .dialog-buttons-wrapper { + display: none; } +#ce-product-quick-view a[data-elementor-lightbox-slideshow] { + pointer-events: none; } + +.elementor-motion-effects-element, .elementor-motion-effects-layer { + transition-property: transform, opacity; + transition-timing-function: cubic-bezier(0, 0.33, 0.07, 1.03); + transition-duration: 1s; } +.elementor-motion-effects-container { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; } +.elementor-motion-effects-layer { + position: absolute; + top: 0; + left: 0; + background-repeat: no-repeat; + background-size: cover; } +.elementor-motion-effects-perspective { + perspective: 1200px; } + +.e-transform-hover .elementor-widget-container, +.e-transform .elementor-widget-container { + transform: perspective(var(--e-transform-perspective, 0)) + rotateZ(var(--e-transform-rotateZ, 0)) rotateX(var(--e-transform-rotateX, 0)) rotateY(var(--e-transform-rotateY, 0)) + translateX(var(--e-transform-translateX, 0)) translateY(var(--e-transform-translateY, 0)) + scaleX(calc( var(--e-transform-flipX, 1) * var(--e-transform-scaleX, var(--e-transform-scale, 1)) )) + scaleY(calc( var(--e-transform-flipY, 1) * var(--e-transform-scaleY, var(--e-transform-scale, 1)) )) + skewX(var(--e-transform-skewX, 0)) skewY(var(--e-transform-skewY, 0)); + transform-origin: var(--e-transform-origin-y, center) var(--e-transform-origin-x, center); } + +.ce-disabled { + pointer-events: none; + opacity: .35; } +/* PS 1.7.8 Compatibility fix */ +.elementor-button[data-button-action="add-to-cart"] * { + pointer-events: none; } +/* fix for TinyMCE style */ +.elementor-text-editor p, +.elementor-tab-content p, +.elementor-image-hotspot-description p, +.ce-product-description > p, +.ce-product-description-short > p { + color: inherit !important; + font: inherit !important; + line-height: inherit !important; + letter-spacing: inherit !important; } +/* fix for carousels */ +.slick-slider .slick-slide-inner > * { + width: 100% !important; + padding: 0 !important; } +.elementor-image-carousel-wrapper.featured-products { + float: none; } +/* fix: blank white page on editor */ +.elementor-html > body { + display: block !important; } +/* background-attachment: fixed; compatibility fix for iOS */ +@supports (-webkit-touch-callout: none) { + .elementor-element { + background-attachment: scroll !important; } } +/* fix for Classic theme */ +.page-content.page-cms .elementor { + text-align: left; } \ No newline at end of file diff --git a/modules/creativeelements/views/css/frontend.min.css b/modules/creativeelements/views/css/frontend.min.css new file mode 100644 index 00000000..1a3e7320 --- /dev/null +++ b/modules/creativeelements/views/css/frontend.min.css @@ -0,0 +1 @@ +.dialog-widget-content{background-color:#fff;position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5;box-sizing:border-box}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{font-size:15px;color:#495157;padding:30px 0 10px;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 30px 30px;min-height:50px}.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-header,.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button{font-family:Roboto;width:50%;border:none;background:0 0;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:hover{background-color:#f4f6f7}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>.dialog-button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:15px;right:15px;font-size:15px;line-height:1}.dialog-close-button:not(:hover){opacity:.4}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}.dialog-confirm-widget .dialog-button:first-child{border-right:1px solid #e6e9ec}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-aspect-ratio-916 .elementor-fit-aspect-ratio{padding-bottom:177.8%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0;background-color:#000}.elementor-fit-aspect-ratio video{width:100%}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-header{padding:0;background-color:#fff;box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding-top:25px}.elementor-templates-modal .dialog-content{height:100%}.elementor-templates-modal .dialog-loading{display:none}.elementor-templates-modal__header{display:flex;align-items:center;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{line-height:1;text-transform:uppercase;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:left;padding-left:15px}.elementor-templates-modal__header__logo-area>*{display:flex;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:linear-gradient(-135deg,#f2295b,#434363);border-radius:2px;margin-right:10px}.elementor-templates-modal__header__logo__title{padding-top:2px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:flex;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:flex;align-items:center;justify-content:center;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close--normal{width:45px;border-left:1px solid #e6e9ec}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px 10px 10px 20px;margin-right:10px;color:#fff;background-color:#a4afb7;font-size:11px;font-weight:400;line-height:1;text-transform:uppercase;border-radius:2px;cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-left:10px;margin-left:15px;border-left:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:#fff}.elementor-hidden{display:none}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:'';display:block;clear:both;width:0;height:0}.elementor{-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual}.elementor *,.elementor :after,.elementor :before{box-sizing:border-box}.elementor a{box-shadow:none;text-decoration:none}.elementor hr{margin:0;background-color:transparent}.elementor img{height:auto;max-width:100%;border:none;border-radius:0;box-shadow:none}.elementor .elementor-widget:not(.elementor-widget-text-editor) figure{margin:0}.elementor embed,.elementor iframe,.elementor object,.elementor video{max-width:100%;width:100%;margin:0;line-height:1;border:none}.elementor .elementor-custom-embed{line-height:0}.elementor .elementor-background,.elementor .elementor-background-holder,.elementor .elementor-background-video-container{height:100%;width:100%;top:0;left:0;position:absolute;overflow:hidden;z-index:0}.elementor .elementor-background-video-container{transition:opacity 1s;pointer-events:none}.elementor .elementor-background-video-container.elementor-loading{opacity:0}.elementor .elementor-background-video-embed{max-width:none}.elementor .elementor-background-video-embed,.elementor .elementor-background-video-hosted{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%)}.elementor .elementor-background-video{position:absolute;max-width:none;top:50%;left:50%;transform:translateY(-50%) translateX(-50%)}.elementor .elementor-html5-video{object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor-widget-wrap>.elementor-element.elementor-absolute{position:absolute}.elementor-widget-wrap>.elementor-element.elementor-fixed{position:fixed}.elementor-widget-wrap .elementor-element.elementor-widget__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget__width-calc,.elementor-widget-wrap .elementor-element.elementor-widget__width-initial{max-width:100%}.elementor-element.elementor-absolute,.elementor-element.elementor-fixed{z-index:1}.elementor-invisible{visibility:hidden}.elementor-align-center{text-align:center}.elementor-align-center .elementor-button{width:auto}.elementor-align-right{text-align:right}.elementor-align-right .elementor-button{width:auto}.elementor-align-left{text-align:left}.elementor-align-left .elementor-button{width:auto}.elementor-align-justify .elementor-button{width:100%}.elementor-custom-embed-play{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;opacity:.8;text-shadow:1px 0 6px rgba(0,0,0,.3);transition:.5s}.elementor-custom-embed-play.elementor-playing i{font-family:FontAwesome;animation:2s linear infinite fa-spin}.elementor-custom-embed-play.elementor-playing i:before{content:"\f1ce"}.elementor-swiper-button{position:absolute;display:inline-flex;z-index:1;cursor:pointer;font-size:32px;color:rgba(238,238,238,.9);top:50%;transform:translateY(-50%)}.elementor-swiper-button.swiper-button-disabled{opacity:.3}.elementor-tag{display:inline-flex}@media (max-width:1024px){.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-calc,.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-initial{max-width:100%}.elementor-tablet-align-center{text-align:center}.elementor-tablet-align-center .elementor-button{width:auto}.elementor-tablet-align-right{text-align:right}.elementor-tablet-align-right .elementor-button{width:auto}.elementor-tablet-align-left{text-align:left}.elementor-tablet-align-left .elementor-button{width:auto}.elementor-tablet-align-justify .elementor-button{width:100%}}@media (max-width:767px){.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-auto,.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-calc,.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-initial{max-width:100%}.elementor-mobile-align-center{text-align:center}.elementor-mobile-align-center .elementor-button{width:auto}.elementor-mobile-align-right{text-align:right}.elementor-mobile-align-right .elementor-button{width:auto}.elementor-mobile-align-left{text-align:left}.elementor-mobile-align-left .elementor-button{width:auto}.elementor-mobile-align-justify .elementor-button{width:100%}}.elementor-section{position:relative}.elementor-section .elementor-container{display:flex;margin-right:auto;margin-left:auto;position:relative}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-section.elementor-section-stretched{position:relative;width:100%}.elementor-section.elementor-section-items-top>.elementor-container{align-items:flex-start}.elementor-section.elementor-section-items-middle>.elementor-container{align-items:center}.elementor-section.elementor-section-items-bottom>.elementor-container{align-items:flex-end}.elementor-section-content-top>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{align-items:flex-start}.elementor-section-content-middle>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{align-items:center}.elementor-section-content-bottom>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{align-items:flex-end}.elementor-row{width:100%;display:flex}@media (max-width:1024px){.elementor-row{flex-wrap:wrap}}.elementor-column-wrap{width:100%;position:relative;display:flex}.elementor-widget-wrap{position:relative;width:100%;flex-wrap:wrap;align-content:flex-start}.elementor-html .elementor-widget-wrap,.elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap{display:flex}.elementor-widget-wrap>.elementor-element{width:100%}.elementor-widget{position:relative}.elementor-widget:not(:last-child){margin-bottom:20px}.elementor-widget:not(:last-child).elementor-absolute,.elementor-widget:not(:last-child).elementor-widget__width-auto,.elementor-widget:not(:last-child).elementor-widget__width-calc,.elementor-widget:not(:last-child).elementor-widget__width-initial{margin-bottom:0}.elementor-column{position:relative;min-height:1px;display:flex}.elementor-column-gap-narrow>.elementor-row>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-row>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-row>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-row>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-row>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:768px){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}.elementor-column.elementor-col-10,.elementor-column[data-col="10"]{width:10%}.elementor-column.elementor-col-11,.elementor-column[data-col="11"]{width:11.111%}.elementor-column.elementor-col-12,.elementor-column[data-col="12"]{width:12.5%}.elementor-column.elementor-col-14,.elementor-column[data-col="14"]{width:14.285%}.elementor-column.elementor-col-16,.elementor-column[data-col="16"]{width:16.666%}.elementor-column.elementor-col-20,.elementor-column[data-col="20"]{width:20%}.elementor-column.elementor-col-25,.elementor-column[data-col="25"]{width:25%}.elementor-column.elementor-col-30,.elementor-column[data-col="30"]{width:30%}.elementor-column.elementor-col-33,.elementor-column[data-col="33"]{width:33.333%}.elementor-column.elementor-col-40,.elementor-column[data-col="40"]{width:40%}.elementor-column.elementor-col-50,.elementor-column[data-col="50"]{width:50%}.elementor-column.elementor-col-60,.elementor-column[data-col="60"]{width:60%}.elementor-column.elementor-col-66,.elementor-column[data-col="66"]{width:66.666%}.elementor-column.elementor-col-70,.elementor-column[data-col="70"]{width:70%}.elementor-column.elementor-col-75,.elementor-column[data-col="75"]{width:75%}.elementor-column.elementor-col-80,.elementor-column[data-col="80"]{width:80%}.elementor-column.elementor-col-83,.elementor-column[data-col="83"]{width:83.333%}.elementor-column.elementor-col-90,.elementor-column[data-col="90"]{width:90%}.elementor-column.elementor-col-100,.elementor-column[data-col="100"]{width:100%}}@media (max-width:479px){.elementor-column.elementor-xs-10{width:10%}.elementor-column.elementor-xs-11{width:11.111%}.elementor-column.elementor-xs-12{width:12.5%}.elementor-column.elementor-xs-14{width:14.285%}.elementor-column.elementor-xs-16{width:16.666%}.elementor-column.elementor-xs-20{width:20%}.elementor-column.elementor-xs-25{width:25%}.elementor-column.elementor-xs-30{width:30%}.elementor-column.elementor-xs-33{width:33.333%}.elementor-column.elementor-xs-40{width:40%}.elementor-column.elementor-xs-50{width:50%}.elementor-column.elementor-xs-60{width:60%}.elementor-column.elementor-xs-66{width:66.666%}.elementor-column.elementor-xs-70{width:70%}.elementor-column.elementor-xs-75{width:75%}.elementor-column.elementor-xs-80{width:80%}.elementor-column.elementor-xs-83{width:83.333%}.elementor-column.elementor-xs-90{width:90%}.elementor-column.elementor-xs-100{width:100%}}@media (max-width:767px){.elementor-column.elementor-sm-10{width:10%}.elementor-column.elementor-sm-11{width:11.111%}.elementor-column.elementor-sm-12{width:12.5%}.elementor-column.elementor-sm-14{width:14.285%}.elementor-column.elementor-sm-16{width:16.666%}.elementor-column.elementor-sm-20{width:20%}.elementor-column.elementor-sm-25{width:25%}.elementor-column.elementor-sm-30{width:30%}.elementor-column.elementor-sm-33{width:33.333%}.elementor-column.elementor-sm-40{width:40%}.elementor-column.elementor-sm-50{width:50%}.elementor-column.elementor-sm-60{width:60%}.elementor-column.elementor-sm-66{width:66.666%}.elementor-column.elementor-sm-70{width:70%}.elementor-column.elementor-sm-75{width:75%}.elementor-column.elementor-sm-80{width:80%}.elementor-column.elementor-sm-83{width:83.333%}.elementor-column.elementor-sm-90{width:90%}.elementor-column.elementor-sm-100{width:100%}}@media (min-width:768px) and (max-width:1024px){.elementor-column.elementor-md-10{width:10%}.elementor-column.elementor-md-11{width:11.111%}.elementor-column.elementor-md-12{width:12.5%}.elementor-column.elementor-md-14{width:14.285%}.elementor-column.elementor-md-16{width:16.666%}.elementor-column.elementor-md-20{width:20%}.elementor-column.elementor-md-25{width:25%}.elementor-column.elementor-md-30{width:30%}.elementor-column.elementor-md-33{width:33.333%}.elementor-column.elementor-md-40{width:40%}.elementor-column.elementor-md-50{width:50%}.elementor-column.elementor-md-60{width:60%}.elementor-column.elementor-md-66{width:66.666%}.elementor-column.elementor-md-70{width:70%}.elementor-column.elementor-md-75{width:75%}.elementor-column.elementor-md-80{width:80%}.elementor-column.elementor-md-83{width:83.333%}.elementor-column.elementor-md-90{width:90%}.elementor-column.elementor-md-100{width:100%}.elementor-reverse-tablet>.elementor-container>.elementor-row>:first-child{order:10}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(2){order:9}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(3){order:8}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(4){order:7}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(5){order:6}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(6){order:5}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(7){order:4}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(8){order:3}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(9){order:2}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(10){order:1}}.elementor-section-tabbed>.elementor-container,.elementor-section-tabbed>.elementor-container>.elementor-row{flex-wrap:wrap}.elementor-nav-tabs.elementor-nav--layout-horizontal{width:100%}.elementor-nav-tabs+.elementor-row>.elementor-column{min-width:100%}.elementor-nav-tabs+.elementor-row>.elementor-column:not(.elementor-active){position:absolute;top:-1000000px;visibility:hidden;pointer-events:none}.elementor-nav-tabs>.elementor-nav{overflow:hidden}.elementor-nav-tabs>.elementor-nav::-webkit-scrollbar{display:none}.elementor-section-tabbed{counter-reset:ce-tab}.elementor-section-tabbed li.menu-item-type-column{counter-increment:ce-tab}.elementor-section-tabbed .ce-tab-num::after{content:"Tab #" counter(ce-tab)}ul.elementor-icon-list-items.elementor-inline-items{display:flex;flex-wrap:wrap}ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item{word-break:break-word}.elementor-grid .elementor-grid-item{word-break:break-word;min-width:0}.elementor-grid-0 .elementor-grid{display:flex;overflow:hidden;flex-wrap:wrap}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}@media (max-width:1024px){.elementor-grid-tablet-0 .elementor-grid{display:flex;overflow:hidden;flex-wrap:wrap}.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}@media (min-width:1025px){#elementor-device-mode:after{content:'desktop'}}@media (min-width:768px) and (max-width:1024px){#elementor-device-mode:after{content:'tablet'}}@media (max-width:767px){.elementor-reverse-mobile>.elementor-container>.elementor-row>:first-child{order:10}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(2){order:9}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(3){order:8}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(4){order:7}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(5){order:6}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(6){order:5}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(7){order:4}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(8){order:3}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(9){order:2}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(10){order:1}.elementor-column{width:100%}.elementor-grid-mobile-0 .elementor-grid{display:flex;overflow:hidden;flex-wrap:wrap}.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}#elementor-device-mode:after{content:'mobile'}}.elementor-form-fields-wrapper{display:flex;flex-wrap:wrap}.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group .elementor-field-subgroup,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>.elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>input,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>textarea{flex-basis:100%;max-width:100%}.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group .elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group>input{flex-grow:1}.elementor-field-group{flex-wrap:wrap;align-items:center}.elementor-field-group.elementor-field-type-submit{align-items:flex-end}.elementor-field-group .elementor-field-textual{width:100%;max-width:100%;border:1px solid #818a91;background-color:transparent;color:#373a3c;vertical-align:middle;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;outline:0}.elementor-field-group .elementor-field-textual::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-moz-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-select-wrapper{display:flex;position:relative;width:100%}.elementor-field-group .elementor-select-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:inherit;font-size:inherit;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;flex-basis:100%;padding-right:20px}.elementor-field-group .elementor-select-wrapper:before{content:'\f0d7';font-family:FontAwesome;font-size:15px;position:absolute;top:50%;transform:translateY(-50%);right:10px;pointer-events:none}.elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before{content:''}.elementor-field-subgroup{display:flex;flex-wrap:wrap}.elementor-field-subgroup .elementor-field-option label{display:inline-block}.elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option{padding-right:10px}.elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option{flex-basis:100%}.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option input,.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option label,.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option input,.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option label,.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option input,.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option label{display:inline}.elementor-field-label{text-align:left;cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:'*';color:red;padding-left:.2em}.elementor-field-textual{line-height:1.4}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;border-radius:2px}.elementor-field-textual.elementor-size-sm{font-size:15px;min-height:40px;padding:5px 14px;border-radius:3px}.elementor-field-textual.elementor-size-md{font-size:16px;min-height:47px;padding:6px 16px;border-radius:4px}.elementor-field-textual.elementor-size-lg{font-size:18px;min-height:59px;padding:7px 20px;border-radius:5px}.elementor-field-textual.elementor-size-xl{font-size:20px;min-height:72px;padding:8px 24px;border-radius:6px}.elementor-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-button-align-stretch .elementor-field-type-submit button{flex-basis:100%}.elementor-button-align-start .elementor-field-type-submit{justify-content:flex-start}.elementor-button-align-end .elementor-field-type-submit{justify-content:flex-end}@media screen and (max-width:1024px){.elementor-tablet-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-tablet-button-align-stretch .elementor-field-type-submit button{flex-basis:100%}.elementor-tablet-button-align-start .elementor-field-type-submit{justify-content:flex-start}.elementor-tablet-button-align-end .elementor-field-type-submit{justify-content:flex-end}}@media screen and (max-width:767px){.elementor-mobile-button-align-center .elementor-field-type-submit{justify-content:center}.elementor-mobile-button-align-stretch .elementor-field-type-submit button{flex-basis:100%}.elementor-mobile-button-align-start .elementor-field-type-submit{justify-content:flex-start}.elementor-mobile-button-align-end .elementor-field-type-submit{justify-content:flex-end}}.elementor-error .elementor-field{border-color:#d9534f}.elementor-error .help-inline{color:#d9534f;font-size:.9em}.elementor-message{margin:10px 0;font-size:1em;line-height:1}.elementor-message:before{content:"\f00c";display:inline-block;font-family:fontawesome;font-weight:400;font-style:normal;vertical-align:middle;margin-right:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\f00d"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-top:0;padding-bottom:0;border:0}.elementor-form .elementor-button>span{display:flex;justify-content:center}.elementor-form .elementor-button .elementor-align-icon-right{order:2}.elementor-form .elementor-button .elementor-align-icon-left{order:0}.elementor-form .elementor-button.elementor-size-xs{min-height:33px}.elementor-form .elementor-button.elementor-size-sm{min-height:40px}.elementor-form .elementor-button.elementor-size-md{min-height:47px}.elementor-form .elementor-button.elementor-size-lg{min-height:59px}.elementor-form .elementor-button.elementor-size-xl{min-height:72px}.elementor .elementor-section-wrap,.elementor-element .elementor-widget-container{transition:opacity var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s),background var(--e-background-transition-duration, .3s),border var(--e-border-transition-duration, .3s),border-radius var(--e-border-transition-duration, .3s),box-shadow var(--e-border-transition-duration, .3s)}.e-transform-hover .elementor-widget-container{transition:transform var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s),opacity var(--e-transform-transition-duration, .4s) var(--e-transform-transition-delay, 0s),background var(--e-background-transition-duration, .3s),border var(--e-border-transition-duration, .3s),border-radius var(--e-border-transition-duration, .3s),box-shadow var(--e-border-transition-duration, .3s)}.elementor-overflow-hidden .elementor-widget-container{overflow:hidden}.elementor-element .elementor-widget-container:empty{display:none}.elementor-widget-text-path{font-size:20px;text-align:var(--alignment,left)}.elementor-widget-text-path svg{width:var(--width,500px);max-width:100%;height:auto;overflow:visible;word-spacing:var(--word-spacing,normal);transform:rotate(var(--rotate,0))}.elementor-widget-text-path svg path{vector-effect:non-scaling-stroke;fill:var(--path-fill,transparent);stroke:var(--stroke-color,transparent);stroke-width:var(--stroke-width,1px);transition:var(--stroke-transition, .3s) all}.elementor-widget-text-path svg:hover path{--path-fill:var(--path-fill-hover);--stroke-color:var(--stroke-color-hover);--stroke-width:var(--stroke-width-hover)}.elementor-widget-text-path svg text{--fill:var(--text-color);fill:var(--fill);direction:var(--direction,ltr);transition:var(--transition, .3s) all}.elementor-widget-text-path svg text:hover{--color:var(--text-color-hover, var(--text-color));--fill:var(--color);color:var(--color)}.elementor-accordion{text-align:left}.elementor-accordion .elementor-accordion-item{border:1px solid #d4d4d4}.elementor-accordion .elementor-accordion-item+.elementor-accordion-item{border-top:none}.elementor-accordion .elementor-tab-title{margin:0;padding:15px 20px;font-weight:700;line-height:1;cursor:pointer;outline:0}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right{float:right;text-align:right}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left{float:left;text-align:left}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed{display:block}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened,.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed{display:none}.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened{display:block}.elementor-accordion .elementor-tab-content{display:none;padding:15px 20px;border-top:1px solid #d4d4d4}.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:left}.elementor-alert .elementor-alert-title{display:block;font-weight:700}.elementor-alert .elementor-alert-description{font-size:13px}.elementor-alert button.elementor-alert-dismiss{position:absolute;right:10px;top:10px;padding:3px;font-size:20px;line-height:1;background:0 0;color:inherit!important;border:none;cursor:pointer}.elementor-alert.elementor-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert.elementor-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert.elementor-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert.elementor-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:767px){.elementor-accordion .elementor-tab-title{padding:12px 15px}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{width:1.2em}.elementor-accordion .elementor-tab-content{padding:7px 15px}.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}.elementor-tab-title a{color:inherit!important}.elementor-button{display:inline-block;border:none;line-height:1;background-color:#818a91;color:#fff;text-align:center;transition:.5s}a.elementor-button:not(#e),a.elementor-button:not(#e):focus,a.elementor-button:not(#e):hover,a.elementor-button:not(#e):visited{color:#fff}.elementor-button-content-wrapper{display:flex;gap:5px;justify-content:center;align-items:baseline}.elementor-button-icon{flex-grow:0;order:5}.elementor-button-text{flex-grow:1;order:10;display:inline-block}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;border-radius:2px}.elementor-button.elementor-size-sm{font-size:15px;padding:12px 24px;border-radius:3px}.elementor-button.elementor-size-md{font-size:16px;padding:15px 30px;border-radius:4px}.elementor-button.elementor-size-lg{font-size:18px;padding:20px 40px;border-radius:5px}.elementor-button.elementor-size-xl{font-size:20px;padding:25px 50px;border-radius:6px}.elementor-button .elementor-align-icon-right{order:15}.elementor-button .elementor-align-icon-left{order:5}.elementor-button span{text-decoration:inherit}.elementor-element.elementor-button-info .elementor-button{background-color:#5bc0de}.elementor-element.elementor-button-success .elementor-button{background-color:#5cb85c}.elementor-element.elementor-button-warning .elementor-button{background-color:#f0ad4e}.elementor-element.elementor-button-danger .elementor-button{background-color:#d9534f}.elementor-widget-button .elementor-button .elementor-button-info{background-color:#5bc0de}.elementor-widget-button .elementor-button .elementor-button-success{background-color:#5cb85c}.elementor-widget-button .elementor-button .elementor-button-warning{background-color:#f0ad4e}.elementor-widget-button .elementor-button .elementor-button-danger{background-color:#d9534f}.elementor-counter .elementor-counter-number-wrapper{display:flex;font-size:69px;font-weight:600;color:#222;line-height:1}.elementor-counter .elementor-counter-number-prefix,.elementor-counter .elementor-counter-number-suffix{flex-grow:1;white-space:pre-wrap}.elementor-counter .elementor-counter-number-prefix{text-align:right}.elementor-counter .elementor-counter-number-suffix{text-align:left}.elementor-counter .elementor-counter-title{text-align:center;font-size:19px;font-weight:400;color:#666;line-height:2.5}.elementor-widget-divider .elementor-divider{line-height:0;font-size:0}.elementor-widget-divider .elementor-divider-separator{display:inline-block}.elementor-image-gallery--layout-grid .elementor-image-gallery{flex-flow:row wrap}.elementor-image-gallery--layout-masonry .elementor-image-gallery{max-height:1000px;overflow:hidden;flex-flow:column wrap}.elementor-image-gallery{display:flex}.elementor-image-gallery figure{text-align:center;width:100%;margin:0 auto}.elementor-image-gallery img{width:100%;margin:0 auto}.elementor-image-gallery figcaption{margin:0}.elementor-widget-google_maps iframe{height:300px}.elementor-widget-heading .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title>a{color:inherit!important;font-size:inherit!important}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}.elementor-icon-wrapper{line-height:0}.elementor-icon{display:inline-block;line-height:1;transition:.5s;color:#818a91;font-size:50px;text-align:center}.elementor-icon:hover{color:#818a91}.elementor-icon i{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before{position:absolute;left:50%;transform:translateX(-50%)}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#818a91;color:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#818a91;border:3px solid #818a91;background-color:transparent}.elementor-shape-circle .elementor-icon{border-radius:50%}@media (min-width:768px){.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{display:flex}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{display:inline-flex;flex:0 0 auto}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{text-align:right;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:left;flex-direction:row}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img{margin:auto}.elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper{align-items:flex-start}.elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper{align-items:center}.elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper{align-items:flex-end}}@media (max-width:767px){.elementor-widget-icon-box .elementor-icon-box-icon{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-icon-box .elementor-icon-box-wrapper{text-align:center}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit!important}.elementor-widget-icon-box .elementor-icon-box-content{flex-grow:1}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}.elementor-widget.elementor-icon-list--layout-inline .elementor-widget-container{overflow:hidden}.elementor-widget .elementor-icon-list-items.elementor-inline-items{margin-right:-8px;margin-left:-8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item{margin-right:8px;margin-left:8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after{width:auto;left:auto;position:relative;height:100%;top:50%;transform:translateY(-50%);border-top:0;border-bottom:0;border-right:0;border-left-width:1px;border-style:solid;right:-8px}.elementor-widget .elementor-icon-list-items{list-style-type:none;margin:0;padding:0}.elementor-widget .elementor-icon-list-item{margin:0;padding:0;position:relative}.elementor-widget .elementor-icon-list-item:after{position:absolute;bottom:0;width:100%}.elementor-widget .elementor-icon-list-item,.elementor-widget .elementor-icon-list-item a{display:flex;align-items:flex-start}.elementor-widget .elementor-icon-list-item a{width:100%}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{align-self:center;padding-left:5px}.elementor-widget .elementor-icon-list-icon{flex-shrink:0}.elementor-widget.elementor-align-center .elementor-icon-list-item,.elementor-widget.elementor-align-center .elementor-icon-list-item a{justify-content:center}.elementor-widget.elementor-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-align-center .elementor-inline-items{justify-content:center}.elementor-widget.elementor-align-left .elementor-icon-list-item,.elementor-widget.elementor-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-align-left .elementor-inline-items{justify-content:flex-start}.elementor-widget.elementor-align-right .elementor-icon-list-item,.elementor-widget.elementor-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget.elementor-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after{right:0}@media (max-width:1024px){.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-items{justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-items{justify-content:flex-start}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:767px){.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-items{justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-items{justify-content:flex-start}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a{justify-content:flex-start;text-align:left}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{justify-content:flex-end}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a{justify-content:flex-end;text-align:right}.elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after{right:0}.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image{text-align:center}.elementor-widget-image .elementor-image figure>a,.elementor-widget-image .elementor-image>a{display:inline-block}.elementor-widget-image .elementor-image figure>a img[src$=".svg"],.elementor-widget-image .elementor-image>a img[src$=".svg"]{width:48px}.elementor-widget-image .elementor-image img{vertical-align:middle;display:inline-block}.elementor-widget-image .elementor-image.elementor-image-shape-circle{border-radius:50%}.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:768px){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:right;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:left;flex-direction:row}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{align-items:flex-end}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit!important}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}.elementor-image-carousel-wrapper .slick-image-stretch:not(.slick-variable-width) .slick-slide .slick-slide-image{width:100%;object-fit:cover}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.swiper-container .swiper-slide figure{line-height:0}.swiper-container .swiper-slide figure img{width:100%}body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}.elementor-widget-progress{text-align:left}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:30px;line-height:30px;border-radius:2px}.elementor-progress-bar{display:flex;background-color:#818a91;width:0;font-size:11px;height:100%;border-radius:2px;transition:width 1s ease-in-out}.elementor-progress-text{flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-left:15px}.elementor-progress-percentage{padding-right:15px}.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar{background-color:#5bc0de}.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar{background-color:#5cb85c}.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar{background-color:#f0ad4e}.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar{background-color:#d9534f}.elementor-progress .elementor-title{display:block}@media (max-width:767px){.elementor-progress-wrapper{height:25px;line-height:25px}.elementor-progress-text{padding-left:10px}}.elementor-social-icons-wrapper{font-size:0}.elementor-social-icon{font-size:25px;text-align:center;padding:.5em;margin-right:5px;cursor:pointer}.elementor-social-icon i{color:#fff}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-deviantart{background-color:#05cc47}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-freecodecamp{background-color:#006400}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-gitlab{background-color:#e24329}.elementor-social-icon-globe{background-color:#818a91}.elementor-social-icon-google-plus{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-link{background-color:#818a91}.elementor-social-icon-linkedin{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#df2029}.elementor-social-icon-weixin{background-color:#7bb32e}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{border-radius:50%}.elementor-star-rating{color:#ccd6df;font-family:FontAwesome;display:inline-block}.elementor-star-rating i{display:inline-block;position:relative;font-style:normal;line-height:1;cursor:default}.elementor-star-rating i:before{content:'\f005';display:block;font-size:inherit;font-family:inherit;position:absolute;overflow:hidden;color:#f0ad4e;top:0;left:0}.elementor-star-rating .elementor-star-0:before,.elementor-star-rating .elementor-star-empty:before{content:none}.elementor-star-rating .elementor-star-1:before{width:10%}.elementor-star-rating .elementor-star-2:before{width:20%}.elementor-star-rating .elementor-star-3:before{width:30%}.elementor-star-rating .elementor-star-4:before{width:40%}.elementor-star-rating .elementor-star-5:before{width:50%}.elementor-star-rating .elementor-star-6:before{width:60%}.elementor-star-rating .elementor-star-7:before{width:70%}.elementor-star-rating .elementor-star-8:before{width:80%}.elementor-star-rating .elementor-star-9:before{width:90%}.elementor-star-rating__wrapper{display:flex;align-items:center}.elementor-star-rating__title{margin-right:10px}.elementor-star-rating--align-right .elementor-star-rating__wrapper{text-align:right;justify-content:flex-end}.elementor-star-rating--align-left .elementor-star-rating__wrapper{text-align:left;justify-content:flex-start}.elementor-star-rating--align-center .elementor-star-rating__wrapper{text-align:center;justify-content:center}.elementor-star-rating--align-justify .elementor-star-rating__title{margin-right:auto}.last-star{letter-spacing:0}.elementor--star-style-star_unicode .elementor-star-rating{font-family:Arial,Helvetica,sans-serif}.elementor--star-style-star_unicode .elementor-star-rating i:not(.elementor-star-empty,.elementor-star-0):before{content:'\002605'}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{width:25%;flex-shrink:0}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active{border-right-style:none}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{height:999em;width:0;right:0;border-right-style:solid}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{top:0;transform:translateY(-100%)}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after{top:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title{display:table-cell}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active{border-bottom-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{bottom:0;height:0;width:999em;border-bottom-style:solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{right:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after{left:100%}.elementor-widget-tabs .elementor-tab-content,.elementor-widget-tabs .elementor-tab-title,.elementor-widget-tabs .elementor-tab-title:after,.elementor-widget-tabs .elementor-tab-title:before,.elementor-widget-tabs .elementor-tabs-content-wrapper{border:1px #d4d4d4}.elementor-widget-tabs .elementor-tabs{text-align:left}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:0}.elementor-widget-tabs .elementor-tab-desktop-title{position:relative;padding:20px 25px;font-weight:700;line-height:1;border:solid transparent}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active{border-color:#d4d4d4}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before{display:block;content:'';position:absolute}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:767px){.elementor-tabs .elementor-tab-content,.elementor-tabs .elementor-tab-title{border-style:solid solid none}.elementor-tabs .elementor-tabs-wrapper{display:none}.elementor-tabs .elementor-tabs-content-wrapper{border-bottom-style:solid}.elementor-tabs .elementor-tab-content{padding:10px}}@media (min-width:768px){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper{flex-grow:1;border-style:solid solid solid none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content{border-style:none solid solid}.elementor-tabs .elementor-tab-mobile-title{display:none}}.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;color:inherit}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;color:inherit}.elementor-testimonial-wrapper.elementor-testimonial-text-align-left{text-align:left}.elementor-testimonial-wrapper.elementor-testimonial-text-align-right{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;border-radius:50%;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-right:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:left}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}.elementor-toggle{text-align:left}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d4d4d4;cursor:pointer;outline:0}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d4d4d4;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.elementor-widget-video .elementor-widget-container{overflow:hidden;transform:translate3d(0,0,0)}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%}.elementor-widget-video .elementor-custom-embed-image-overlay:not([data-elementor-lightbox]) img{height:100%;object-fit:cover}.elementor-widget-video .elementor-video{object-fit:cover}.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;overflow:hidden;display:block;margin:0;padding:0}.slick-list:focus{outline:0}.slick-list.dragging{cursor:pointer}.slick-slider .slick-list,.slick-slider .slick-track{transform:translate3d(0,0,0)}.slick-track{position:relative;left:0;top:0;display:block}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}.elementor-slick-slider[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.elementor-slick-slider .slick-loading .slick-list{background:#fff}.elementor-slick-slider .slick-loading .slick-list:after{content:'\f1ce';font-family:FontAwesome;position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);animation:2s linear infinite fa-spin;font-size:25px;color:#a4afb7}.elementor-slick-slider .slick-next,.elementor-slick-slider .slick-prev{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;padding:0;transform:translate(0,-50%);cursor:pointer;color:transparent;border:none;outline:0;background:0 0}.elementor-slick-slider .slick-next:focus,.elementor-slick-slider .slick-next:hover,.elementor-slick-slider .slick-prev:focus,.elementor-slick-slider .slick-prev:hover{color:transparent;outline:0;background:0 0}.elementor-slick-slider .slick-next:focus:before,.elementor-slick-slider .slick-next:hover:before,.elementor-slick-slider .slick-prev:focus:before,.elementor-slick-slider .slick-prev:hover:before{opacity:1}.elementor-slick-slider .slick-next.slick-disabled:before,.elementor-slick-slider .slick-prev.slick-disabled:before{opacity:.25}.elementor-slick-slider .slick-next:before,.elementor-slick-slider .slick-prev:before{font-family:FontAwesome;font-size:35px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider .slick-prev{left:-25px}[dir=rtl] .elementor-slick-slider .slick-prev{left:auto;right:-25px}.elementor-slick-slider .slick-prev:before{content:'\f104'}[dir=rtl] .elementor-slick-slider .slick-prev:before{content:'\f105'}.elementor-slick-slider .slick-next{right:-25px}[dir=rtl] .elementor-slick-slider .slick-next{left:-25px;right:auto}.elementor-slick-slider .slick-next:before{content:'\f105'}[dir=rtl] .elementor-slick-slider .slick-next:before{content:'\f104'}.elementor-slick-slider .slick-dotted.slick-slider{margin-bottom:30px}.elementor-slick-slider ul.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center;line-height:1}.elementor-slick-slider ul.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0;padding:0;cursor:pointer}.elementor-slick-slider ul.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:0;background:0 0}.elementor-slick-slider ul.slick-dots li button:focus,.elementor-slick-slider ul.slick-dots li button:hover{outline:0}.elementor-slick-slider ul.slick-dots li button:focus:before,.elementor-slick-slider ul.slick-dots li button:hover:before{opacity:1}.elementor-slick-slider ul.slick-dots li button:before{font-family:FontAwesome;font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:'\f111';text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider ul.slick-dots li.slick-active button:before{opacity:.75;color:#000}.elementor-slick-slider .slick-arrows-inside .slick-prev{left:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-prev{left:auto;right:20px}.elementor-slick-slider .slick-arrows-inside .slick-next{right:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-next{left:20px;right:auto}.elementor-slick-slider .slick-dots-inside .slick-dots{bottom:5px}.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider{margin-bottom:0}.elementor-slick-slider .slick-slider .slick-next,.elementor-slick-slider .slick-slider .slick-prev{z-index:1}.elementor-slick-slider .slick-slide img{margin:auto}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background:center no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;transition:.3s;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:6px;height:6px;display:inline-block;border-radius:50%;background:#000;opacity:.2}.swiper-pagination-fraction{color:#000}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 6px}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#000;position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:0 0}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:100% 0}.swiper-container-horizontal>.swiper-pagination-progressbar{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-progressbar.swiper-pagination-white{background:rgba(255,255,255,.5)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-slide .swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:1s steps(12,end) infinite swiper-preloader-spin}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") 50% no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.elementor-lightbox{--lightbox-ui-color:rgba(238, 238, 238, 0.9);--lightbox-ui-color-hover:#fff;--lightbox-text-color:var(--lightbox-ui-color);--lightbox-header-icons-size:20px;--lightbox-navigation-icons-size:25px}.elementor-lightbox .dialog-header{display:none}.elementor-lightbox .dialog-widget-content{background:0 0;box-shadow:none;width:100%;height:100%}.elementor-lightbox .dialog-message{animation-duration:.3s}.elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio){height:100%}.elementor-lightbox .dialog-message.dialog-lightbox-message{padding:0}.elementor-lightbox .dialog-lightbox-close-button{cursor:pointer;position:absolute;font-size:var(--lightbox-header-icons-size);right:.75em;top:13px;padding:.25em;z-index:2;line-height:1}.elementor-lightbox .dialog-lightbox-close-button,.elementor-lightbox .elementor-swiper-button{color:var(--lightbox-ui-color);transition:.3s;opacity:1}.elementor-lightbox .dialog-lightbox-close-button:hover,.elementor-lightbox .elementor-swiper-button:hover{color:var(--lightbox-ui-color-hover)}.elementor-lightbox .swiper-container{height:100%}.elementor-lightbox .elementor-lightbox-item{display:flex;align-items:center;justify-content:center;position:relative;padding:70px;box-sizing:border-box;height:100%;margin:auto}.elementor-lightbox .elementor-lightbox-image{max-height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elementor-lightbox .elementor-lightbox-image,.elementor-lightbox .elementor-lightbox-image:hover{opacity:1;-webkit-filter:none;filter:none;border:none}.elementor-lightbox .elementor-lightbox-image,.elementor-lightbox .elementor-video-container{box-shadow:0 0 30px rgba(0,0,0,.3),0 0 8px -5px rgba(0,0,0,.3);border-radius:2px}.elementor-lightbox .elementor-video-container{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@media (min-width:1025px){.elementor-lightbox .elementor-video-container{width:75%}.elementor:not(.elementor-edit-area-active) .elementor-hidden-desktop{display:none}}@media (max-width:1024px){.elementor-lightbox .elementor-video-container{width:100%}}.elementor-lightbox .elementor-swiper-button:focus{outline:0}.elementor-lightbox .elementor-swiper-button-next,.elementor-lightbox .elementor-swiper-button-prev{height:100%;display:flex;align-items:center;width:15%;justify-content:center;font-size:var(--lightbox-navigation-icons-size)}.elementor-lightbox .elementor-swiper-button-prev{left:0}.elementor-lightbox .elementor-swiper-button-next{right:0}@media (max-width:767px){.elementor-lightbox .elementor-lightbox-item{padding:70px 0}.elementor-lightbox .elementor-swiper-button-next,.elementor-lightbox .elementor-swiper-button-prev{width:20%}.elementor-lightbox .elementor-swiper-button-next i,.elementor-lightbox .elementor-swiper-button-prev i{padding:10px;background-color:rgba(0,0,0,.5)}.elementor-lightbox .elementor-swiper-button-prev{left:0;justify-content:flex-start}.elementor-lightbox .elementor-swiper-button-next{right:0;justify-content:flex-end}.elementor:not(.elementor-edit-area-active) .elementor-hidden-phone{display:none}}.elementor-slideshow__counter{color:currentColor;font-size:.75em;width:-webkit-max-content;width:-moz-max-content;width:max-content}.elementor-slideshow__footer,.elementor-slideshow__header{position:absolute;left:0;width:100%;padding:15px 20px;transition:.3s}.elementor-slideshow__footer{color:var(--lightbox-text-color)}.elementor-slideshow__header{color:var(--lightbox-ui-color);display:flex;font-size:var(--lightbox-header-icons-size);padding-left:1em;padding-right:2.6em;top:0;align-items:center;z-index:10}.elementor-slideshow__header>i{font-size:calc(var(--lightbox-header-icons-size) * .9);cursor:pointer;padding:.25em;margin:0 .35em}.elementor-slideshow__header>i:hover{color:var(--lightbox-ui-color-hover)}.elementor-slideshow__header>i:first-of-type{margin-left:auto}.elementor-slideshow__header .elementor-icon-share{z-index:5}.elementor-slideshow__footer{bottom:0;z-index:5;position:fixed}.elementor-slideshow__description,.elementor-slideshow__title{margin:0}.elementor-slideshow__title{font-size:16px;font-weight:700}.elementor-slideshow__description{font-size:14px}.elementor-slideshow--ui-hidden .elementor-slideshow__footer,.elementor-slideshow--ui-hidden .elementor-slideshow__header{opacity:0;pointer-events:none}.elementor-slideshow--ui-hidden .elementor-swiper-button-next,.elementor-slideshow--ui-hidden .elementor-swiper-button-prev{opacity:0}.elementor-slideshow--fullscreen-mode .elementor-video-container{width:100%}.elementor-slideshow--zoom-mode .elementor-slideshow__footer,.elementor-slideshow--zoom-mode .elementor-slideshow__header{background-color:rgba(0,0,0,.5)}.elementor-slideshow--zoom-mode .elementor-swiper-button-next,.elementor-slideshow--zoom-mode .elementor-swiper-button-prev{opacity:0;pointer-events:none}.animated{animation-duration:1.25s}.animated.animated-slow{animation-duration:2s}.animated.animated-fast{animation-duration:.75s}.animated.infinite{animation-iteration-count:infinite}.elementor-shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.elementor-shape-top{top:-1px}.elementor-shape-bottom{bottom:-1px}.elementor-shape[data-negative=false].elementor-shape-bottom,.elementor-shape[data-negative=true].elementor-shape-top{transform:rotate(180deg)}.elementor-shape svg{display:block;width:calc(100% + 1.3px);position:relative;left:50%;transform:translateX(-50%)}.elementor-shape .elementor-shape-fill{fill:#fff;transform-origin:50%;transform:rotateY(0)}#elementor .elementor-element ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}@media (min-width:768px) and (max-width:1024px){.elementor-lightbox .elementor-aspect-ratio-916 .elementor-video-container{width:70%}.elementor:not(.elementor-edit-area-active) .elementor-hidden-tablet{display:none}}.elementor-widget-call-to-action .elementor-widget-container{overflow:hidden}.elementor-cta{position:relative;display:flex;overflow:hidden;transition:.5s}.elementor-cta-content{z-index:2;overflow:hidden;display:flex;flex-wrap:wrap;align-items:center;align-content:center;padding:35px;width:100%}.elementor-cta .elementor-content-item,.elementor-cta-content{position:relative;transition:.5s;color:#fff}.elementor-cta .elementor-content-item{width:100%;margin:0}.elementor-cta .elementor-content-item:not(:last-child){margin-bottom:15px}.elementor-cta .elementor-content-item .elementor-icon{color:#fff}.elementor-cta--skin-classic .elementor-cta{flex-wrap:wrap}.elementor-cta--skin-classic .elementor-cta-bg-wrapper{position:relative;min-height:200px;width:100%}.elementor-cta--skin-classic .elementor-cta-content{transition:.4s;width:100%;background-color:#f7f7f7}.elementor-cta--skin-classic .elementor-content-item,.elementor-cta--skin-classic .elementor-content-item .elementor-icon{color:#55595c;border-color:#55595c}.elementor-cta--skin-classic .elementor-cta a.elementor-button:not(#e),.elementor-cta--skin-classic .elementor-cta button.elementor-button:not(#e){color:#55595c}.elementor-cta--skin-classic .elementor-cta .elementor-button{border-color:#55595c}.elementor-cta--skin-cover .elementor-cta{display:block}.elementor-cta--skin-cover .elementor-cta-bg-wrapper{position:absolute;top:0;left:0;right:0;bottom:0;transition:.4s;width:100%}.elementor-cta--skin-cover .elementor-cta-content{min-height:280px}.elementor-cta--skin-cover .elementor-content-item,.elementor-cta--skin-cover .elementor-content-item .elementor-icon{color:#fff;border-color:#fff}.elementor-cta--skin-cover .elementor-cta .elementor-button{border-color:#fff}.elementor-cta--layout-image-above .elementor-cta{flex-wrap:wrap}.elementor-cta--layout-image-above .elementor-cta-bg-wrapper{width:100%}.elementor-cta--layout-image-left .elementor-cta,.elementor-cta--layout-image-right .elementor-cta{flex-wrap:nowrap}.elementor-cta--layout-image-left .elementor-cta-bg-wrapper,.elementor-cta--layout-image-right .elementor-cta-bg-wrapper{width:auto;min-width:50%}.elementor-cta--layout-image-left .elementor-cta-content,.elementor-cta--layout-image-right .elementor-cta-content{flex-grow:1}.elementor-cta--layout-image-left .elementor-cta{flex-direction:row}.elementor-cta--layout-image-right .elementor-cta{flex-direction:row-reverse}.elementor-cta-bg,.elementor-cta-bg-overlay{position:absolute;top:0;left:0;right:0;bottom:0;transition:.4s}.elementor-cta-bg-wrapper{z-index:1;overflow:hidden}.elementor-cta-bg-wrapper img.elementor-cta-bg{width:100%;height:100%;object-fit:cover;z-index:1}.elementor-cta-bg-overlay{z-index:2}.elementor-cta .elementor-button{cursor:pointer;align-self:center;margin-left:auto;margin-right:auto;border:2px solid #fff;background:0 0}.elementor-cta .elementor-button:hover{background:0 0;text-decoration:none}.elementor-cta-title{font-size:23px}.elementor-cta--valign-top .elementor-cta-content{align-content:flex-start;align-items:flex-start}.elementor-cta--valign-middle .elementor-cta-content{align-content:center;align-items:center}.elementor-cta--valign-bottom .elementor-cta-content{align-content:flex-end;align-items:flex-end}.elementor-cta:hover .elementor-cta-bg-overlay{background-color:rgba(0,0,0,.3)}@media (max-device-width:1024px){.elementor-cta{cursor:pointer}}@media (min-width:1025px){.elementor-cta--desktop-layout-image-above .elementor-cta{flex-wrap:wrap}.elementor-cta--desktop-layout-image-above .elementor-cta-bg-wrapper{width:100%}.elementor-cta--desktop-layout-image-left .elementor-cta,.elementor-cta--desktop-layout-image-right .elementor-cta{flex-wrap:nowrap}.elementor-cta--desktop-layout-image-left .elementor-cta-bg-wrapper,.elementor-cta--desktop-layout-image-right .elementor-cta-bg-wrapper{width:auto;min-width:50%}.elementor-cta--desktop-layout-image-left .elementor-cta-content,.elementor-cta--desktop-layout-image-right .elementor-cta-content{flex-grow:1}.elementor-cta--desktop-layout-image-left .elementor-cta{flex-direction:row}.elementor-cta--desktop-layout-image-right .elementor-cta{flex-direction:row-reverse}}@media (max-width:1024px){.elementor-cta--tablet-layout-image-above .elementor-cta{flex-wrap:wrap}.elementor-cta--tablet-layout-image-above .elementor-cta-bg-wrapper{width:100%}.elementor-cta--tablet-layout-image-left .elementor-cta,.elementor-cta--tablet-layout-image-right .elementor-cta{flex-wrap:nowrap}.elementor-cta--tablet-layout-image-left .elementor-cta-bg-wrapper,.elementor-cta--tablet-layout-image-right .elementor-cta-bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet-layout-image-left .elementor-cta-content,.elementor-cta--tablet-layout-image-right .elementor-cta-content{flex-grow:1}.elementor-cta--tablet-layout-image-left .elementor-cta{flex-direction:row}.elementor-cta--tablet-layout-image-right .elementor-cta{flex-direction:row-reverse}}@media (max-width:767px){.elementor-cta--mobile-layout-image-above .elementor-cta{flex-wrap:wrap}.elementor-cta--mobile-layout-image-above .elementor-cta-bg-wrapper{width:100%}.elementor-cta--mobile-layout-image-left .elementor-cta,.elementor-cta--mobile-layout-image-right .elementor-cta{flex-wrap:nowrap}.elementor-cta--mobile-layout-image-left .elementor-cta-bg-wrapper,.elementor-cta--mobile-layout-image-right .elementor-cta-bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile-layout-image-left .elementor-cta-content,.elementor-cta--mobile-layout-image-right .elementor-cta-content{flex-grow:1}.elementor-cta--mobile-layout-image-left .elementor-cta{flex-direction:row}.elementor-cta--mobile-layout-image-right .elementor-cta{flex-direction:row-reverse}}.elementor-ribbon{position:absolute;z-index:1;top:0;left:auto;right:0;transform:rotate(90deg);width:150px;overflow:hidden;height:150px}.elementor-ribbon-inner{text-align:center;left:0;width:200%;transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:#000;color:#fff}.elementor-ribbon.elementor-ribbon-left{transform:rotate(0);left:0;right:auto}.elementor-ribbon.elementor-ribbon-right{transform:rotate(90deg);left:auto;right:0}.elementor-bg-transform-zoom-in:hover .elementor-bg,.elementor-bg-transform-zoom-out .elementor-bg{transform:scale(1.2)}.elementor-bg-transform-zoom-out:hover .elementor-bg{transform:scale(1)}.elementor-bg-transform-move-left .elementor-bg{transform:scale(1.2) translateX(8%)}.elementor-bg-transform-move-left:hover .elementor-bg,.elementor-bg-transform-move-right .elementor-bg{transform:scale(1.2) translateX(-8%)}.elementor-bg-transform-move-right:hover .elementor-bg{transform:scale(1.2) translateX(8%)}.elementor-bg-transform-move-up .elementor-bg{transform:scale(1.2) translateY(8%)}.elementor-bg-transform-move-down .elementor-bg,.elementor-bg-transform-move-up:hover .elementor-bg{transform:scale(1.2) translateY(-8%)}.elementor-bg-transform-move-down:hover .elementor-bg{transform:scale(1.2) translateY(8%)}.elementor-animated-content:hover .elementor-animated-item--grow{transform:scale(1.1)}.elementor-animated-content:hover .elementor-animated-item--shrink{transform:scale(.85)}.elementor-animated-content:hover .elementor-animated-item--enter-zoom-in,.elementor-animated-content:hover .elementor-animated-item--enter-zoom-out,.elementor-animated-content:hover .elementor-animated-item--fade-in{transform:none;opacity:1}.elementor-animated-content:hover .elementor-animated-item--exit-zoom-in,.elementor-animated-content:hover .elementor-animated-item--exit-zoom-out,.elementor-animated-content:hover .elementor-animated-item--fade-out{opacity:0}.elementor-animated-content:hover .elementor-animated-item--exit-zoom-out{transform:scale(.2)}.elementor-animated-content:hover .elementor-animated-item--exit-zoom-in{transform:scale(2)}.elementor-animated-content:hover .elementor-animated-item--enter-from-bottom,.elementor-animated-content:hover .elementor-animated-item--enter-from-left,.elementor-animated-content:hover .elementor-animated-item--enter-from-right,.elementor-animated-content:hover .elementor-animated-item--enter-from-top{opacity:1;transform:none}.elementor-animated-content:hover .elementor-animated-item--exit-to-right{transform:translateX(1000px)}.elementor-animated-content:hover .elementor-animated-item--exit-to-left{transform:translateX(-1000px)}.elementor-animated-content:hover .elementor-animated-item--exit-to-top{transform:translateY(-600px)}.elementor-animated-content:hover .elementor-animated-item--exit-to-bottom{transform:translateY(600px)}.elementor-animated-content:hover .elementor-animated-item--exit-to-bottom,.elementor-animated-content:hover .elementor-animated-item--exit-to-left,.elementor-animated-content:hover .elementor-animated-item--exit-to-right,.elementor-animated-content:hover .elementor-animated-item--exit-to-top{opacity:0}.elementor-animated-content:hover .elementor-animated-item--move-right{transform:translateX(30px)}.elementor-animated-content:hover .elementor-animated-item--move-left{transform:translateX(-30px)}.elementor-animated-content:hover .elementor-animated-item--move-up{transform:translateY(-30px)}.elementor-animated-content:hover .elementor-animated-item--move-down{transform:translateY(30px)}.elementor-animated-content [class^=elementor-animated-item]{will-change:transform,opacity}.elementor-animated-content .elementor-animated-item--enter-zoom-in{transform:scale(.2)}.elementor-animated-content .elementor-animated-item--enter-zoom-out{transform:scale(2)}.elementor-animated-content .elementor-animated-item--enter-zoom-in,.elementor-animated-content .elementor-animated-item--enter-zoom-out,.elementor-animated-content .elementor-animated-item--fade-in{opacity:0}.elementor-animated-content .elementor-animated-item--exit-zoom-in,.elementor-animated-content .elementor-animated-item--exit-zoom-out,.elementor-animated-content .elementor-animated-item--fade-out{opacity:1;transform:scale(1)}.elementor-animated-content .elementor-animated-item--enter-from-right{transform:translateX(1000px)}.elementor-animated-content .elementor-animated-item--enter-from-left{transform:translateX(-1000px)}.elementor-animated-content .elementor-animated-item--enter-from-top{transform:translateY(-600px)}.elementor-animated-content .elementor-animated-item--enter-from-bottom{transform:translateY(500px)}.elementor-animated-content .elementor-animated-item--enter-from-bottom,.elementor-animated-content .elementor-animated-item--enter-from-left,.elementor-animated-content .elementor-animated-item--enter-from-right,.elementor-animated-content .elementor-animated-item--enter-from-top{opacity:0}.elementor-animated-content .elementor-animated-item--exit-to-bottom,.elementor-animated-content .elementor-animated-item--exit-to-left,.elementor-animated-content .elementor-animated-item--exit-to-right,.elementor-animated-content .elementor-animated-item--exit-to-top{opacity:1;transform:none}.elementor-flip-box{position:relative;height:300px;width:100%;perspective:1000px;transform-style:preserve-3d}.elementor-flip-box>a{display:block}.elementor-flip-box-side{position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;transition:.6s ease-in-out}.elementor-flip-box-front{background:#0e9dd2}.elementor-flip-box-back{background:#444}.elementor-flip-box-overlay{display:flex;align-items:center;width:100%;height:100%;padding:35px}.elementor-flip-box-content{width:100%}.elementor-flip-box-content>:not(:last-child){margin-bottom:15px}.elementor-flip-box-image img{width:50%}.elementor-flip-box .elementor-view-stacked .elementor-icon{background:#202020}.elementor-flip-box .elementor-icon,.elementor-flip-box-description,.elementor-flip-box-title{color:#fff;border-color:#fff}.elementor-flip-box .elementor-button{cursor:pointer;border:2px solid currentColor;background:0 0}.elementor-flip-box-back--valign-top .elementor-flip-box-back .elementor-flip-box-overlay,.elementor-flip-box-front--valign-top .elementor-flip-box-front .elementor-flip-box-overlay{align-content:flex-start;align-items:flex-start}.elementor-flip-box-back--valign-middle .elementor-flip-box-back .elementor-flip-box-overlay,.elementor-flip-box-front--valign-middle .elementor-flip-box-front .elementor-flip-box-overlay{align-content:center;align-items:center}.elementor-flip-box-back--valign-bottom .elementor-flip-box-back .elementor-flip-box-overlay,.elementor-flip-box-front--valign-bottom .elementor-flip-box-front .elementor-flip-box-overlay{align-content:flex-end;align-items:flex-end}.elementor-flip-box--3d .elementor-flip-box-overlay{transform-style:preserve-3d;transform:translateZ(.1px)}.elementor-flip-box--3d .elementor-flip-box-content{transform:translateZ(90px) scale(.91)}.elementor-flip-box--effect-flip .elementor-flip-box-side{transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}.elementor-flip-box--effect-flip .elementor-flip-box-front{transform:none;z-index:1}.elementor-flip-box--effect-flip .elementor-flip-box:hover .elementor-flip-box-back,.elementor-flip-box--effect-push .elementor-flip-box-front,.elementor-flip-box--effect-push .elementor-flip-box:hover .elementor-flip-box-back,.elementor-flip-box--effect-slide .elementor-flip-box:hover .elementor-flip-box-back{transform:none}.elementor-flip-box--effect-flip.elementor-flip-box--direction-right .elementor-flip-box-back{transform:rotateY(-180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-left .elementor-flip-box-back,.elementor-flip-box--effect-flip.elementor-flip-box--direction-right .elementor-flip-box:hover .elementor-flip-box-front{transform:rotateY(180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-left .elementor-flip-box:hover .elementor-flip-box-front{transform:rotateY(-180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-up .elementor-flip-box-back{transform:rotateX(-180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-down .elementor-flip-box-back,.elementor-flip-box--effect-flip.elementor-flip-box--direction-up .elementor-flip-box:hover .elementor-flip-box-front{transform:rotateX(180deg)}.elementor-flip-box--effect-flip.elementor-flip-box--direction-down .elementor-flip-box:hover .elementor-flip-box-front{transform:rotateX(-180deg)}.elementor-flip-box--effect-push.elementor-flip-box--direction-right .elementor-flip-box:hover .elementor-flip-box-front{transform:translateX(100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-left .elementor-flip-box:hover .elementor-flip-box-front{transform:translateX(-100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-up .elementor-flip-box:hover .elementor-flip-box-front{transform:translateY(-100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-down .elementor-flip-box:hover .elementor-flip-box-front{transform:translateY(100%)}.elementor-flip-box--effect-push .elementor-flip-box,.elementor-flip-box--effect-slide .elementor-flip-box{overflow:hidden}.elementor-flip-box--effect-push.elementor-flip-box--direction-right .elementor-flip-box-back,.elementor-flip-box--effect-slide.elementor-flip-box--direction-right .elementor-flip-box-back{transform:translateX(-100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-left .elementor-flip-box-back,.elementor-flip-box--effect-slide.elementor-flip-box--direction-left .elementor-flip-box-back{transform:translateX(100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-up .elementor-flip-box-back,.elementor-flip-box--effect-slide.elementor-flip-box--direction-up .elementor-flip-box-back{transform:translateY(100%)}.elementor-flip-box--effect-push.elementor-flip-box--direction-down .elementor-flip-box-back,.elementor-flip-box--effect-slide.elementor-flip-box--direction-down .elementor-flip-box-back{transform:translateY(-100%)}.elementor-flip-box--effect-zoom-out .elementor-flip-box .elementor-flip-box-front{transition:opacity .35s,width .1ms,transform .7s;z-index:1;width:100%}.elementor-flip-box--effect-zoom-out .elementor-flip-box:hover .elementor-flip-box-front{transition:opacity .7s .1s,width .1ms .7s,transform .8s;width:0;opacity:0;transform:scale(.7)}.elementor-flip-box--effect-zoom-in .elementor-flip-box .elementor-flip-box-back{transition:opacity .5s .2s,transform .7s;opacity:0;transform:scale(.7)}.elementor-flip-box--effect-zoom-in .elementor-flip-box:hover .elementor-flip-box-back{transition:opacity .5s,transform .7s;opacity:1;transform:scale(1)}.elementor-flip-box--effect-fade .elementor-flip-box .elementor-flip-box-back{opacity:0}.elementor-flip-box--effect-fade .elementor-flip-box:hover .elementor-flip-box-back{opacity:1}.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box-front{display:none}.elementor-widget-flip-box.elementor-flip-box--flipped .elementor-widget-container .elementor-flip-box-back{transform:none;opacity:1}.elementor-headline{font-size:43px;line-height:1.2;display:block}.elementor-headline--style-rotate .elementor-headline-dynamic-wrapper{text-align:left}.elementor-headline--style-highlight .elementor-headline-dynamic-wrapper{overflow:visible;text-align:inherit}.elementor-headline--style-highlight .elementor-headline-dynamic-text{z-index:1}.elementor-headline--style-highlight .elementor-headline-plain-text{z-index:1;position:relative}.elementor-headline--style-highlight svg{position:absolute;top:50%;left:50%;width:calc(100% + 20px);height:calc(100% + 20px);transform:translate(-50%,-50%);overflow:visible}.elementor-headline--style-highlight svg path{stroke:red;stroke-width:9;fill:none;stroke-dasharray:1500;animation:10s infinite elementor-headline-dash}.elementor-headline--style-highlight svg path:nth-of-type(2){animation-delay:.6s}@keyframes elementor-headline-dash{0%{stroke-dasharray:0 1500}15%{stroke-dasharray:1500 1500}85%{opacity:1}90%{stroke-dasharray:1500 1500;opacity:0}100%{stroke-dasharray:0 1500;opacity:0}}.elementor-headline-dynamic-wrapper{display:inline-block;position:relative}.elementor-headline-dynamic-wrapper .elementor-headline-dynamic-text{display:inline-block;position:absolute;top:0;left:0}.elementor-headline-dynamic-wrapper .elementor-headline-dynamic-text.elementor-headline-text-active{position:relative}.elementor-headline-animation-type-flip .elementor-headline-dynamic-wrapper{perspective:300px}.elementor-headline-animation-type-flip .elementor-headline-dynamic-text{opacity:0;transform-origin:50% 100%;transform:rotateX(180deg)}.elementor-headline-animation-type-flip .elementor-headline-dynamic-text.elementor-headline-text-active{opacity:1;transform:rotateX(0);animation:1.2s elementor-headline-flip-in}.elementor-headline-animation-type-flip .elementor-headline-dynamic-text.elementor-headline-text-inactive{transform:rotateX(180deg);animation:1.2s elementor-headline-flip-out}@keyframes elementor-headline-flip-in{0%{transform:rotateX(180deg);opacity:0}35%{transform:rotateX(120deg);opacity:0}65%{opacity:0}100%{transform:rotateX(360deg);opacity:1}}@keyframes elementor-headline-flip-out{0%{transform:rotateX(0);opacity:1}35%{transform:rotateX(-40deg);opacity:1}65%{opacity:0}100%{transform:rotateX(180deg);opacity:0}}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper{vertical-align:top;overflow:hidden}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper::after{content:'';position:absolute;left:auto;right:0;top:50%;transform:translateY(-50%);height:90%;width:1px;background-color:#0d0d0d}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper:not(.elementor-headline-typing-selected):after{animation:1s infinite elementor-headline-pulse}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected{background-color:#0d0d0d}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected::after{visibility:hidden}.elementor-headline-animation-type-typing .elementor-headline-dynamic-wrapper.elementor-headline-typing-selected .elementor-headline-dynamic-text{color:#aebcb9}.elementor-headline-animation-type-typing .elementor-headline-dynamic-text:not(.elementor-headline-text-active){visibility:hidden}.elementor-headline-animation-type-typing .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in){position:absolute;visibility:hidden}@keyframes elementor-headline-pulse{0%{transform:translateY(-50%) scale(1);opacity:1}40%{transform:translateY(-50%) scale(.9);opacity:0}100%{transform:translateY(-50%) scale(0);opacity:0}}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-wrapper{perspective:300px}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter{display:inline-block;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-style:preserve-3d;transform:translateZ(-20px) rotateX(90deg);opacity:0}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-text{opacity:0}.elementor-headline-text-active .elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter{opacity:1}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter.elementor-headline-animation-in{animation:.4s forwards elementor-headline-swirl-in}.elementor-headline-animation-type-swirl .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in){animation:.4s forwards elementor-headline-swirl-out}@keyframes elementor-headline-swirl-in{0%{opacity:0;transform:translateZ(-20px) rotateX(90deg)}60%{opacity:1;transform:translateZ(-20px) rotateX(-10deg)}100%{opacity:1;transform:translateZ(-20px)}}@keyframes elementor-headline-swirl-out{0%{opacity:1;transform:translateZ(-20px)}60%{opacity:0;transform:translateZ(-20px) rotateX(-100deg)}100%{opacity:0;transform:translateZ(-20px) rotateX(-90deg)}}.elementor-headline-animation-type-slide-down .elementor-headline-text-wrapper{display:inline-block;padding:.2em 0}.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-wrapper{overflow:hidden;vertical-align:top}.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text{opacity:0;top:.2em}.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text.elementor-headline-text-active{top:0;opacity:1;animation:.6s elementor-headline-slide-down-in}.elementor-headline-animation-type-slide-down .elementor-headline-dynamic-text.elementor-headline-text-inactive{animation:.6s elementor-headline-slide-down-out}@keyframes elementor-headline-slide-down-in{0%{opacity:0;transform:translateY(-100%)}60%{opacity:1;transform:translateY(20%)}100%{opacity:1;transform:translateY(0)}}@keyframes elementor-headline-slide-down-out{0%{opacity:1;transform:translateY(0)}60%{opacity:0;transform:translateY(120%)}100%{opacity:0;transform:translateY(100%)}}.elementor-headline-animation-type-clip .elementor-headline-text-wrapper{display:inline-block;padding:.2em 0}.elementor-headline-animation-type-clip .elementor-headline-dynamic-wrapper{overflow:hidden;vertical-align:top}.elementor-headline-animation-type-clip .elementor-headline-dynamic-wrapper::after{content:'';position:absolute;top:0;left:auto;right:0;width:2px;height:100%;background-color:#0d0d0d}.elementor-headline-animation-type-clip .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-clip .elementor-headline-dynamic-text.elementor-headline-text-active{opacity:1}.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-wrapper{perspective:300px}.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text.elementor-headline-text-active{opacity:1;animation:.8s elementor-headline-drop-in-in}.elementor-headline-animation-type-drop-in .elementor-headline-dynamic-text.elementor-headline-text-inactive{animation:.8s elementor-headline-drop-in-out}@keyframes elementor-headline-drop-in-in{0%{opacity:0;transform:translateZ(100px)}100%{opacity:1;transform:translateZ(0)}}@keyframes elementor-headline-drop-in-out{0%{opacity:1;transform:translateZ(0)}100%{opacity:0;transform:translateZ(-100px)}}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-wrapper{perspective:300px}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter{display:inline-block;transform:rotateY(180deg);-webkit-backface-visibility:hidden;backface-visibility:hidden}.elementor-headline-text-active .elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter{transform:rotateY(0)}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter.elementor-headline-animation-in{animation:.6s forwards elementor-headline-blinds-in}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in){animation:.6s forwards elementor-headline-blinds-out}@keyframes elementor-headline-blinds-in{0%{transform:rotateY(180deg)}100%{transform:rotateY(0)}}@keyframes elementor-headline-blinds-out{0%{transform:rotateY(0)}100%{transform:rotateY(-180deg)}}.elementor-headline-animation-type-wave .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-wave .elementor-headline-dynamic-letter{display:inline-block;opacity:0;transform:scale(0)}.elementor-headline-text-active .elementor-headline-animation-type-wave .elementor-headline-dynamic-letter{opacity:1}.elementor-headline-animation-type-wave .elementor-headline-dynamic-letter.elementor-headline-animation-in{animation:.6s forwards elementor-headline-wave-up}.elementor-headline-animation-type-wave .elementor-headline-dynamic-letter:not(.elementor-headline-animation-in){animation:.6s forwards elementor-headline-wave-down}@keyframes elementor-headline-wave-up{0%{transform:scale(0);opacity:0}60%{transform:scale(1.2);opacity:1}100%{transform:scale(1);opacity:1}}@keyframes elementor-headline-wave-down{0%{transform:scale(1);opacity:1}60%{transform:scale(0);opacity:0}}.elementor-headline-animation-type-slide .elementor-headline-dynamic-text{opacity:0}.elementor-headline-animation-type-slide .elementor-headline-dynamic-text.elementor-headline-text-active{opacity:1;animation:.6s elementor-headline-slide-in}.elementor-headline-animation-type-slide .elementor-headline-dynamic-text.elementor-headline-text-inactive{animation:.6s elementor-headline-slide-out}@keyframes elementor-headline-slide-in{0%{opacity:0;transform:translateX(-100%)}60%{opacity:1;transform:translateX(10%)}100%{opacity:1;transform:translateX(0)}}@keyframes elementor-headline-slide-out{0%{opacity:1;transform:translateX(0)}60%{opacity:0;transform:translateX(110%)}100%{opacity:0;transform:translateX(100%)}}.elementor-headline-animation-type-blinds .elementor-headline-dynamic-text,.elementor-headline-animation-type-swirl .elementor-headline-dynamic-text,.elementor-headline-animation-type-wave .elementor-headline-dynamic-text{white-space:nowrap}.elementor-image-hotspot{display:inline-block;position:relative}.elementor-image-hotspot .elementor-image-hotspot-wrapper{position:absolute;transform:translate(-50%,-50%)}.elementor-image-hotspot .elementor-image-hotspot-wrapper:hover .elementor-image-hotspot-content{visibility:visible;opacity:1;transform:translate3d(-50%,-110%,0)}.elementor-image-hotspot .elementor-image-hotspot-content{position:absolute;visibility:hidden;top:0;left:50%;width:240px;max-width:100vw;padding:20px;text-align:center;border-radius:5px;background:#fff;opacity:0;z-index:10;box-shadow:0 2px 20px 0 rgba(0,0,0,.07);transform:translate3d(-50%,-100%,0);transition:.3s cubic-bezier(0, 0, .2, 1)}.elementor-image-hotspot .elementor-image-hotspot-title{margin:0 0 7px}.elementor-image-hotspot .elementor-image-hotspot-description>:first-child{margin-top:0}.elementor-image-hotspot .elementor-image-hotspot-description>:last-child{margin-bottom:0}.elementor-widget-image-hotspot.elementor-view-framed .elementor-icon{border-width:2px}.elementor-widget-image-hotspot.elementor-view-framed .elementor-icon,.elementor-widget-image-hotspot.elementor-view-stacked .elementor-icon{border-radius:50%}.elementor-image-hotspot .elementor-icon i:not([class]),.elementor-image-hotspot .elementor-icon i[class='']{display:none}.elementor-widget-countdown .elementor-countdown-expire--message{display:none;padding:20px;text-align:center}.elementor-widget-countdown .elementor-countdown-item{padding:20px 0;text-align:center;background-color:#818a91;color:#fff}.elementor-widget-countdown .elementor-countdown-digits,.elementor-widget-countdown .elementor-countdown-label{line-height:1}.elementor-widget-countdown .elementor-countdown-digits{font-size:69px}.elementor-widget-countdown .elementor-countdown-label{font-size:19px}.elementor-countdown--label-block .elementor-countdown-wrapper{display:flex;justify-content:center;margin-right:auto;margin-left:auto}.elementor-countdown--label-block .elementor-countdown-digits,.elementor-countdown--label-block .elementor-countdown-label{display:block}.elementor-countdown--label-block .elementor-countdown-item{flex-basis:0;flex-grow:1}.elementor-countdown--label-inline{text-align:center}.elementor-countdown--label-inline .elementor-countdown-item{display:inline-block;padding-left:5px;padding-right:5px}.elementor[data-elementor-type$=miniature] .elementor-countdown-item{padding:10px 0}.elementor[data-elementor-type$=miniature] .elementor-countdown-digits{font-size:28px}.elementor[data-elementor-type$=miniature] .elementor-countdown-label{font-size:12px}.elementor-product-box>*,.elementor-product-grid>*,.wrapfix .elementor-product-box,.wrapfix .elementor-product-box>*>*{float:none!important;margin-left:0!important;margin-right:0!important;width:auto}.wrapfix .elementor-product-box>*,.wrapfix .elementor-product-grid>*{min-width:100%;padding:0!important}.elementor-product-grid{display:-ms-grid;display:grid;margin:0;grid-column-gap:15px;grid-row-gap:15px}.elementor-product-grid:after,.elementor-product-grid:before{display:none!important}.elementor-product-grid>*{align-self:flex-start}.elementor-widget .elementor-product-miniature{background:#fff;border:0 solid;padding:10px;transition:.4s}.elementor-product-miniature .elementor-product-link{position:relative;display:block;outline:0}.elementor-product-miniature .elementor-image{position:relative;overflow:hidden}.elementor-product-miniature .elementor-image img{display:block;margin:0 auto;transition:transform .4s}.elementor-product-miniature .elementor-second-image{position:absolute;top:0;left:0;width:100%;opacity:0;transition:opacity .4s}.elementor-img-hover-grow .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-grow .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-grow .elementor-product-miniature:hover .elementor-image img{transform:scale(1.1)}.elementor-img-hover-shrink .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-shrink .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-shrink .elementor-product-miniature:hover .elementor-image img{transform:scale(.85)}.elementor-img-hover-rotate .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-rotate .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-rotate .elementor-product-miniature:hover .elementor-image img{transform:rotate(4deg)}.elementor-img-hover-grow-rotate .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-grow-rotate .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-grow-rotate .elementor-product-miniature:hover .elementor-image img{transform:scale(1.1) rotate(4deg)}.elementor-img-hover-float .elementor-product-miniature .elementor-image img{transition-duration:.3s;transition-timing-function:ease-out}.elementor-img-hover-float .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-float .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-float .elementor-product-miniature:hover .elementor-image img{transform:translateY(-8px)}.elementor-img-hover-sink .elementor-product-miniature .elementor-image img{transition-duration:.3s;transition-timing-function:ease-out}.elementor-img-hover-sink .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-sink .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-sink .elementor-product-miniature:hover .elementor-image img{transform:translateY(8px)}.elementor-img-hover-bob .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-bob .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-bob .elementor-product-miniature:hover .elementor-image img{animation-name:elementor-animation-bob-float,elementor-animation-bob;animation-duration:.3s,1.5s;animation-delay:0s,.3s;animation-timing-function:ease-out,ease-in-out;animation-iteration-count:1,infinite;animation-fill-mode:forwards;animation-direction:normal,alternate}.elementor-img-hover-hang .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-hang .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-hang .elementor-product-miniature:hover .elementor-image img{animation-name:elementor-animation-hang-sink,elementor-animation-hang;animation-duration:.3s,1.5s;animation-delay:0s,.3s;animation-timing-function:ease-out,ease-in-out;animation-iteration-count:1,infinite;animation-fill-mode:forwards;animation-direction:normal,alternate}.elementor-img-hover-buzz-out .elementor-product-miniature:active .elementor-image img,.elementor-img-hover-buzz-out .elementor-product-miniature:focus .elementor-image img,.elementor-img-hover-buzz-out .elementor-product-miniature:hover .elementor-image img{animation-name:elementor-animation-buzz-out;animation-duration:.75s;animation-timing-function:linear;animation-iteration-count:1}.elementor-product-miniature:hover .elementor-second-image{opacity:1}.elementor-product-miniature .elementor-quick-view{position:absolute;display:block;bottom:0;width:100%;background:rgba(255,255,255,.5);background-clip:padding-box;color:#000;font-size:14px;line-height:40px;transform:translateY(100%);transition-duration:.4s}.elementor-product-miniature .elementor-quick-view .elementor-button-text{flex-grow:0}.elementor-product-miniature:hover .elementor-quick-view{cursor:pointer;transform:translateY(0)}.elementor-product-miniature .elementor-quick-view:hover{opacity:1;background-color:rgba(255,255,255,.7)}.elementor-product-miniature .elementor-badges-left,.elementor-product-miniature .elementor-badges-right{position:absolute;top:0;margin:10px}.elementor-product-miniature .elementor-badges-left{left:0}.elementor-product-miniature .elementor-badges-right{right:0}.elementor-product-miniature .elementor-badge{min-width:50px;margin-bottom:5px;padding:4px 5px;color:#fff;text-align:center}.elementor-product-miniature .elementor-badge-sale{background:#f39d72}.elementor-product-miniature .elementor-badge-new,.elementor-product-miniature .elementor-badge-pack{background:#2fb5d2}.elementor-product-miniature .elementor-content{padding:10px;text-align:center}.elementor-product-miniature .elementor-content>*{margin-top:10px;margin-bottom:0}.elementor-product-miniature .elementor-content>:first-child{margin-top:5px}.elementor-product-miniature .elementor-category,.elementor-product-miniature .elementor-title{color:#000;font-size:14px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.elementor-product-miniature .elementor-category{color:color: #afafaf}.elementor-product-miniature .elementor-description{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;font-size:13px}.elementor-product-miniature .elementor-price-wrapper{font-size:16px}.elementor-product-miniature .elementor-price-regular{color:#afafaf;font-weight:400;text-decoration:line-through}.elementor-product-miniature .elementor-price{color:#000}.elementor-product-miniature .elementor-atc{margin-top:5px}.elementor-atc--align-center .elementor-atc{text-align:center}.elementor-atc--align-right .elementor-atc{text-align:right}.elementor-atc--align-left .elementor-atc{text-align:left}.elementor-atc--align-justify .elementor-atc .elementor-button{width:100%}.elementor-product-miniature .elementor-atc .elementor-button{font-size:14px;background:#000;cursor:pointer}.elementor-product-miniature .elementor-atc .elementor-button:hover{opacity:1;background-color:#212121}.elementor-product-miniature .elementor-atc .elementor-button:disabled{cursor:not-allowed}.elementor-trustedshops-reviews .slick-track{display:table}.elementor-trustedshops-reviews .slick-initialized .slick-slide{display:table-cell;float:none}.elementor-trustedshops-reviews .slick-slide-inner{overflow:hidden}.elementor-trustedshops-reviews .elementor-trustedshops-reviews-comment,.elementor-trustedshops-reviews .elementor-trustedshops-reviews-header{padding:10px}.elementor-trustedshops-reviews .elementor-trustedshops-reviews-header::after{content:'';display:block;clear:both}.elementor-trustedshops-reviews .elementor-trustedshops-reviews-date{float:left}.elementor-trustedshops-reviews .elementor-trustedshops-reviews-stars{float:right}.elementor-trustedshops-reviews .elementor-icon-unicode .fa-star::before{content:'\2605'}.elementor-trustedshops-reviews .elementor-icon-unicode .fa-star-o::before{content:'\2606'}.elementor-search{display:flex;flex-direction:column;transition:.2s}.elementor-search--align-left .elementor-search{align-items:flex-start}.elementor-search--align-center .elementor-search{align-items:center}.elementor-search--align-right .elementor-search{align-items:flex-end}.elementor-search button,.elementor-search input[type=search]{margin:0;border:0;padding:0;display:inline-block;vertical-align:middle;white-space:normal;background:0 0;line-height:1;min-width:0;font-size:15px;-webkit-appearance:none;-moz-appearance:none}.elementor-search input[type=search]::-webkit-search-cancel-button{content:'x';-webkit-appearance:none}.elementor-search button:focus,.elementor-search input[type=search]:focus{outline:0;color:inherit}.elementor-search button{background-color:#818a91;font-size:16px;color:#fff;border-radius:0}.elementor-search__container{display:flex;transition:.2s;overflow:hidden;border:0 solid transparent;min-height:50px}.elementor-search__container:not(.elementor-search--topbar){width:100%;background:#eceeef}.elementor-search__input{flex-basis:100%;color:#55595c;transition:color .2s}.elementor-search__input::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__input:-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__input:-moz-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__input::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__input::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-search__submit{color:#fff;cursor:pointer;transition:color .2s,background .2s}.elementor-search--button-type-text .elementor-search__submit{flex-shrink:0}.elementor-search__icon:not(.elementor-search__clear){padding-right:0!important}.elementor-search__clear{padding-left:0!important;visibility:hidden;pointer-events:none;cursor:pointer}.ui-autocomplete-loading~.elementor-search__clear i{animation:2s linear infinite ceicon-spin}.ui-autocomplete-loading~.elementor-search__clear i:before{content:'\e823'}.elementor-search__icon{opacity:.6;display:flex;align-items:center;justify-content:flex-end;color:#55595c}.elementor-search--skin-topbar .elementor-search{display:block}.elementor-search--skin-topbar .elementor-search input[type=search].elementor-search__input{font-size:32px;border-style:solid;border-width:0 0 1px;border-color:#eceaea;border-radius:0;line-height:1.5;color:#fff}.elementor-search--skin-topbar .elementor-search__toggle{display:inline-block;cursor:pointer;vertical-align:middle;color:#494c4f}.elementor-search--skin-topbar .elementor-search__toggle i{position:relative;display:block;border:0 solid;transition:.2s;width:33px;height:33px;border-radius:3px}.elementor-search--skin-topbar .elementor-search__toggle i:before{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:.55em}.elementor-search--skin-topbar .elementor-search__container{flex-direction:column;transition:transform .3s;position:fixed;z-index:9998;top:0;left:0;right:0;border:0 solid transparent;padding:20px;text-align:left;box-shadow:0 0 10px rgba(0,0,0,.1);background:#fff}.elementor-search--skin-topbar .elementor-search__container:not(.elementor-search--topbar){overflow:hidden;box-shadow:none;transform:translateY(-100%)}.elementor-search .dialog-lightbox-close-button{transition:color .5s;top:10px;right:10px}.elementor-search__input-wrapper{position:relative;display:flex;align-items:center;flex-basis:100%}.elementor-search__input-wrapper .elementor-search__input{width:100%;height:100%}.elementor-search__input-wrapper .elementor-search__clear{position:absolute;right:0;height:100%}.elementor-search__label{color:#777}.elementor-search__products{left:auto!important;z-index:9999}.elementor-search__products:empty{display:none!important}.elementor-search__products .elementor-search__product a.elementor-search__product-link{display:flex;align-items:center;border:none;border-radius:0;padding:5px}.elementor-search__products .elementor-search__product a.elementor-search__product-link.ui-state-focus{margin:0;border-radius:0;background:0 0}.elementor-search__products .elementor-search__product-image{align-self:flex-start;margin-right:10px}.elementor-search__products .elementor-search__product-description{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;font-size:.8em}.elementor-search__products .elementor-search__product-price del{opacity:.66}.elementor-search--skin-topbar .elementor-search__products:not(:empty){position:static;display:block!important;max-width:100%;border:none;border-radius:0;background:0 0}.elementor-email-subscription{display:inline-block;width:100%}.elementor-field-type-subscribe{display:flex;align-items:center}.elementor-field-type-subscribe input[type=email]{flex-basis:100%;width:100%;font-size:15px;color:#373a3c;background:#fff;border:1px solid #818a91;border-radius:0;transition:.5s}.elementor-field-type-subscribe input[type=email]:focus{outline:0}.elementor-field-type-submit button[type=submit],.elementor-field-type-subscribe button[type=submit]{border:0 solid;cursor:pointer}.elementor-field-type-subscribe button[type=submit]{margin-right:0!important;font-size:16px;color:#fff;background:#5bc0de;border-radius:0}.elementor-field-type-gdpr .elementor-checkbox-label,.elementor-field-type-gdpr input[type=checkbox]{margin-left:0!important;vertical-align:middle;vertical-align:-webkit-baseline-middle;vertical-align:-moz-middle-with-baseline}.elementor-form-spinner~span[class*=icon]{display:none}.elementor-field-group .elementor-field{width:100%}@media screen and (max-width:767px){.elementor-mobile-layout-multiline .elementor-field-type-subscribe{display:block}.elementor-mobile-layout-multiline .elementor-field-type-subscribe button[type=submit]{margin-left:0!important}.elementor-mobile-layout-inline .elementor-field-type-subscribe button[type=submit]{margin-top:0!important}}@media (min-width:768px) and (max-width:1024px){.elementor-tablet-layout-multiline .elementor-field-type-subscribe{display:block}.elementor-tablet-layout-multiline .elementor-field-type-subscribe button[type=submit]{margin-left:0!important}.elementor-tablet-layout-inline .elementor-field-type-subscribe button[type=submit]{margin-top:0!important}}@media (min-width:1025px){.elementor-layout-multiline .elementor-field-type-subscribe{display:block}.elementor-layout-multiline .elementor-field-type-subscribe button[type=submit]{margin-left:0!important}.elementor-layout-inline .elementor-field-type-subscribe button[type=submit]{margin-top:0!important}}.elementor-sticky--active{z-index:99}.elementor-sticky.ce-sticky--hide{transition-delay:.2s!important}.elementor-item:after,.elementor-item:before{display:block;position:absolute;transition:.3s cubic-bezier(0.58,0.3,0.005,1)}.elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{opacity:0}.elementor-item-active:after,.elementor-item-active:before,.elementor-item.highlighted:after,.elementor-item.highlighted:before,.elementor-item:focus:after,.elementor-item:focus:before,.elementor-item:hover:after,.elementor-item:hover:before{transform:scale(1)}.e--pointer-double-line .elementor-item:after,.e--pointer-double-line .elementor-item:before,.e--pointer-overline .elementor-item:after,.e--pointer-overline .elementor-item:before,.e--pointer-underline .elementor-item:after,.e--pointer-underline .elementor-item:before{height:3px;width:100%;left:0;background-color:#55595c;z-index:2}.e--pointer-double-line.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-double-line.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-overline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-overline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-underline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-underline.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{height:0;width:0;left:50%}.e--pointer-double-line.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-overline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-underline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{top:10px}.e--pointer-double-line.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-overline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-underline.e--animation-drop-out .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after{bottom:10px}.e--pointer-double-line.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-overline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-underline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{top:-10px}.e--pointer-double-line.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-overline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-underline.e--animation-drop-in .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after{bottom:-10px}.e--pointer-double-line.e--animation-none,.e--pointer-double-line.e--animation-none .elementor-item,.e--pointer-double-line.e--animation-none .elementor-item:after,.e--pointer-double-line.e--animation-none .elementor-item:before,.e--pointer-double-line.e--animation-none .elementor-item:focus,.e--pointer-double-line.e--animation-none .elementor-item:hover,.e--pointer-double-line.e--animation-none:after,.e--pointer-double-line.e--animation-none:before,.e--pointer-double-line.e--animation-none:focus,.e--pointer-double-line.e--animation-none:hover,.e--pointer-overline.e--animation-none,.e--pointer-overline.e--animation-none .elementor-item,.e--pointer-overline.e--animation-none .elementor-item:after,.e--pointer-overline.e--animation-none .elementor-item:before,.e--pointer-overline.e--animation-none .elementor-item:focus,.e--pointer-overline.e--animation-none .elementor-item:hover,.e--pointer-overline.e--animation-none:after,.e--pointer-overline.e--animation-none:before,.e--pointer-overline.e--animation-none:focus,.e--pointer-overline.e--animation-none:hover,.e--pointer-underline.e--animation-none,.e--pointer-underline.e--animation-none .elementor-item,.e--pointer-underline.e--animation-none .elementor-item:after,.e--pointer-underline.e--animation-none .elementor-item:before,.e--pointer-underline.e--animation-none .elementor-item:focus,.e--pointer-underline.e--animation-none .elementor-item:hover,.e--pointer-underline.e--animation-none:after,.e--pointer-underline.e--animation-none:before,.e--pointer-underline.e--animation-none:focus,.e--pointer-underline.e--animation-none:hover{transition-duration:0s}.e--pointer-double-line .elementor-item:before,.e--pointer-overline .elementor-item:before{content:'';top:0}.e--pointer-double-line.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before,.e--pointer-overline.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{width:10px;left:-20px}.e--pointer-double-line .elementor-item:after,.e--pointer-underline .elementor-item:after{content:'';bottom:0}.e--pointer-double-line.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after,.e--pointer-underline.e--animation-slide .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):after{width:10px;left:calc(100% + 20px)}.e--pointer-framed .elementor-item:after,.e--pointer-framed .elementor-item:before{background:0 0;left:0;top:0;bottom:0;right:0;border:3px solid #55595c}.e--pointer-framed .elementor-item:before{content:''}.e--pointer-framed.e--animation-grow .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{transform:scale(.75)}.e--pointer-framed.e--animation-shrink .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{transform:scale(1.25)}.e--pointer-framed.e--animation-grow .elementor-item:before,.e--pointer-framed.e--animation-shrink .elementor-item:before{transition:opacity .2s,transform .4s}.e--pointer-framed.e--animation-draw .elementor-item:after,.e--pointer-framed.e--animation-draw .elementor-item:before{width:3px;height:3px}.e--pointer-framed.e--animation-draw .elementor-item:before{border-width:0 0 3px 3px;transition:width .1s .2s,height .1s .3s,opacity .12s .22s}.e--pointer-framed.e--animation-draw .elementor-item:after{content:'';top:initial;bottom:0;left:initial;right:0;border-width:3px 3px 0 0;transition:width .1s,height .1s .1s,opacity 20ms .18s}.e--pointer-framed.e--animation-draw .elementor-item-active:after,.e--pointer-framed.e--animation-draw .elementor-item-active:before,.e--pointer-framed.e--animation-draw .elementor-item.highlighted:after,.e--pointer-framed.e--animation-draw .elementor-item.highlighted:before,.e--pointer-framed.e--animation-draw .elementor-item:focus:after,.e--pointer-framed.e--animation-draw .elementor-item:focus:before,.e--pointer-framed.e--animation-draw .elementor-item:hover:after,.e--pointer-framed.e--animation-draw .elementor-item:hover:before{width:100%;height:100%}.e--pointer-framed.e--animation-draw .elementor-item-active:before,.e--pointer-framed.e--animation-draw .elementor-item.highlighted:before,.e--pointer-framed.e--animation-draw .elementor-item:focus:before,.e--pointer-framed.e--animation-draw .elementor-item:hover:before{transition:opacity 20ms,height .1s,width .1s .1s}.e--pointer-framed.e--animation-draw .elementor-item-active:after,.e--pointer-framed.e--animation-draw .elementor-item.highlighted:after,.e--pointer-framed.e--animation-draw .elementor-item:focus:after,.e--pointer-framed.e--animation-draw .elementor-item:hover:after{transition:opacity 20ms .2s,height .1s .2s,width .1s .3s}.e--pointer-framed.e--animation-corners .elementor-item:after,.e--pointer-framed.e--animation-corners .elementor-item:before{width:3px;height:3px}.e--pointer-framed.e--animation-corners .elementor-item:before{border-width:3px 0 0 3px}.e--pointer-framed.e--animation-corners .elementor-item:after{content:'';top:initial;bottom:0;left:initial;right:0;border-width:0 3px 3px 0}.e--pointer-framed.e--animation-corners .elementor-item-active:after,.e--pointer-framed.e--animation-corners .elementor-item-active:before,.e--pointer-framed.e--animation-corners .elementor-item.highlighted:after,.e--pointer-framed.e--animation-corners .elementor-item.highlighted:before,.e--pointer-framed.e--animation-corners .elementor-item:focus:after,.e--pointer-framed.e--animation-corners .elementor-item:focus:before,.e--pointer-framed.e--animation-corners .elementor-item:hover:after,.e--pointer-framed.e--animation-corners .elementor-item:hover:before{width:100%;height:100%;transition:opacity 2ms,width .4s,height .4s}.e--pointer-framed.e--animation-none,.e--pointer-framed.e--animation-none .elementor-item,.e--pointer-framed.e--animation-none .elementor-item:after,.e--pointer-framed.e--animation-none .elementor-item:before,.e--pointer-framed.e--animation-none .elementor-item:focus,.e--pointer-framed.e--animation-none .elementor-item:hover,.e--pointer-framed.e--animation-none:after,.e--pointer-framed.e--animation-none:before,.e--pointer-framed.e--animation-none:focus,.e--pointer-framed.e--animation-none:hover{transition-duration:0s}.e--pointer-background .elementor-item:after,.e--pointer-background .elementor-item:before{content:'';transition:.3s}.e--pointer-background .elementor-item:before{top:0;left:0;right:0;bottom:0;background:#55595c;z-index:-1}.e--pointer-background .elementor-item-active,.e--pointer-background .elementor-item.highlighted,.e--pointer-background .elementor-item:focus,.e--pointer-background .elementor-item:hover{color:#fff}.e--pointer-background.e--animation-grow .elementor-item:before{transform:scale(.5)}.e--pointer-background.e--animation-grow .elementor-item-active:before,.e--pointer-background.e--animation-grow .elementor-item.highlighted:before,.e--pointer-background.e--animation-grow .elementor-item:focus:before,.e--pointer-background.e--animation-grow .elementor-item:hover:before{transform:scale(1);opacity:1}.e--pointer-background.e--animation-shrink .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{transform:scale(1.2);transition:.3s}.e--pointer-background.e--animation-shrink .elementor-item-active:before,.e--pointer-background.e--animation-shrink .elementor-item.highlighted:before,.e--pointer-background.e--animation-shrink .elementor-item:focus:before,.e--pointer-background.e--animation-shrink .elementor-item:hover:before{transition:opacity .15s,transform .4s}.e--pointer-background.e--animation-sweep-left .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{left:100%}.e--pointer-background.e--animation-sweep-right .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{right:100%}.e--pointer-background.e--animation-sweep-up .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{top:100%}.e--pointer-background.e--animation-sweep-down .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{bottom:100%}.e--pointer-background.e--animation-shutter-out-vertical .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{bottom:50%;top:50%}.e--pointer-background.e--animation-shutter-out-horizontal .elementor-item:not(:hover):not(:focus):not(.elementor-item-active):not(.highlighted):before{right:50%;left:50%}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:after,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:after{top:0;left:0;right:0;bottom:0;background:#55595c;z-index:-1}.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:before{top:0;bottom:100%}.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:after{top:100%;bottom:0}.e--pointer-background.e--animation-shutter-in-vertical .elementor-item-active:before,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item.highlighted:before,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:focus:before,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:hover:before{bottom:50%}.e--pointer-background.e--animation-shutter-in-vertical .elementor-item-active:after,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item.highlighted:after,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:focus:after,.e--pointer-background.e--animation-shutter-in-vertical .elementor-item:hover:after{top:50%}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:before{right:0;left:100%}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:after{right:100%;left:0}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item-active:before,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item.highlighted:before,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:focus:before,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:hover:before{left:50%}.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item-active:after,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item.highlighted:after,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:focus:after,.e--pointer-background.e--animation-shutter-in-horizontal .elementor-item:hover:after{right:50%}.e--pointer-background.e--animation-none,.e--pointer-background.e--animation-none .elementor-item,.e--pointer-background.e--animation-none .elementor-item:after,.e--pointer-background.e--animation-none .elementor-item:before,.e--pointer-background.e--animation-none .elementor-item:focus,.e--pointer-background.e--animation-none .elementor-item:hover,.e--pointer-background.e--animation-none:after,.e--pointer-background.e--animation-none:before,.e--pointer-background.e--animation-none:focus,.e--pointer-background.e--animation-none:hover{transition-duration:0s}.e--pointer-text.e--animation-skew .elementor-item:focus,.e--pointer-text.e--animation-skew .elementor-item:hover{transform:skew(-8deg)}.e--pointer-text.e--animation-grow .elementor-item:focus,.e--pointer-text.e--animation-grow .elementor-item:hover{transform:scale(1.2)}.e--pointer-text.e--animation-shrink .elementor-item:focus,.e--pointer-text.e--animation-shrink .elementor-item:hover{transform:scale(.8)}.e--pointer-text.e--animation-float .elementor-item:focus,.e--pointer-text.e--animation-float .elementor-item:hover{transform:translateY(-8px)}.e--pointer-text.e--animation-sink .elementor-item:focus,.e--pointer-text.e--animation-sink .elementor-item:hover{transform:translateY(8px)}.e--pointer-text.e--animation-rotate .elementor-item:focus,.e--pointer-text.e--animation-rotate .elementor-item:hover{transform:rotate(6deg)}.e--pointer-text.e--animation-none,.e--pointer-text.e--animation-none .elementor-item,.e--pointer-text.e--animation-none .elementor-item:after,.e--pointer-text.e--animation-none .elementor-item:before,.e--pointer-text.e--animation-none .elementor-item:focus,.e--pointer-text.e--animation-none .elementor-item:hover,.e--pointer-text.e--animation-none:after,.e--pointer-text.e--animation-none:before,.e--pointer-text.e--animation-none:focus,.e--pointer-text.e--animation-none:hover{transition-duration:0s}.elementor-nav--main .elementor-nav a{transition:.4s}.elementor-nav--main .elementor-nav a,.elementor-nav--main .elementor-nav a.highlighted,.elementor-nav--main .elementor-nav a:focus,.elementor-nav--main .elementor-nav a:hover{padding:13px 20px}.elementor-nav--main .elementor-nav a.current{background:#373a3c;color:#fff}.elementor-nav--main .elementor-nav a.disabled{background:#55595c;color:#a1a6a9}.elementor-nav--main .elementor-nav ul{position:absolute;width:12em;border-width:0;border-style:solid;padding:0}.elementor-nav--main .elementor-nav span.scroll-down,.elementor-nav--main .elementor-nav span.scroll-up{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:20px}.elementor-nav--main .elementor-nav span.scroll-down-arrow,.elementor-nav--main .elementor-nav span.scroll-up-arrow{position:absolute;top:-2px;left:50%;margin-left:-8px;width:0;height:0;overflow:hidden;border-width:8px;border-style:dashed dashed solid;border-color:transparent transparent #494c4f}.elementor-nav--main .elementor-nav span.scroll-down-arrow{top:6px;border-style:solid dashed dashed;border-color:#494c4f transparent transparent}.elementor-nav--main .elementor-nav--dropdown .sub-arrow:before,.elementor-nav--main.elementor-nav--layout-vertical .sub-arrow:before{display:block;transform:rotate(-90deg)}.elementor-nav--layout-horizontal{display:flex}.elementor-nav--layout-horizontal .elementor-nav{display:flex;flex-wrap:wrap}.elementor-nav--layout-horizontal .elementor-nav a{white-space:nowrap}.elementor-nav--align-right .elementor-nav{margin-left:auto;justify-content:flex-end}.elementor-nav--align-right .elementor-nav--layout-vertical>ul>li>a{justify-content:flex-end}.elementor-nav--align-left .elementor-nav{margin-right:auto;justify-content:flex-start}.elementor-nav--align-left .elementor-nav--layout-vertical>ul>li>a{justify-content:flex-start}.elementor-nav--align-center .elementor-nav{margin-left:auto;margin-right:auto}.elementor-nav--align-center .elementor-nav>li:first-child{margin-left:auto}.elementor-nav--align-center .elementor-nav>li:last-child{margin-right:auto}.elementor-nav--align-center .elementor-nav--layout-vertical>ul>li>a{justify-content:center}.elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav{width:100%}.elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav>li{flex-grow:1}.elementor-nav--align-justify .elementor-nav--layout-horizontal .elementor-nav>li>a{justify-content:center}.elementor-widget:not(.elementor-nav--toggle) .elementor-menu-toggle{display:none}.elementor-widget-nav-menu .elementor-widget-container{display:flex;flex-direction:column}.elementor-nav{position:relative;z-index:2}.elementor-nav:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.elementor-nav,.elementor-nav li,.elementor-nav ul{display:block;list-style:none;margin:0;padding:0;line-height:normal;-webkit-tap-highlight-color:transparent}.elementor-nav ul{display:none}.elementor-nav ul ul a,.elementor-nav ul ul a:active,.elementor-nav ul ul a:focus,.elementor-nav ul ul a:hover{border-left:16px solid transparent}.elementor-nav ul ul ul a,.elementor-nav ul ul ul a:active,.elementor-nav ul ul ul a:focus,.elementor-nav ul ul ul a:hover{border-left:24px solid transparent}.elementor-nav ul ul ul ul a,.elementor-nav ul ul ul ul a:active,.elementor-nav ul ul ul ul a:focus,.elementor-nav ul ul ul ul a:hover{border-left:32px solid transparent}.elementor-nav ul ul ul ul ul a,.elementor-nav ul ul ul ul ul a:active,.elementor-nav ul ul ul ul ul a:focus,.elementor-nav ul ul ul ul ul a:hover{border-left:40px solid transparent}.elementor-nav a,.elementor-nav li{position:relative}.elementor-nav li{border-width:0}.elementor-nav a{display:flex;align-items:center}.elementor-nav a,.elementor-nav a:focus,.elementor-nav a:hover{padding:10px 20px;line-height:20px}.elementor-nav a.current{background:#373a3c;color:#fff}.elementor-nav a.disabled{cursor:not-allowed;color:#a1a6a9}.elementor-nav .sub-arrow{font-size:16px;line-height:1;padding:10px 0 10px 10px;margin-top:-10px;margin-bottom:-10px}.elementor-nav .sub-arrow.fa-chevron-down{font-size:10px}.elementor-nav .sub-arrow.fa-plus:before{font-family:"Open Sans",sans-serif;content:'+'}.elementor-nav--dropdown .menu-item a.elementor-item-active:not(#e),.elementor-nav--dropdown .menu-item a.highlighted:not(#e),.elementor-nav--dropdown .menu-item a:not(#e):focus,.elementor-nav--dropdown .menu-item a:not(#e):hover{color:#fff}.elementor-nav--dropdown .menu-item .elementor-item-active,.elementor-nav--dropdown .menu-item .highlighted,.elementor-nav--dropdown .menu-item [href]:focus,.elementor-nav--dropdown .menu-item [href]:hover{background-color:#55595c}.elementor-menu-toggle{display:flex;align-items:center;justify-content:center;font-size:22px;padding:.25em;cursor:pointer;border:0 solid;border-radius:3px;background-color:rgba(0,0,0,.05);color:#494c4f}.elementor-menu-toggle i{position:relative;margin:.44em .05em;width:.9em;height:.12em;background:currentColor;transition:background 0s .16s}.elementor-menu-toggle i:after,.elementor-menu-toggle i:before{content:'';display:block;position:absolute;width:.9em;height:.12em;background:currentColor}.elementor-menu-toggle i:before{top:-.24em;transition:top .16s .16s,transform .16s}.elementor-menu-toggle i:after{bottom:-.24em;transition:bottom .16s .16s,transform .16s}.elementor-menu-toggle.elementor-active i{background:0 0}.elementor-menu-toggle.elementor-active i:before{top:0;transform:rotate(45deg);transition-delay:0s,.16s}.elementor-menu-toggle.elementor-active i:after{bottom:0;transform:rotate(-45deg);transition-delay:0s,.16s}.elementor-nav--dropdown{background-color:#fff;font-size:13px}.elementor-nav--dropdown.elementor-nav__container{margin-top:10px;transition:max-height .3s,transform .3s;transform-origin:top;overflow:auto}.elementor-nav--dropdown.elementor-nav__container ul ul{padding-left:8px}.elementor-nav--dropdown.elementor-nav__container .elementor-sub-item{font-size:.85em}.elementor-nav--dropdown a{color:#494c4f;justify-content:space-between}.elementor-nav--dropdown a.current{background:#373a3c;color:#fff}.elementor-nav--dropdown a.disabled{color:#b3b3b3}ul.elementor-nav--dropdown a,ul.elementor-nav--dropdown a:focus,ul.elementor-nav--dropdown a:hover{text-shadow:none}.elementor-nav--text-align-center .elementor-nav--dropdown .elementor-nav a{justify-content:center}.elementor-nav--toggle .elementor-menu-toggle:not(.elementor-active)+.elementor-nav__container{transform:scaleY(0);max-height:0}.elementor-nav--toggle .elementor-menu-toggle.elementor-active+.elementor-nav__container{transform:scaleY(1);max-height:100vh}.elementor-nav--stretch .elementor-nav__container.elementor-nav--dropdown{position:absolute;z-index:9997}@media (min-width:768px){.elementor-nav--dropdown-mobile .elementor-menu-toggle,.elementor-nav--dropdown-mobile .elementor-nav--dropdown{display:none}}@media (min-width:1025px){.elementor-nav--dropdown-tablet .elementor-menu-toggle,.elementor-nav--dropdown-tablet .elementor-nav--dropdown{display:none}}@media (max-width:1024px){.elementor-nav--dropdown-tablet .elementor-nav--main{display:none}}@media (max-width:767px){.elementor-nav--dropdown-mobile .elementor-nav--main{display:none}}.elementor-widget-currency-selector:not(.elementor-nav--active) .current-menu-item,.elementor-widget-language-selector:not(.elementor-nav--active) .current-menu-item{display:none}.elementor-currencies.elementor-nav--layout-horizontal .elementor-nav ul,.elementor-langs.elementor-nav--layout-horizontal .elementor-nav ul{min-width:100%!important}.menu-item-type-account a>span:not(:first-child),.menu-item-type-currency a>span:not(:first-child),.menu-item-type-lang a>span:not(:first-child){padding-left:10px}.elementor-nav--dropdown .menu-item-type-account a,.elementor-nav--dropdown .menu-item-type-currency a,.elementor-nav--dropdown .menu-item-type-lang a{justify-content:normal}.elementor-sign-in .elementor-item>i{transition:color .2s}.elementor-widget-shopping-cart:not(.elementor-cart--show-remove-button-yes) .elementor-cart__product-remove,.elementor-widget-shopping-cart:not(.elementor-cart--show-shipping-yes) .elementor-cart__summary :not(div),.elementor-widget-shopping-cart:not(.elementor-cart--show-subtotal-yes) .elementor-cart__toggle .elementor-button-text,.elementor-widget-shopping-cart:not(.elementor-cart--show-view-cart-yes) .elementor-button--view-cart{display:none}.elementor-cart__toggle a.elementor-button:not(#e){color:#818a91}.elementor-cart__toggle .elementor-button{background:0 0;border-radius:0;border:1px solid;border-color:inherit;display:inline-flex;align-items:center}.elementor-cart--align-icon-right .elementor-cart__toggle .elementor-button{flex-direction:row-reverse}.elementor-cart--align-icon-left .elementor-cart__toggle .elementor-button-text{margin-left:.5em}.elementor-cart--align-icon-right .elementor-cart__toggle .elementor-button-text{margin-right:.5em}.elementor-cart__toggle .elementor-button-icon{position:relative;transition:color .1s}.elementor-cart--items-indicator-bubble .elementor-cart__toggle .elementor-button-icon[data-counter]:before{content:attr(data-counter);display:block;position:absolute;min-width:1.6em;height:1.6em;line-height:1.5em;top:-.7em;right:-.7em;border-radius:100%;color:#fff;background-color:#d9534f;text-align:center;font-size:10px}.elementor-cart--empty-indicator-hide .elementor-cart__toggle .elementor-button-icon[data-counter='0']:before{content:none;display:none}.elementor-cart__container{transform:scale(1);overflow:hidden;position:fixed;z-index:9998;top:0;left:0;width:100vw;height:100vh;background-color:rgba(0,0,0,.25);transition:background-color .4s,transform}.elementor-cart__container .elementor-cart__main{transition:.3s;position:fixed;top:0;width:350px;max-width:100%;right:0;bottom:0;padding:0 30px;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2);transform:translateX(0)}.elementor-cart__container:not(.elementor-cart--shown){background-color:transparent;transform:scale(0);transition:background-color .4s,transform 0s .4s}.elementor-cart__container:not(.elementor-cart--shown) .elementor-cart__main{overflow:hidden;opacity:0;transform:translateX(100%)}.elementor-cart__container:not(.elementor-cart--shown) .dialog-lightbox-close-button{display:none}.elementor-cart__main{display:flex;flex-direction:column;align-items:stretch;font-size:14px}.elementor-cart__title{min-height:65px;font-size:20px;line-height:60px}.elementor-cart__close-button{position:absolute;font-size:25px;width:1em;height:1em;margin:20px 0;color:#818a91;align-self:flex-end;transition:color .5s;cursor:pointer}.elementor-cart__products{overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin}.elementor-cart__products::-webkit-scrollbar{width:14px}.elementor-cart__products::-webkit-scrollbar-track{background:0 0}.elementor-cart__products::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);border-radius:14px;border:3px solid transparent;background-clip:content-box}.elementor-cart__products::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.4)}.elementor-cart__product{display:grid;grid-template-columns:25% auto 50px;grid-template-rows:75% auto}.elementor-cart__product-image{grid-row-start:1;grid-row-end:3;width:100%}.elementor-cart__product-image a,.elementor-cart__product-image img{display:block}.elementor-cart__product-name{grid-column-start:2;grid-column-end:4;margin:0}.elementor-cart__product-price{align-self:end;color:#d4d4d4}.elementor-cart__product-price del{font-weight:300}.elementor-cart__product-name,.elementor-cart__product-price{font-size:14px;padding-left:20px}.elementor-cart__product-remove{align-self:end;justify-self:end;color:#818a91;width:22px;height:22px;font-size:19px;border-radius:20px;border:1px solid currentColor;text-align:center;overflow:hidden;position:relative;transition:color .5s}.elementor-cart__product-remove>a{display:block;z-index:2;top:0;width:100%;height:100%;overflow:hidden;opacity:0;position:absolute}.elementor-cart__product:not(:last-of-type),.elementor-cart__products,.elementor-cart__summary{border-bottom:1px solid #d4d4d4}.elementor-cart__footer-buttons,.elementor-cart__product:not(:first-of-type),.elementor-cart__summary{padding:20px 0}.elementor-cart__product,.elementor-cart__summary{padding-bottom:20px}.elementor-cart__summary-label{clear:both;float:left}.elementor-cart__summary-value{float:right}.elementor-cart__footer-buttons{font-size:20px;text-align:center;display:grid;grid-column-gap:10px;grid-row-gap:10px}.elementor-cart__footer-buttons .elementor-button{border-radius:0}.elementor-cart--buttons-inline .elementor-cart__footer-buttons{grid-template-columns:1fr 1fr}.elementor-cart--buttons-stacked .elementor-cart__footer-buttons{grid-template-columns:1fr}.elementor-widget-container>.images-container,.elementor-widget-container>.product-customization,.elementor-widget-container>.product-prices,.elementor-widget-container>.product-variants{margin:0;padding:0}.ce-product-name{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ce-product-prices--layout-inline .ce-product-prices{display:flex;flex-wrap:wrap;align-items:center}.ce-product-price-regular{font-weight:400;text-decoration:line-through}.ce-product-price{display:inline-flex;align-items:center}.ce-product-price-unit{font-size:.85em}.ce-product-features{width:100%;max-width:100%}.elementor-skin-carousel img.elementor-carousel-image{height:auto}.elementor-skin-carousel.elementor-pagination-position-inside .swiper-container-horizontal>.swiper-pagination-bullets,.elementor-skin-carousel.elementor-pagination-position-inside .swiper-pagination-fraction,.elementor-skin-coverflow.elementor-pagination-position-inside .swiper-container-horizontal>.swiper-pagination-bullets,.elementor-skin-coverflow.elementor-pagination-position-inside .swiper-pagination-fraction{bottom:5px}.elementor-skin-carousel.elementor-pagination-position-outside .swiper-container,.elementor-skin-coverflow.elementor-pagination-position-outside .swiper-container{padding-bottom:30px}.elementor-skin-carousel.elementor-pagination-position-outside .swiper-container-horizontal>.swiper-pagination-bullets,.elementor-skin-carousel.elementor-pagination-position-outside .swiper-pagination-fraction,.elementor-skin-coverflow.elementor-pagination-position-outside .swiper-container-horizontal>.swiper-pagination-bullets,.elementor-skin-coverflow.elementor-pagination-position-outside .swiper-pagination-fraction{bottom:0}.elementor-skin-carousel.elementor-pagination-position-outside .elementor-swiper-button,.elementor-skin-coverflow.elementor-pagination-position-outside .elementor-swiper-button{top:calc(50% - 30px / 2)}.elementor-skin-slideshow .elementor-main-swiper{height:auto;position:relative}.elementor-skin-slideshow .swiper-zoom-container{cursor:crosshair}.elementor-skin-slideshow .ce-swiper-dragging img{cursor:grabbing}.elementor-skin-slideshow .elementor-thumbnails-swiper .elementor-custom-embed-play i{font-size:50px}.elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide{cursor:pointer}.elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide:after{content:'';position:absolute;top:0;bottom:0;left:0;right:0}.elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide.swiper-slide-active:after{pointer-events:none}.elementor-skin-slideshow .elementor-thumbnails-swiper .swiper-slide:not(.swiper-slide-active):after{background-color:rgba(0,0,0,.3)}img.elementor-carousel-image{width:100%;height:100%;object-fit:cover;position:relative}.elementor-carousel-image-overlay{position:absolute;pointer-events:none;top:0;left:0;display:flex;align-items:center;justify-content:center;text-align:center;width:100%;height:100%;padding:20px;color:#fff;background-color:rgba(129,138,145,.8);transition:transform .5s,opacity .5s}.elementor-carousel-image-overlay i{font-size:21px}.swiper-pagination-bullets{color:#fff;cursor:default}.swiper-slide{border-style:solid;border-width:0;transition-property:border,background,transform;overflow:hidden}.swiper-slide:not(:hover) .e-overlay-animation-fade{opacity:0}.swiper-slide:not(:hover) .e-overlay-animation-slide-up{transform:translateY(100%)}.swiper-slide:not(:hover) .e-overlay-animation-slide-down{transform:translateY(-100%)}.swiper-slide:not(:hover) .e-overlay-animation-slide-right{transform:translateX(-100%)}.swiper-slide:not(:hover) .e-overlay-animation-slide-left{transform:translateX(100%)}.swiper-slide:not(:hover) .e-overlay-animation-zoom-in{transform:scale(.5);opacity:0}.swiper-slide a{display:inline}.elementor-swiper{position:relative}.elementor-main-swiper{position:static}.elementor-main-swiper .elementor-swiper-button-prev{left:10px}.elementor-main-swiper .elementor-swiper-button-next{right:10px}.elementor-widget-product-images.elementor-position-left .elementor-widget-container,.elementor-widget-product-images.elementor-position-right .elementor-widget-container{display:flex}.elementor-widget-product-images.elementor-position-left .elementor-widget-container{flex-direction:row-reverse}.elementor-widget-product-images.elementor-position-left .elementor-thumbnails-swiper,.elementor-widget-product-images.elementor-position-right .elementor-thumbnails-swiper{height:100%}.ce-product-description-short{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.ce-product-badges{display:inline-flex}.ce-product-badges--stacked .ce-product-badges{flex-direction:column}.ce-product-badge{padding:4px 5px;color:#fff;text-align:center;background:#2fb5d2}.ce-product-badge-sale{background:#f39d72}.ce-product-meta,.ce-product-meta--layout-table .ce-product-meta__detail{display:flex}.ce-product-meta--layout-inline .ce-product-meta{flex-wrap:wrap}.ce-product-meta--layout-stacked .ce-product-meta,.ce-product-meta--layout-table .ce-product-meta{flex-direction:column}.ce-product-meta .ce-product-meta__detail{position:relative}.ce-product-meta .ce-product-meta__detail:after{position:absolute;border-width:0;bottom:0;left:0;width:100%}.ce-product-meta--layout-inline .ce-product-meta__detail:after{top:50%;left:auto;right:0;width:auto;height:100%;transform:translateY(-50%)}.ce-product-meta--layout-table .ce-product-meta__label{min-width:108px}.ce-product-meta .ce-product-meta__label{font-weight:700}.ce-product-stock .ce-product-stock__availability{display:inline-flex;align-items:center}.ce-product-stock .ce-product-stock__availability-label,.ce-product-stock .ce-product-stock__min-quantity{line-height:1}.ce-product-quantity--view-default .ce-product-quantity__btn{display:none}.ce-product-quantity--view-default input[type=number]{background:#fff;-moz-appearance:textfield}.ce-product-quantity--view-default input[type=number]:focus,.ce-product-quantity--view-default input[type=number]:hover{-moz-appearance:initial}.ce-product-quantity--view-default input[type=number]::-webkit-inner-spin-button{-webkit-appearance:inner-spin-button}.elementor-widget-product-quantity:not(.ce-product-quantity--view-default) input[type=number]{appearance:none;-webkit-appearance:none;-moz-appearance:textfield}.elementor-widget-product-quantity.elementor-align-justify .ce-product-quantity,.elementor-widget-product-quantity.elementor-align-justify input[type=number]{width:100%}@media (max-width:1024px){.elementor-widget-product-quantity.elementor-tablet-align-justify .ce-product-quantity,.elementor-widget-product-quantity.elementor-tablet-align-justify input[type=number]{width:100%}.elementor-widget-product-quantity[class*=tablet-align]:not(.elementor-tablet-align-justify) .ce-product-quantity{width:auto}}@media (max-width:767px){.elementor-widget-product-quantity.elementor-mobile-align-justify .ce-product-quantity,.elementor-widget-product-quantity.elementor-mobile-align-justify input[type=number]{width:100%}.elementor-widget-product-quantity[class*=mobile-align]:not(.elementor-mobile-align-justify) .ce-product-quantity{width:auto}}.ce-product-quantity{position:relative;display:inline-block}.ce-product-quantity input[type=number]{width:5em;text-align:center;transition:.5s}.ce-product-quantity .ce-product-quantity__btn{width:1em;height:1em;line-height:1;font-size:15px;overflow:hidden;cursor:pointer;z-index:1;transition:.5s}.ce-product-quantity--view-stacked input[type=number]{background:#fff;padding-right:1.5em}.ce-product-quantity--view-stacked .ce-product-quantity__btn{position:absolute;right:0;width:1.5em;height:auto;min-height:3px;border:0 solid;display:flex;align-items:center;justify-content:center}.ce-product-quantity--view-stacked .ce-product-quantity__btn:hover{background-color:rgba(0,0,0,.18)}.ce-product-quantity--view-stacked .ce-product-quantity__plus{margin:1px 1px 0;top:0;bottom:50%}.ce-product-quantity--view-stacked .ce-product-quantity__minus{margin:0 1px 1px;top:50%;bottom:0}.ce-product-quantity--view-inline .ce-product-quantity{display:inline-flex;flex-wrap:nowrap}.ce-product-quantity--view-inline input[type=number]{margin:0 5px;border-width:0;width:42px}.ce-product-quantity--view-inline .ce-product-quantity__btn{flex-shrink:0;background:#818a91;color:#fff;text-align:center;box-sizing:content-box}.ce-product-variants{overflow:hidden}.ce-product-variants input[type=radio]{display:none}.ce-product-variants label{margin:0;padding:0}.ce-product-variants--layout-inline .ce-product-variants,.ce-product-variants--layout-inline .ce-product-variants__item,.ce-product-variants--layout-table .ce-product-variants__item,.ce-product-variants__count,.ce-product-variants__options,.ce-product-variants__patterns,.ce-product-variants__radio-wrapper{display:flex}.ce-product-variants--layout-inline:not(.ce-product-variants--label-inline) .ce-product-variants__item{flex-direction:column}.ce-product-variants__options,.ce-product-variants__patterns{flex-wrap:wrap}.ce-product-variants__pattern{background-clip:content-box;cursor:pointer}.ce-product-variants__texture{background-size:contain}.ce-product-variants__option{text-align:center;cursor:pointer}.ce-product-variants__count{-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;cursor:default}.ce-product-rating,.ce-product-rating--layout-inline .elementor-widget-container{display:inline-flex;flex-wrap:wrap;align-items:center}.ce-product-rating--layout-stacked .elementor-widget-container{flex-direction:column}.ce-attachment .elementor-icon-box-title{display:inline-block}.elementor[data-elementor-type$=quick-view] .elementor-section-wrap{text-align:left}#ce-product-quick-view{display:flex;padding:0}#ce-product-quick-view .dialog-widget-content{position:static!important;overflow:visible;margin:0;border-radius:0;max-width:100%;max-height:100vh}#ce-product-quick-view .dialog-message{position:relative;max-height:100vh;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}#ce-product-quick-view .dialog-buttons-wrapper,#ce-product-quick-view .dialog-close-button{display:none}#ce-product-quick-view a[data-elementor-lightbox-slideshow]{pointer-events:none}.elementor-motion-effects-element,.elementor-motion-effects-layer{transition-property:transform,opacity;transition-timing-function:cubic-bezier(0,0.33,0.07,1.03);transition-duration:1s}.elementor-motion-effects-container{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.elementor-motion-effects-layer{position:absolute;top:0;left:0;background-repeat:no-repeat;background-size:cover}.elementor-motion-effects-perspective{perspective:1200px}.e-transform .elementor-widget-container,.e-transform-hover .elementor-widget-container{transform:perspective(var(--e-transform-perspective,0)) rotateZ(var(--e-transform-rotateZ,0)) rotateX(var(--e-transform-rotateX,0)) rotateY(var(--e-transform-rotateY,0)) translateX(var(--e-transform-translateX,0)) translateY(var(--e-transform-translateY,0)) scaleX(calc(var(--e-transform-flipX,1) * var(--e-transform-scaleX,var(--e-transform-scale,1)))) scaleY(calc(var(--e-transform-flipY,1) * var(--e-transform-scaleY,var(--e-transform-scale,1)))) skewX(var(--e-transform-skewX,0)) skewY(var(--e-transform-skewY,0));transform-origin:var(--e-transform-origin-y,center) var(--e-transform-origin-x,center)}.ce-disabled{pointer-events:none;opacity:.35}.elementor-button[data-button-action=add-to-cart] *{pointer-events:none}.ce-product-description-short>p,.ce-product-description>p,.elementor-image-hotspot-description p,.elementor-tab-content p,.elementor-text-editor p{color:inherit!important;font:inherit!important;line-height:inherit!important;letter-spacing:inherit!important}.slick-slider .slick-slide-inner>*{width:100%!important;padding:0!important}.elementor-image-carousel-wrapper.featured-products{float:none}.elementor-html>body{display:block!important}@supports (-webkit-touch-callout:none){.elementor-element{background-attachment:scroll!important}}.page-content.page-cms .elementor{text-align:left} \ No newline at end of file diff --git a/modules/creativeelements/views/css/index.php b/modules/creativeelements/views/css/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/views/css/index.php @@ -0,0 +1,8 @@ + iframe { + width: 100%; + height: 100%; +} +.elementor-control-image_size, +.elementor-control-thumbnail_size { + display: none; +} +/* Hide elements */ +.elementor-panel-menu-item-finder, +#elementor-panel-elements-navigation-all, +#elementor-panel-elements-navigation-global, +.elementor-context-menu-list__group-save { + display: none !important; +} diff --git a/modules/creativeelements/views/css/migrate.css b/modules/creativeelements/views/css/migrate.css new file mode 100644 index 00000000..111eaf2d --- /dev/null +++ b/modules/creativeelements/views/css/migrate.css @@ -0,0 +1,60 @@ +@-webkit-keyframes ce-progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} +@keyframes ce-progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} +#ce-progress.progress { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: .75rem; + background-color: #e9ecef; + border-radius: .25rem; +} +#ce-progress .progress-bar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + background-color: #007bff; + -webkit-transition: width .6s ease; + transition: width .6s ease; +} +#ce-progress .progress-bar-animated { + -webkit-animation: ce-progress-bar-stripes 1s linear infinite; + animation: ce-progress-bar-stripes 1s linear infinite; +} +#ce-progress .progress-bar-striped { + background-image: linear-gradient( + 45deg, + rgba(255,255,255,.15) 25%, + transparent 25%, + transparent 50%, + rgba(255,255,255,.15) 50%, + rgba(255,255,255,.15) 75%, + transparent 75%, + transparent + ); + background-size: 1rem 1rem; +} diff --git a/modules/creativeelements/views/css/settings.css b/modules/creativeelements/views/css/settings.css new file mode 100644 index 00000000..21c55a28 --- /dev/null +++ b/modules/creativeelements/views/css/settings.css @@ -0,0 +1,6 @@ +.admincesettings.modal-open { + overflow: auto; +} +.admincesettings .modal { + overflow-y: hidden; +} \ No newline at end of file diff --git a/modules/creativeelements/views/fonts/index.php b/modules/creativeelements/views/fonts/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/views/fonts/index.php @@ -0,0 +1,8 @@ +T+wW0=%qLdv}L}cG_0mZ6t zsSyDqzOuN1ueAmP3doKiE>%QC+(FxFTYbIpz4m_Tx%X2)bUx0UGc)IR{?GrJarbm{ zat`MMeBfsQ`0(Ka006)J_FG$9+tk$5^z?Lpe}7t9T6uZ-FTeaUIXU_6-MhVe_vYp0 zjgODFw6v&Hs%Ouh)z{bGxpQaf(xt({!3u>UH8oYOR=;@h!pqAmDk_S}Wa{qO+uPgG z(J?wYYHMq|di82^b91>|-q_fvyYv?xf`6Mz64r+&tyl85Zc5t7504B_j*1Oe+HH#2 z5DN%?g#ldmG{FbLR~EQJ;_5GRu(O9~x>L3vU*aPIfPN5V#Ccd5IdR?NJFR^6+gy(= zvcb#cjCTFX;Cuw3yi@&c_8cj5p=>B5p-DWj^TrxcsNf%_y-abkIA-k**{lc{$Od9L z2`DOqBg}TL1{kp+QpP#}#xSOrgp4piAP6C1d$ZA zKAh@4u05q$bs_#zTjo%;g6}MOx?x_1)m-hD`P!l#`y|g+qnj(t7yRyFXDlcrbMIU* zdiCQmq+utE(dpOWZL#nH^{-Rd#9}+^?UBy|kMp%+aqJc5`q621+mipv`vPgEM8o1` zO)U%Yv-6A_+%K$UdgmCm@IR^2{!D1?Xe!nb>cdhfcdZS(yt|La(GgblqAMM_>@^u> zF5Dy+i-gknjiTYZ;cD%?jzV^Xp7@(JWGt30Gmc2h1rRRJG6D9IA`xVA6c!ue#*i=| zXm(n31k6BD20NCLf*c$t#DsYbgl+|m+1{w&GC&~baJ2;f9%8qocb?;Hl@SKt^M|^s zlpqRqhZ5HY)9TL)TMWoD)N zz;Az-oVazE*~MqO*8Vd?9Ce*iW=u8SI$P=uD@%e0MwZ38MJ)&|;kU|HPIw9F?Y-a4 zUQ(zhxM}h09>(G@(aX^;O&q;H*3*m~jjKj{1{`Hn z%YEVGCra?ol(^}xkCfI%(yRB!Y)s4L?HU6eB@2gES~1ZaT^b$zZCD92iFx42nvC2k z&yGSQ!a$cty;w3`#*YBE>OyEr876?c-6BGANnIY9>%;_(a}MT2FhDjNgk#O5b1Zqh z!+=Q*j%*?LUNQrtO+d^!9wh@W;A!cIMTcdfoN=L5X?2c^-INmut`0?c7TXfGq_@b3 z1Jehdrq4`Q_gt7zcE5e!)A!T6dC4JunlBvSr#$YdMo+Evjh_~VqhxUgy~g6*K#>s`{S$-(Yf}dSkd_j06DIl^n3-)`lLvmcxY4Dka3vD_Pex;OI^N%nM z1BBTYmNnlk*mZs8IJxu7Tse|4{A8qI`C*4d7v+2)-n>2dY@K>?=#N-Jf3~zkA=mg$ zM`(g3TIm{n~;6%o)MJJfr806p_=7ABM#y0}8`N?R?I=rve=YI6DwI0sCQmG>?mMFb+*U&yY^GNXVeG21h7E~`Ikkn`xo6{D(rB6;2 z-7FebFwlErD182WmmH-YKcP$~j$hb1_4Kjn=&jqC0DOO}*85Hn@bJRg`i=}XR=a>R z?dF>Exxgi9Ebi%=Mee|UCl$X*Qb3a}asFbT>!A#$FS>K8C9~smiwYxKj}lR>r3L2X zk@MB*P9I0-S+fkCG^!q%cqPE?+#B0x=L{?{R1Vtv1^_{?U7sffF~66Fo^di5j1o4S z@VU+GngxG?ME+mMcW=+3b6-E@6?fiqeseID*u#kg zH|PX6rG>0_!zFn*C#Psfz@AMKli3io4T#V81(2Lv6JG{e0iogUn-d9s-E3H1gdb3x zs$d`SCRSB@Ga&wD`45Up8Ij$a-5CV3uMe|V)!)48&BpHD!&o9F3E$5Gx>8+$fZD-jK1cktX2M7y929Ko<4i z`h2Y`LlEP+6!1Y;sI}0#g6ncxChejb2t53=PxgJg805O-#66nyFkc3+t8+vYps6a( z**T?gH8-wyJPI0@ygF)b^OZ`!s{e>|DEMtJ`~Cwv`X@>Bua=ZCwgI0gOE$$sc}V`( zkyw?lQ%pHlS|usM4=PUXme&?X<{^jwm9nQf`*QY0MJ>|NsjRDOkR#B*;6QhGuXq2@ zAfdh79t3ud-?-Oz2?)6%Wn<8jb>*3nbPQvm%_qN4M97~pI@dm6PT|me$cRpl*NokR zEb5|`uidJl(QwL?H0f8Fm%3fFqZ#)f(EZiGOI-Ifc6PVeAwRc_@-Z;Q@qF*=oBZ=7G$1h9U zR@ZqxQQ6h2BkbuSuC`qo9%+}{9@M!F$PkGAqo2;r9C{Ax*t*f@kojqG(_S$mfV|kG zLO6ZoF05mVp6YJ}XmpZJImM}94)$|_=bHvW=KL05@opQBU8 zSVakqsYlQB)YkwGMPH`xn$pk=`UFh2BY6x4C3MMdJYF=TZP4e5$xW3 z%0yW&e}ZYBVo3knGqOi7As83xKA|9Wd)+dz@|sN7kUR=aY;iZKGJ9n?N6avKVmNOs zvk35c2vk3aQy4)wWlb5|^C=lAUCRk?JaU@^$y0db%}lm{@t<%fRdnwM2d}`>6-IoCyRQ+oPE+bE~gx{CdvBcPM?gIoC-f z%78G?j#DU;g4szDJgO{M5n8^Y%Jg_<<4n!9WuYaE_{LI!dVU2!T?DmbB1pIZ>mJPM z*0?2$_x4_XO|;SAunf0{#}?I%)Hmm`R_XsS%=lmAN0PGtSt}pQ5Y?pxlIk`~9{#Zp zb@Nurvtmn-4HCk{SJ#O$l3RsUMAqXRb*)*IRbumQIh*2@>6+0u5lsQQWH357gu*=$ z;LTfrDRuWArPrf$e~9b$%6Q7eBtCF`a3qDe^-Et^&)XmnV%0>d;B{*=S~DT$WE?L@w=g+x-fK=9^U~FC^PfFjtSoNI5484Rrdie*9EjS%Z+fz46M%R$jA7=FjprxCwjWT2O=jsA#5^-w1BXpsV<^I@C+h$q)W{)CS zN-5djgaPiH7(G21TS?__0vH7nMkZjO3kxd6lqzrq;U2w%m+1_S5@oBFz`>W}o>=e2PDmwF2+%2^2|Na~3O|4!?c8*kNDAYR`98T{oXI wRm;kR;ccgj<_0bfst{IIqdo5VxUb7Dui~hoCd)pD@Zkk?;Pa1v(EmC98@j*+jsO4v literal 0 HcmV?d00001 diff --git a/modules/creativeelements/views/img/blur.png b/modules/creativeelements/views/img/blur.png new file mode 100644 index 0000000000000000000000000000000000000000..9d9bed60515e6a08175ad8363a9d94269390c652 GIT binary patch literal 11597 zcmaKSc|4Tg+y8{dV1_}Kk>ws+vd-AaHVlojMA@QZ%#3{}Ymq^NFjUGOX*HH1k?fJN zXD3TpA|Xo>k$yhk=lgwr&mYh0nLlREeeP>{U)S}%?m2VLBwnyM3u6~z2Z2B^QykVB z1Y!n`#smoS(Yt9{al_FEBG}kI_@W;vIMgMO2*MEj@I=7W$Hk3kO>`lI2Xqp3jdJ%&GJkia=S66)fZId|QLC_VqQ!_`I z`x_D6J#Z0$#ETIYms}&fT(t<|`g(v)nD&tYA7Zcz5a#3U8>AhkEB-IL+DGGmrj^8j ze~AQp>5BgsD0}k@fRSGy5l~Z9S8zq6(SU}QB3eyTMOjTAP)4EElu%kqXp{m9t&K)$ zE2Dsazr>Hc1rkWw)>xB&`#QSP6?YE~_SaTY3Jnca3{_F|3v^RLYiVgIp_G-Bl@*R8 z6oSHigI&TDe1jzZV*yJHat-wG5BBi$1^%(YpJA^HZJVs*uj?kEyG2-<2Sv=$1b;-Wxsb=6W(CA#1hG+ppS z1y@x(NsFjXQbTE>{$uBV)7L^7Ybaw3)wDD*STx#LQ&US7t%XrlHbkqLpp1=;|D$W_ z8x-u~>q`8OZ;vD2|JGIgKXtW@0*Nlceu0<#{Jj6ef(!0`!G1yRe*S=w(Z8w=$e6ph zdiee`dHSD1{a4&rVxY%$BEclk&juUPq2ATfH8MGW;X!s@;p3-%f!CvB6Kd<~+dCL&bsd!2 znZJMkI(S#=fFHv<$g5<8kQpgfIfHHWWQJH z55wh^QrMYw&2+u#n@)O4H(Q)K~$h@cAf*c7Cl+;0L1h9Jm|&LirKR@(2MR<3G*iX$7AX_BkK=a%!Y0jChv}m z8!Yk|49Cx$6R1lSsC&jNwpGiiw4Ivf9R21`R~v^27Xh>^dPV!Yre9)>rSQY`;JOcN zKm#+^&BCF)`LB;S#$O*8hW@z))Anh)^=>RYx%NX&egFQi$$pjcV4L>&#>P(pGdCZ_ z;mmh&OKTkseI;;VZlC=zuhu2R0=wb29$*Q?=9U`=9n=D)LwR1$#p?;i!SPJR9Ri;Y zQ#VbNPC;Xp4tbiKH&U6wbeUo!CR3%Gja|V!+?0sTGYRSQ7GeSsq6yNUnu4=_k=3I% zcnx;%e)@?M+mAntDC!uCSN{~%*0G|qZZZ^b=5u!NRh_ETv+?t38$X^>$__QF@$O!? zOF(<_WEN-m5~HI7v7qUbpQB8!pg#WvI`V9NXCe$TMxy0|?5-JqBYW~#>EPNm=vXl`Q^bNvU~I|b#= z^&fU;ZikgLaVCSp^E&bm$XJS=_{`1^5E3ED?St@>$a`REw!j@-!W!{TEi5V%^ZFue zOPai`XrRqTUCSh)=G2}b4j?601J)t6a4AOSiU$}T1IgP75zea- zd#EWH%@e)Kw0uUDaXLOO2O5|JXQy{Tl^awUtb&pW_Pj~XXXEUZ8he2ejwUCS6Na?s zh*xH;OjbqNhVqhBUCFNO!mf}vY_c7>c$w7~zY%~NJSMp6hc1e(DHo1V?kZGaW zvGIeJ3{M7=p+|QbLj!r*pc$3+ZqPtZI0Em} z;zpHd%Wi;k_^En;ZvaH16?r=YvlU(;Cy)FNyBC?5c?q7}9YT%vcGHVo*C_pj0||+H^YEh7Tl;kaX(AUl{`8>)LaK+MX4I9OU84>f}r6WR|wG z7w&(NG~`Urm%_ELKuIp;Bq0`d0kd1%Ntk;O)7|IyNvKK-2Q|2XP)ZsfL{b?NXKz!) zt?6CMNzD;jn0KJ9u^`9P7y<@eTsLWs^1sv=1w?u!7!j4OC`d@EzR8T_B!k}G4g#CP z(MGf)u*aRcB#$Zq&z>G=$^>OhhNpkzPF_SfmDNk$6IS*5ypKf#Vup z(uP*&TzQ}wGKAjG&GQ6G2nurCK5km<5k}9R^+n$|VBHI@G!SV=2FNVsLB^i&0?gG0 zi}D;EPeqI-S-u&#VQeaICDRjdyAwzNXWha?6kx)Z&q%}#R!Tf28eh#^_Jq(ONI4lQ z-?0o%GsrA7kWqTA8R+1v?*wN1tL&Y~_v-w{;y-q-yTj8knLRi#SqBc#)r!Fu?6z{Y z5{5KMgCg(?*%Hpy(=4))ncx={cdj~9{|H_I&m#HH-tGtF3g@XnGZ6M!ap)9*sxD2x z84G@4sfMd9#VESb4=Xr%W@zN`djt|)9yW+Huy(`gDOVUq3{Fl}l zA6Tr_=xMU^HzV6hAOYJkk?Leh>%QyZqu<6)G7RYA_ z9txCB#niIwfx&x?+KhPlQF9oNUKvJ*ZOc}qEnZmeM4gaiO?GiON0B5IsoWO(o~qcj zO-Z{-pz~V~ljQh4;a6p8!mvupj^kOfzm>u{0X9I!FoV5N-tW%1HRV39D*~w^=W+;v z1xActdr`~*zF9l=1XM(xYJ3iExe_y20by;$#NtDsoWjRvZ(Vz!RWGk&RlC zFPAxC5y#o(Vy;f6f%PE%J{CVnzv0lzLy9(THwYFumA!mfr1O z;^bjL*W-u^DOl?_K=*Yv!>~|yIQx8LHU?<3E|pGEj1$b0HYB&9yjtaz+^8(t&8)7} z%tR_XD%N4g zAplJFPj9>&!om1q0oD^F7YlmbKI?;Kc%vbh(mfP8%29-{9|X%_)od)~+`1J`Re{Ai z&|ags23O>5;m|;9(`T0>)=`u+cpt#$26u1IRwZwYo<`uS#g|WPS`nyxpXukfhdm5E zXju}3n`F#Qb0vPtcC;ZmP6M%UnV-YBjyUlMQTzz==mM@c>0z6)AeMiStb2@srJz5n zY9mL#*)}5dK2Jo?+A$M)kMR@3k!{&+tixtM#0G(Yq7A_}e=@ZhriB|vEV_@rHxp35 zsSR|>0q6?g!oCCh*PS1BLfJlEg?c@JYwQhIXUVcMpT5AQi3^pfbm@#JkztKJOqAJ6W|m6lhbKV|PqYG+GBJd>p1s`V3;Qpq zjfWKZ(HBESp7h9bscnYS)0LF0fa@5!v zrSXL-=4u(>ipx<=Emam(#qj*_>|2-&h=XP{NYDCo9-0AlQa#MoW)$?3g9UET`_vfo z7ol75neXc)dInf4b*&gYJ6(T_HedOI?b6_z^OhYAL%K2U0z7>{S3=xd>IRKAa%NiN+;=vmD0kNQh-)O!Sl6SAfOl zOV8@UzhDbh|5!n-O@k|D;9YprIA=eG`>y>JMEaMn7eY9Ge(vtM8=nT@jO|#dVA<1x^<+O_Y(faijGB2_^XnlU|oemrR7X8xItTc>^B_ZiVDe+=$?OVGs$4V! z_Df07LBS1siopqTPt^&Pqa{y)^4+o$ejW7wRgvPiZNQV6qb3s}61B)slPiAnCkwIJ zcI9Tgy-8iCgXh;Sa>Uyskbx%rx$tRjhwi6ti+RZQ?~bYI^XD9qnfF7_t>45_*wVuU zjUXaf`fDeVqrW_;OJ^IxN5IYUC(A}Lu{Fx(e$QX9kQs>PX1P!3%ScT?D3Z{gVP*i4KX%9OW}so)ru2BasVya{;H=O0C?d4= zS2{BKVZ+6ZA(_?QT*Iyqj)+w|=@HyC%@1+2?eOa_0CcKc8AKt~41M{-ea+?h(M``l;3XBhP3!_ImyrECyfD z5o1ER@VdF{xR>IvT&MqwJH(`Bvyg3rjC@n;`|AVTBj+PFE#W)`H?R-`7QIbX!cn*f zk8hAM*8D4*B9Vh)?T@}%ONpHI4eDqoGu>eSp+b(U@WK3rL#-!3%Po^ZSSyjO$h7+j z_w5>8?+cA3oK%#Q1q@w9oZ-x3wO@0T>X8JNWzLj_i|@}>cKX9M>pE?wV{6XbS0!H> zHUOBXNXNOf73N*#K?}RQlednsY;gDQ$&ht?eIBw`oDw2mT9vS77*6lf9(Fh3}Z?JH>WO;Lxjj70Z`fG5(JkfSzS33oRtz_U1(&2`} zl?CV}ebj>BN+x*oC4WEdTDd3nw==xJP`eY*DP-1&AZt?)pF`bUV?cC$wGzjNzp`Q< z-bh}pOj^FE`!q%A<`W?;>(Yo+4+le>58p|Yf}>V}Y4x*}5alRw(-e2R>$tXvygrTq zh4QvUPbW_LDn(}AHEv(0MjnWD6uEYDjyh&1a$NhfW^3*)^o`G<3B{(qf8iND{)dh& zftqKioh91pb>)dXfAkj{OzqX2`oYRmHOKhhwYBE+%_U2js(t^2QdFIBkJ?Ox2{R(42E;+CCC%Ay&?yhQI!499oPZaZjLud_K%kygb=8MOSMDeCXyU2&mEUK z*{+Q*mfy?#a^pFsVZcGf2cEHwj<4eO%UArYn<= zbCU2NZYx>qDzMZ{*DdY=!v~iWojJK{`_Vw`%2ctyr?8D*`>XZ4g4fnSg)-f{&^_0D zjpko^P!`IDhgkesW z=Z@ZVI}{tgpJ2({)FpQX#8|1=VKPkpd!Mt-$aOd*H%NFO&YTpqI^4HYADemz!bL1Q z%s;OkyR!V|6vAobvxhhM3p#0&Y0H#FqXf7_fRgM9C38};#4pOL-5)Gg4&t?xVI7WRVmZ_Dj&9Z4uk+Voe} z2YzmR%);*DZ_SyH#4QmW&Mhvk6TjxUbR+L<>|tS1b)^S0r@jb9Z1Yyl?1#};wr9$> zmG}eO&R&LnvRqhFe#g5eXC_no{#L=@PgnFFL+R1x^FfYjQLezc=*_>_#t&ugJ|=SO zSzN@WhdS&Nor^djewrmfA$~98~Y= zYcIiKxUX-otT>td@XfjZmPd;=rqmC65uZX~xzRs&^$;A@o8v~kBT$aT+_}EC z@ATTA-qoYLnjiG%cUE6h&Ti~>U#?T_XyW?T_W_2O=(p0ng_fqcZHW2*nVU}L^3wK$ zE4`{imEOq9bp-$QYg*#X7tr?uowilC?^KL_&D8$+wz$-yYoWEgiQTO%7C)t^)YbXr zUdx&ikv_|Ar3LEx)6|r`DjY7h;MvFdJH5B07#GB@@T_Q_7vS)`|>}I zUD^yNgR42hT&?CogvrqcD9>hk;ZcFFAdI1Wa> zhE0w_@jgt!pnW>(gBkmnK(|iVV5e24Ky{Vr`qOBFu=?)hiKOc+f2vLS1wW7IPcdHb zU49qIwS_*&^EBGlijlo8d$!_bTae0d(&&~|N$^8z5$(iCVQ5UQi;sZt$R&DnNq>`a z+MPEJ&a<|Moj#zst!@N|%YD+5tjdd~eq#E(OfI7eO0wCNzZ2w7!`@<&6C`5d6!dfM zFXm0toF8mQJ+6)lLY`5p`Bin1Nw~`HtY+uy!3K-XMZneJSnUbvZ$X!6l-1Fh8`gD~ zK0OQ*Sgji^VG>Hw6aEP!k<`D~Q*}HlvkpyLQZMT*zQ}DdZkB>{_-@{R%Nz5?+(bd5 z-|69+bBp#JxBlTo=5=h=yYO2F>4*i| z)j$;G8<#-dTqK97n9jb#Y^hU=y~oFTS=oii#CnJ1<9Elm>37z8LhC4%Y&MK(PH9_9 ztX*(Z{=*$lTK1O@%tXd?{L~x=&m(-fWkn_BI ztrqyfoyqs+@zJ53?To!o+Is*V!O(CU0r_FHLRZ5hJ6c^%SD zl1++*IuxZej zSD-QS$tU-(?79@x@@D6~aV**t1{Z$gnR2#!M1Iq?Iv9V^>wB_Zs%K>7a`Mg5xxiAl^I5nvn9p;yMMeV` z-=4ZdOKGrDa8xF#XrBJTeeboa+HGr|H|hj&mLXw1sV`k{(clAhqiA;OpWbNSS$w~( z7AaCXCT?hi%o=|w;KGM(i?HJS_a1Y1XXCWh`~HMHc3hPHG9mI@i%W$xzjNjW2HE>& zrABeP8ylk;^X|_Bk5OTfz$dI0!KL1HwJ@rrDh$#kLFdOeJ z!7<_7!yNq@PdnEt5lg^M^*s=jJhq@szV~~s;0g;4vIIebwX#Yg&{r)U1y3R- z3DMTx$sGJD0br&X@JJSo?=3PlIFNl|OCJOe{4#Z@e-U%2Q^Vi+%)n$1aeRAd4kjLxJ)ng|us=UeW87DeJVceZK32^k;s!3SPlzVb?-6=hL zN{H{|O+JA4&Bb_g6YtHdZeZ>iad|TJ7!&w*ODFKiwMaMOp-eH61brykzt$TNH2j&y zUTh=6>sR%wZpW@c@R{{>|IsN*hH7SBKTE2A?XpK;y`b%VAFE5_aR?*!NrMqa zi)
QvC#XDVOy49a>3GZ71>$fIp3Z-?RsmtbhzK$}MR87z4Dj>MU*A6kMeqro8D zLk!=qw{@Ct%W@3k9TRom_CaSYOoEsd-)9XHk^`sJu1wm!^(t^o>YMuRDe$-P(@6Ee z)PyWD;H+jQW%0TcOpG>IJqh7~tC5CI?)2Tr#k8I#qhfN;XSV@XO@cd|xfu0dUZTiR zcI4=M8ycNWo3uJ9*1M))VfZ$~c2(akEAd{%-JHk2W0AS2P->(;lV|n>eM-09Qns;y zKl>ROoqgtG{##F%y|+czEIpRX2#TH`zJGhUZ|YTB;2$Sxm$@u93b0U18@qspB^2x8 zsdUV_Q_|q98{Jp79wbBO2AptV^O;3?#M7R21r<}*i>NOV8O8k384iT zcoX(Y9(?+?y@g?$k5Ttpip;mV+B~aO zN%eE!Ax@4_n~$06sXX0}Nh3OSR8x;Cz+lmD80e3V#pLU>MWkUKUYk|}(^VL*(u?6-yF%Y!oc(c6eN^rjT^d%KcO7lQexD)Q__18^>WY0dNtuWt##F5aiX;31H`b1DlgKr{5M>C0^6RKJmW%bD#pCzfCgHThs!5I zBLD0SjQ~$5KGBP>!Q1AG{9bBiWu55A z_L;II{zS;HGmU2n4y7L-gCQk4h7R!~HYNc4F-?5%{oskP>k%#lTY2+Vn7%RD2~SQurfb3DgZPM#*r<(jFyKeu^0V`wsV`=mE!#%QZq+swENjr9W4v(4T z<48{_L;3RQFo)A^*@bz^;d18nG<=z-ih6a5S!|fCYQ)&7utC+`_NN6I?b<}@9-d!L znR1MJ<9N{YM456)Y&} z9V&<|;71TPLJ{E1c55LPi^p&dbt|^0&zE`f+vlKzUNM?E*PRFYS^(YxEu*2;&dVe3 zXK!)7+!Hl)6}U!ne^vIp?x3ssXZ&^7Y6YP{d?&+u*W7`&?8)Cf1|(t>J>VM2#IxSf ztw2&*Dm>W>ety6}q>V_GH5C&68k;f@wbE*hr_L;MmO1=5C*%E&FIgaUcFD9n`D))~ zJ5mb}LFYrpCCLWb??pz^51$BOhcWpAf(utgumb3HPdEtDpA=HLQ7h;$V=y_v1-=FE z_E{4L(G^Dc%^b-c(Dp<#hcc8${^leUhcKHVIXhMfr{+% z$SE~QIa$Y2u$a@aZ~{xBAI4zRt2hTYX@dOhtd?XJnGzgq&@8~?2VN1BlZ z|D?@CnU(@`$`qevT@|o{^I>D=iP)9lQ{!S?3SK?5@z$QSj@s(Ynqkb$5U{SyFoxk( z7&}KNDgnfEtL>L{&Q*dde)ED8BTa=Ataegq?7Jq@=5$9dLw{$V;d1Z4CKs| zbHp2#VniQQ+6PAPs4)mCI3+}Ji!4M?g#(=B=BEpv)q-sqyU@yi8qZ24ve$=;{#PEqhMRkP-{#H+bODfadS^ZvM>}~jYP`E_$m!qAm90%I5 z^{RHD;RvQIUo05S9?w;Xc{)DXt_Jxfrh&k&&CEfS)iYVx9xn0;#bvo=3lRc-F9|$8 zW532! zMWJEFut9dP)`gBt%K|jcCTlXpF8Gt1( zT$%CkAds99VY7~WY8ca~8OagTn)afdJbbD)5Gn%-2ooL5~LE6q**@>LYj@m0H z&|@c(ZSYh(k-qizk9sdKvG?2So??dWpwK3DG8I=I@x4k4Zrz996DqD2JUX)*Bf^Q3 z`h18s;pS{de!Pp9UEzj|*;eCi%wa=={VzoErsO*X@S7scRAOtlkfdgYN$`)~P&|Qt zDRXQL$a9o&I!>mXn}sNzmKlho@7r0(jE2WP(Bhu#O}p3hi?^h;^UoI zv;2lJQ|GjMia+7uZ!6qL^g40!D)Yq|gF-vgF=&PwWwreylQIsa263alTz5I6u2FPe z5&jiR6D(FXro6xeMvr|nm$9gP%V9{nZUT0YA`{Z;|9Vl^SKI3fG3rXmHXncwy(PQM z2+4T+KYU;Z4yg4$bdb-{yi6Hl{t$I-*keveQefczg9hJ%v4*rVKLJhdcUFH3;nv2~=ri9C3nGMXat3P)mIi z1fEqq&1ZyD!pq;r_{Tlyid3*KZl)BatNZq}N>C@GpK@-2$?`v01&iOJxB~6SIPgTS zb;K*~jQhb&BUpF1zwsBScx64CXF~~wc7>~ioz9|j$M!Cd-qCqiYf=XwET)zhauU#Q z6ewvd#T+_|E~LpVU&+F}KMyUcvgaDFu+C<637>higfUaOXi5HTeWKs3+ZjIO)?LBH z4{bFElBQe6KemV7c+z+H_ZL3Tle#f2w7?ZfSJhF+!);k-b12(75S9IS67Ni}+~xq^ z$LSzso+K{joOWF?1iUUsgL6U(MgPKLlsa%$+`0B+9?M?j5o)x|moYW+sf z&<@d7$zADaM|!p)!_pglo-7#?^^{ZG?Bw?mOj3O7MObUfJgq5(0XzkpzW;b75u;8v z#7bSEiSDcbg$dbFAFej31bMPVJ>tGHuZTkPAB<18m=Hy)@N&(8DjN5=GPZ-z>NiN6h zY5BC&X|)5}Q>+SxzP0^9DTYOlsER@x=5jaKFhb*az-%M%I?(Z*9AYv zR2e&5zwjc@rk$x@axr+y7ZnDxhOI)0Q&E`5C(3c^-5JIAxY7X+ak+T6lO>+7{jfOr zM-9CE0zLE2Wyi2mg`}OUyB~$D;*g_>|)fCW+fYH)33ok*g7XCe>B%iD_A*852+=~tAR1$?5|WRIBy!(DVQRk3~2$Y3M5 zRvXgkFU5aO(Sg?PW??fu7!o0s_ytiLESyK7b<-AFnE099$ zsde-Jdf%qiTiU*?3{yY58@t|nAUe1r)+?b`)%;m+MM2)6 zYN2YO;5Prv?V6z!zgelcipvc4^ClDTWg9J!A*{)uWOEr4lglybcX~Ipda?tW(soRU zqiH>3WwBRX%_Oit{8kJg$NZQU%6rMdiVJ}kg6qU2%k^=f@OvO0gyf0QMKB0=4GbZ* zzdrg=6;st)Q9kV9j!l>1_Wy#Ei)R>;J`=D{sP#|l)iZ&aSI-pQMdyIWnosJA-%(>YhY z>agy&Qw6`s-=f+1>oQxx>a_jkPu*7i?l!1)QLDFllV5koldhg0w!e(K?FLscBI?ci z-sEL>%={v!!)A{4^IJ@HZ(02|=@%9i^po#X{ra6&)HyX<(dkcK-uB0npD~@>5Bv4} zFN03Bq7luyd!rT6iD9bWE>%#Z*l(?V-OhbWB=7WwQ>dS);32qvZRgr~C;F4Wl~8rQ zsYeN&OX&A@dv*1UjybAMhxH&sQS;Ux|N86hlzaFRjWwzJd(Pe8?L5`5QNLxXA#Kw0 za#oMaX`kxXZ?~9go~V=P-}{qSTsu#c?uSu>v%0@_$113t!+o35{cT3HpnARGis%o&zN|KTafH=xmFm~;MB5!cwNv$c^8Jc%DtKOw%{&2AWl)#I zkoisgV2~=PsfF#W(vQpGp9F%Sz5V*{WBNrDA#_@GuQ4@SaDR;)Di`juy)}^;^h?XAreLH*itWBngypvC-Q)bGI2wDv|fZfOt9fxfjf)URuY zC8%Da=jEF{FsX(~V0pdx`C()YI3j(zx6k&tTnTC>E`xf8N?~6BL}$;BM>!DVj7w1M zEkjU0@wahz?*GIWb%xZ?={K9Ael_(9ZYCF& znRyn7G}!(9r-7oHH>tg4m_wo|kYlb{gX>Qd8F&?E2Y$PrrEv!42Y8N7B5OzcIB-64 zd$Z;yhJCxg&*}cc>3HycME3qd_ZR&U(H4$?Gtj8-i6R19@AP?jMe#X*oQfekz!_5j zy}uSimg(ELuPdn9n}*JxX*`k)jz{9c8kFSu!MPGwZWcBk!52{vM;c9M*8d$&l=c92 zf0?3fGy;Ot0cHnwe^dRCjdsA*M$fOy6_8y7%@^ut4-Dq8-=d7F4+ep7=Q;T6uX!jT z!Bh%R{D+Q&I>Yho^2#lWgTbhi`oDiAhJF)-6^uu%2>7OvT3ina8UALS+R+FmVhlYA zaY!lC-g*F#hej{UH((=>H=2%y{ayfd?P<9l)S%e4;FuG8xp;rnha=N&<)}~M%Yf%= z8GVMJE1_xd_&v>wl|BP7Q{W8-8jo0;NhQU2bWhYJdfQm0BXy_P-Vz{hFf||+&erW3 z4H6r8hSBXK!s$BDD}sNPKqtZ5G4*O$y>UQ<#eBw0H$5y}sNL+EV!s}o{TkwqiK`zH zN|`<}my3reR*>jo_z`dkzzCtgqXqP(}j{s5@0}>Dv6#VLSJ|m_Vi4TLPm#c}dTdc}fFNurbf6V@p(`SAu7oYta z;_r4z9{TCQih34+pjZKfOGb+`(6*B?3UIzgFf$M=-eClFtQB}-BRtXc>1Flti&cJ! zI1d+ye`Mwdh2jiTNyv+rz}RPk#m@pz4RwS>M`EOya=Vil0b9EetO5kU2pA#&Nk<%3`}Qln_~bt!3v=5jR@95jWh`H2%wdLC4wro@G>fUREDae5~?NE-ol`6}`vH z^&YfOdbXGrJCKP%5%o9|%@WhSZvg}p16UP{@woQ_hzJ6@zf@9yZ+4pmJ1a>HDn8** zyHYxTG`)w5T}AJ?irCBHyFqo4*s5n_#gKtf5X7S-255>)P#h-(LhKGDqc33RTA#^? zyRH~F@N`xT0OTRUN7Q@r;(fW;uO~kHh2R2I{YVcrv4jrzN%kixrwpKjjYv zfclY!?K&qWKs^*bxfRPm!j^%!g!w}T%)@134MM+sB|X$mJuK-0-~?*V0$`HB4rh4# zh_)O(7=mx5Q9h_wULi^T~*e1<7tG(2Ur%T=C)U`lVA+lX$X8z$+fuC zB^VLdkJ{K7!59Q&K#BT9cIEdKUkyA9Qw>7Q6L&OYg53=LzexgS8W0;uf8#b|r)h^2 z%S&LshGOscB7H)&XF{;v*s<9P7%|Yp^7{4>^`5F!oTH)XJ?|o}t|fNK+z~Xm*byOb z7eK>6O9G1zQrttZ(M^b1-FE|VfAPqIL-trLKs>gBcqaIqb~C=@J;dirpr9CB!ccPs zdGUP8cI8Hd2IeEs->AUvI|7(NP}B`L1H_Xc%Ld3mhHo6;bBZIuXlZ)SJBTa4vfhJC zjp8VT-An-5`9bgLBqrdS$P^3uK^d{P?C1%iW4A?n*wZ)?!wSEESiRX7mVrqyL11R~ z8N`+EFYrqi!(4r-N?Geh`7Qn^kU*(R+XaU_BJY6d$3*PSHbxcD`kM zafShzk5HVz4d_Y%cm&Xg6d$YW`RzR`7IandjRwJ-#SgM#wM?-$VBq8@7L(r7YKHzn zJ3jUdDu77C+XnO2$^HWUA1VA9xgsRyOCHqtrp0#-OatO5NNl3B02JG~0WdU%iv{}QmDrB9y5!Yh=XPd>!Qn~= zW@haA4Iz;LcdMJnc>0u#rysG{k5aqY)x{yjI!n8mv2lUjY^%YA-t&Tb59X}6VezN; zLJUlt5H!=KIL09oUa|v!3eMNy_JTnSX$%kv)_ArnXHN-&U;vFbi9e;^<&NXNE)&N! z0O-PEBzC`b7L#51>;x9Si}7`>pa4`wnRpcdvKHS5fUv(Pdl-wO4@q3|1mJHG>3a<^ z9Hd0F`~=0kI4<%MzYEO|uA=wEmm2{uP%NkSjFlhE>kLbdGs*zu2F1bmiP`RDe8g%# zBP#L#f;G&gJ~IJuF=J!!^(H9KL2QcX5crq^d`iE4EkT*zWo}}oD?vn}OtBKZC&8U3 zA^X8r8}Pe0x+PJ71{12KUB-Z$b!F0BQVsMs#-rp?j!21jFDh9}OBOkA_ z1O_-UUyIb-RE`8d_A%@m0-qS`?x6O3GI8)Pq5Q-}aV@+oA+7-R8bL;!xAQ9!e&WqO zQZWhNbbNN(iC!}CDgyZEF*76m()hQP&}Rmy(1d%FA{)m42 zj;2fE>T^^tiu>|hF;e*NmERt!ScP0q(oA2}Q}z~t6?2Er!~nH*Jn)F)PnEw>#Mc37 z`^$pW8D9fDA;8yzp&L)I6nPOde-aQ*ed+SE`0ZJpp$XfCdQYtcq(4Q2n|kR4-(j60 zX8nWI`nPCx1i*R{)cDuHIB5HLj{Y#?-_r3zf#$HRz1W@ek{LN+i!p#a79MkB9_*kr zM&{kcMa;RF394M7-czadZz7Y}7&^{=I#97j9p=y0Im;kU;h z#EBszu0j-})1B7~;2bX2ed2g@XLmTndMi5I)p{$v{tcNNZ4AbJ?{-+fw331LVmuu5 z{e{r?d+50`5cU;L&0ixH?yF_W@nXz_9ef7(P{nR8@Z0x04NY!h zV{-m@0{0rEy7o6h`hkW=vQJWb6Z3;N(q~T986)BU@$&;vG|l{i2C)Pp9+(tl zaMt#)&DOMip*S#*6&K z)cujggyZmp8t=Fsv9G!{S9D~x@qAM27g}^cn`55TS^MP*C+el%K*#K8?#@pY~O;THy=&WH&c0;rcq z_O#fGcj0 ze&5-iTpwNm18dM~ciiCa4a|DQN$$^J#@%Q^&vsw9??P&C`u@f}jz`&b{_Ib|um@UT zEBq;(oYonV+lnU$LZ5jH%*xIs<_E6kYux>rb{W>*9-+NWMD_|(<71yB zbbO|krQ+Q70#Wla@$vVKdgjbPQR~p)06MnFUp6=*oerqa+_xgru}y8?g+uVT4+B58 zH#!_5Oh#X6{W;%Zm>+Z;X)%!f8A*X8xLMZ@~Bj zyT5REt6qGwQ@qUWSqVp)rjtmI@mxsf1iAhXz`X?0bPb)bPPh2JqehvE8{9tzwkXh2 z%P_+9%hye&xuqM3>qNx;4eyxW%G#SuFfX1CGWS=kquQz3p&t>#snvKS;!sq2!#FKz z<{BzLNi0>4;_>L&#-mWf5%hm>_!w~F2+wZdVH{+u-=oe3uO(*yLFCi>&&0staptM4 zK`yl-5vq8VXmHyE?Uqh%`pkxmw%nH7#-q&b72}K~cOy3M>J`ebXl>sISa@-LtqNzb zCa3Jcp~j;H+2!rSu#bAM&ry&s(8!P;Bq7906YC(9x0 z_Yh$P3o?lF$;3F^W0SKwB!XD;7!QI}n>zpkfg{n;+!bo3GKn3(G2b z=@`bBY;;}*50!?j$NNg81=$njv^XY2FD3IZ=Yhs!EN(E|))(NM zAV&{j_4^i@p1#5Hh{A_R$(ruV51Lqo8qv?c%~LZHxx-hYb2HKjau>HgIO;pR8mP`H zy3}F4EZ_9qjj(mh(p%voG|leX+TGD%vA}*!nQez21^0L1PH`hK(uwU?5epdggY^`g zh>b@!!;lYR%`GC)W*=Ka>aT319`QZv53L+bWKEkEX}NG~AP>3Q zM&r5DeZw@Tb~G8K+m>$KM71N=+SQ^i*ysh?nsh{(_j2~_MFnU znQ=4zL#NuOnsI{LW*t@pR?#Ce_rpUaRU@kI)8|OPDN3c!20jxvs7%%^=|1y7(}7Ne zMQ4Wa%K0d8I1WzG9Hs^7!MdFMO&3EzZoGv%9%2mO&MDpXm>Q=V&CH&Q@MrraxG|(k z!LuRSjOfQAo<4p0DNnbxpQ=+qI{q#3s8Pl1ZWh(>siFsB@P zNvG(Kb1|rZF3t+wlAjnDdnVkfS%FqVyc&CG=n0cYcz!NGogzL?QcMDk$+fS7k%-D)zW0|d53Je`Y zwY_~fp7N8pU9Z!2iu`a2{}?V|dDz}K3OHEJQ5AO&ZoxyC!@Z@nwhk62!JxCp(8juf z_Xnv0K{hR!7PMvnec&i(T@s9pFhYX)uwV`sUOtBlDmxLA<^0slJy3TM>f{4IFV+)_ zy7@Cn+^KJOcb3eccc+d$)t~I@?r2wf`Ai5}%jMoZ7|n@)lve!8%;TWW~_o znQ}Nl=Oh&eOkXj_b`G;bX=`B}hvqZf^FC%Ld)U@8Pm5Dl!}0^p2~`DQ1Wlb#&eReS zHG{k^l%Vc+Dj6kEj`BFuGV%_1W*e|WPZN(}+FB{we3OqJSDdxl?%?i#7*eg;M+C%V zWo-bo=bmWk?v62X!i9^AJ;a_3mUgHzv2QV_3l-XAzCG|HU8$XUTjX4hs}m3Ed13Cu zy3m}C5?$yqBGd0e>wTP#>vuOcL;w=z!EYS0OcAm&_3IIV+%Iqtc?t8 zmJp{KRt{7q*h@6pVh==NtIz7Nv#gCw*$RZol5GXNL?;5mPS}R*Ytp}DOfQbD19s!a z%yX_2|Hd{;nDa*n8yP$?FA3)%Yz0%#90kLm!Kj|L?#((`3Lqje^;+g>2{)=h62U(< zQ41PylJjvtw2&-(P;jzNK6)~yfw7)#`Um~Eh`n*;PbknIL7XB84M%`rvxE1AV=oXz?cu$5Cdmh>+b{H| z86QjR!$?0bPJ6(b&x=}m6t>@PI!&hJ6W+P-L6Yr3StyiEVIfRBMLtOIpXB;eIG!Zk^oE8o^&Vax;?RKuKOeee-L`=x{SK87r|NRI6I zw$*zBxuZQ5b_o!%@fI8(LB1IBjp=D3#Y{ktx)e6)M>S70QNI1YB)EW1R{)P3u-KSd z0p#|otHd7hF1l0NlN_Qd;X?%YDlNvV)R*sUd*v7w>C5+47--+I*h_g}&K+#Qa!s5F z@uHY*nz#2N(uWSk+!e3o37ELs)ZOWr(Zn4Mf>u59*@&njt6ped{yeS=Cxar&H(!9; zpy;C;1wYgQ%-;cYs7rS5_X%;IEmGlO>%J1`{xbfaC&0J#bp zjAbacdN)GB-tQEX%6su=VqG9Cz^dolY=267q-6Fm1)o3ekZzk;qOz8)BJt1741sziv}u&UiyIMVtk7M9@Ku}o28Qt$rE#3`0@_m0R0425j1KrW6yye;S8o-vBpHK z!2*VQREB9kfzh4Uf&u1#CJV>d?tjex0syuPds@6B_b`pbW!AVWbArK@f zMTbSBa*fFxdC+Pd^`j{*!W!Z+W_#=sf>)PFqw9*lya(I>a~Y&x#;63OSjXBI?h&uv zp`iD4ngE>LAROl72$Tb1IHf&I5BWVByAY*Bv66a?BAAEd-g0X5EFX;#mSWA%f_%|z zu%lS}p#Ic8Enp#vQNOggj{f|wLP$hw6idZ{;%x8|@mZPdIF`8G)N4^h z>}n-uFDOnWTa6I0#9~iCWoJP9LG*h@rXT4w?zEeG@Z2^HXG5F0oHgD_DYer+> zxW*mSC}_X2Pyqy26<-rt*8$Ue6kP~|HdhcBA$Ik+h<7M(0|w|%31HHWu%1l;>X2Q> z5+6>^V6paM4+ycw9qk8}vwJB+>5jkJEWS-YKBXLV1r>lvg4bA4=8SDpjf>>}F>s(824wVJTwJUs0;7xpINL#wRavY(6qE1Paf&4#!OMEVjv_l15r2+|-IVP)UJbHm~c zR07%nUs#Q@m`XJ#I57d`Jv{2y%6~2OVT&*CFe$T)-bw#RA?2zu&7u9MIK-3UI0#dkE$T9)#5$Rir8k>y8E$Nsyuf+QfyvYHM-;c;16)G&qYQX_ zqdg$B-cz|}#85q8aIF@tZgHn#2!c_d*9IB%yDA3U7zIbRAAr3Rb2_qno^f9LYY_DH z+G_zA|FcZ+@JWgdi;96*f)bY$6NKVR;R`fhWJt`z8|pn7FvCFdt1(!VA=;la5Yqm< zLxWD}wZ3AJL|5#YxlHFQObB|;^FISHQ-c#5;PZ0+&0mE+q-IBNy?fl*Z#1uew?+)6-6oNtE zLSwLGHz?Fu&i}&KxY6mj{}J_`Yl$xaDZUVXTmUx)U^iQ-y=MtvEqoRpzh~e`Fz816 zo-)JgjdDOigueHRU}FGl>;yBQtL6zi9Xi7qULVhP2?Slp5jEanBtC}usBA;ddC4+gMQRe)HGr}k3W zpo7L>C&ajDUWoI1aS8E&H`i1k7A36~2>;KBciJvcc?s10O5z%bry8mZgaI>Vr$KQg zi;WC;AsL9L1gE1Pq7Xu@2?ickMmmbc9v^l{cvCxTCi=NZOTipo-B} zj#+UtvsWDgZtd^5mm^&X42x+m;9YjFY+fas-_tHVEMbP_PgAS__Taa_*e(DtE(NJy zs$vZd;3w95)sbBw1Gv`^!P!Kj*jT~6={-K7cs=|6;K%GxGl!4oo?!-*RJ95*3umBJfz-%0u zg)1ZT^l6G+LtN;$zmnM9S=`i+?8>T`@Jr4ZY6#Kkvl#N3;O7KA^}kTK>7l&$tb)wm z%;+w23AuMC#SqjUT-WLH5)NC6`P1}zde3Kpf9IfF{QVMf3CQmBuw9c~AY-Q?F&0!n zX8uOB!lf8$7zoU8j$Xk#q}?TSqX6DeU4=KdCi<*)vx5*{!|!rcyFeogFC`#~)nH)^ z`dw5pZ5NQ6c4fp7rz6E96+p;6)V9LE&*DBDIs3sH%$@F7yXpT&cC+(^;&-r{sq6-% z_XM!ycR?|p@l`zncUyp?;RvN(Jo^&@wnMWWG1^h;jF zE|Kno2GRAu+62~DlI9!5zo#yPyVtooT_o2iTAO_v3ewWpSun-{a zITNX`#ulyApH+OmOz+7s7wJ7(56y~I9G-lzD%WB>nxO$#@xfleY!@ilOP&LgY?bm( zT!O_M|A!6n?p7TiHdA|?(~ru`|J-SZp3z4vb{)SxyK;jiH(EEX~j}3|Mv*P8OfqHimiVZCDyQZZ-S?oDK%e^C`M~t;! z-F)904(BV1GZm~Z5NmM$-M$Z0>amX`#rH@z+mT3IG;_8}qvwZam;nxC4OkdL-?IoY; zR~4>L5maJd^Aq_4&@SMPfnNpdw+`Ze-QWc(t=#|ezzom-#6n0T{Z0n-Cx^@S8?Y-D zzr#{IFRZVAE2Y!bpn!1QNff}@3;dE9NO$gn|7oh-D1cppjDIHGUl`vALai546LJ^v z-cdKIk)g)o!;tt8>$kksYy^B^Ed6gxYOBfZ+S>0RmDB+jqel!!lG`be-6t?i-z+-f ze-7Gm7+FMOzm4BnT)eKg0FI?_D=)FVnX_=Aqg`*4qlapw^ z5YBJi^E(&Iiv!_HcHK!H0^(X4IcRkfleMqq--RgsWoOU$FZmrANWbOr&CCLsb&x#1 z(YxNfrPc|bon8UJ?_{9$TOJN9#>q(kWuV`g-IpvHK4$*sFFzFg&tEh#nZBSJCHvj^ z!w1xR{;PhMp?bl(lc*9TlAzu-U1qUsX!xsR{-R&6R(>< zg9Nfio0kkaEg4@NZGLwHWjMCF;4ZF@_=Q4s|}(`&Qh;bM;m4F&%I${u=;p ChlIHR literal 0 HcmV?d00001 diff --git a/modules/creativeelements/views/img/contrast.png b/modules/creativeelements/views/img/contrast.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed70173f7f45264a7baaf8043d55d91e786f9bf GIT binary patch literal 1218 zcmaJ>PiPcZ7~eF77D2Egmh_Sqa@2wg$K41wIX67o@lYV45!ilYdoB}u z#JX3HvMgn~or2@5>W*VKY!`}_OlV?XfIJW!C(f&79Y$61KaE|jLv7qALY0JGJuqlL ztfL(;t=+2w#fFrPaxSoGQ}AfPGwKd;qjDk3(m%Xun~H2f1V9pVrePpXB3S1#SSOqz z=@ud>O9lvZ{OpEDIV2@PDu*(;JcPwe21yX*B(WdLB~UCDJJ_-tM%Xn-C$>#vx3TDz zSS2429C?A}d83^vs0@3N7Y=(qlh3!h&Ky^(`Xz?_bgu|)J_3P?$aFx$qPFI8}RQmKY!;&%usASsC$5Q!roWpEIt zbxtQ@nnR|EQo5W0I0aaNQWWChd1;tBDmtODxU(Acu(Mpmr5hE{)d3f}ey3}9sd82; zuCK38Pft%yPOh!3EiNwBYWC147dJLG=I7^^mX_w`=1OICd3kwZVPW6f%Fkv^@AV(cPM{t{NT->KfnCPzVB3H=J4gAPp^La>^iIcbo`C=8{p#1Yd_pjzvxQj XZ;Mk`?%sMgzE#S_fx>+Mr7JH00kxYt literal 0 HcmV?d00001 diff --git a/modules/creativeelements/views/img/contrast.webp b/modules/creativeelements/views/img/contrast.webp new file mode 100644 index 0000000000000000000000000000000000000000..2328bf5ce21e49e7e981a1733ced64378b49b151 GIT binary patch literal 186 zcmV;r07d^&Nk&Gp00012MM6+kP&iDc0000l9|HgYHMp&{ZB52VOUI$q)=JuxEI{eb z2-yJ}KnJh^bOEa=9lGfI{qF>S6tr!_m_Ot0Ds0=f#msK|uP|*J1|=P@G!bjzQGuZa zLj|P#L|VA|ggW4pC`ks3J{IbVp9JRS0Bpj536QzTFa=xUPN1;OutH=DlHU%Nnf6X- ohs+5e-76OFwWr@1uNz8Yb5OJ{)Yu({NRHuwexuIFXZS-90#7DV^Z)<= literal 0 HcmV?d00001 diff --git a/modules/creativeelements/views/img/index.php b/modules/creativeelements/views/img/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/views/img/index.php @@ -0,0 +1,8 @@ +8}}go)`OKkGrpl|!l?5{%uu8@k4tXm)5SN^ZclP${>>aRi^9hM~SpT85 zr+>&N;Pwbq$&X1&%PuHw z>n7H{Z*FLAYi#LoLj_jXH{ObRgiC$;p{d3vK2{Z#~h$W>$e4x$bqXE{*?2Pa36jJ%_?tgQSG zy%_x0kWRkeo%a{NGlO4726SCg4J4-_r6DURsj03mFDIjUT~%Yl&(2rma$xVVqEs{sG6xF~8MJ&`DeHUF@zD<>{QMQ z*P-9biYr%s`*5js<)qnr1qGugSK`1*3EL^%I00VjCHp(?Tu5ijARX*i-65hEqBKX> zXhHGsdz$0!`&OsC%qj{LV_LppLpi{7wUm{EiR%#its~*g?|yIi&Hj%4ffBV6rceCl zOrFO@nB@K*{@X2or^CN014ARqfr*n!Z#KcN=ce|xIWL&A8s3J%>8%*{XRI7jCPgM{ zEGGxl#lr91YB$VxVv%9DVC9IlDYE2wZqahJ#OJHjj1CTS_4On55`LR0YY2cH(a{(# z7Ep}Y`WPAgo|l6g^-iAyP#Vb`ZQBY@ly_Zl(9FnEM)Q~H(6XXH=Nm^Z*WO=oo;v_@ex~3etgr9)f5vz*swDRWO@Y%XBG$l zJUC;Ksbo$dH(T(V8&2;K3``lr+~Le1UH>?V@H2)4CG&BokCfvDZm&bT1*>747KhmV z@_y`vaRu0tFW}I`X#0laXAi%4V6Pd!cT|VwlC5>Cjo;j-{|4p2Qz=#s?wh)thKGd1 z7vfm6=k~2AC!Pwha)_wpuQA;?@dI_vsF+RMzj5;8-S}%I6H!j@wFUkec!W_!%?jAe z>nHRMvFDgxQDHJ>Y6uq+J9Yg8W9KdSP#~PyXrB>>r@ygs=-$-k)cl2H4^s1`j?7=F zJ9#?he~f6?^|D!Rv74GOaB|w|*nh@Iml~~3L}m(iI?yh6R&0Mfd3zagFXC3)1@p_} zYBlC(g7kOGboLtF{2>oG^nV>_ZzSjG9Ak<%W(4Qm=_YmNlF0wuU!=zjGw&SUt1gZM zn+G&I?|fxA4w@a9oppuALYA6%bo_tRr3zkED@JSEWSE6NKk=)f<%AY9Qt$vHt1`cr z0uv*TS{eGDxmsdB=f#NnVSaOoCNlc@efx&feI<;Y=20YO^B=jXEQyrCv6`+~$0V5V zza$>K3jEnDMQ&c>)MMm((R;}YT6cS|{eVuNwHgKm{CL6TZ{SP8mOm?l(RGD!quA2X zk8!9UdYQ@uP@nt9@xEk~a@&>)RoO57=#Pf1nMCz|KyA6{en|MWHEE;hN4+w-bHUed zqb4idvR$m->wJUov(6K@>UQ?7Ka|#F0K(!PRn9hDHvEj2E%Wku(Jr;`3Eh@QRLhRM zA%bFFFPR`7NVz$sd_u%O@tqR`Vz^JfpDcM~t#&fV{1Ij=$mjDrqqg7jNRR!^7xPKnzjqyI(Aj!1 z=dmOR&VRN|X^NYc+FYU4;9GlVnX3Ym67fM;F~@66f@5(X?5LN35S1gH21R4Y+$}M` z&3lEzrH7B^<4hfKxFh#K!}{8DnRWM9m=+v(&J|jv;4@=8>ocMIJ)*f=#lxRomGlma3I740x4y|qT)PxMP;;8ZFy^!C2fAM;sOX|Zp^P7g*=!uVPo_tT={FU z+*!4+*;}MxE+9}z-0xaS(?Q6vMa#zY_6E*!V>RTQyvHGEpyUOJNkGm?+E@y{nI!J5 zoT8160eBsY4D-bp;)bg)FrAIChjgal=C)Tuw_G88VC#N2v6M7P9=@&Vno<$U_+m8o zF@acn%2+D?lPUekbsz#k4v#=ruhAex-LFD#<24~|L2p^pRl>9NAbFw5VRv5g;F2!} z=D1WDZn?xQ=|c0OmdBFc_#c9*;Ec`Oq5~o4g~~NoYVClFuaZh`(xCws-_qmSURFUE zUaq#Yuuka@E$cz57S|EWb_iR9KA(7Sj$@TkD|pjwsWOyr$L2OtM$()HxX^+buf#&hlg)$ktxw>3AR8+}nWc|!IM#-% zU3O%@2>dBzoBAHh`n$5*rU=jl{j%0Thd9$H^$|RJIrqwL$3)f<7` z!NrRst(g_Llt}-ZyGN>yZm?PC$XVLN<8w+U#HJ&vWE(TcP(^CPA;<&CUf@}Q$PF!t?(dFo}2(IkJz zA_v*c`K4h>aDbHoL2v*0OER=nxcIGAJf2!xrn<+dzed`42?_RLGtwP6R>QX~NEpRg z^0BC{6yy7M6YyqxcFD)UCSS82@8iupwE0S6xwAay>x3!fstHIt73P8ZgJg50E5Yjx zFFhgaRa&buWy}8(b^m#MM&Y$>vmN z#8B^Thn)DChdZVxqw2Dk+1;aSvt)TjQIP!NZy9pJ4&)VN(78I|+w%Z+Psaq)tyM`cPG)zX6Q0bJPV4$&PD@Y`(|sYOqQnXhowZ!Y_8ZIUy| z$K=iqsdps@Z~5%%8IjOAt0tRFuYn^#QFvWE!78c0m*aH+LsS1c;*dvfN|1bZg$S4B zTwvN>YsHe#cd!U+|7Z=Kqg8-T*26-umPqw(cLm#RWJlgp=g_Bo)SBb<~t1>XC z)ccl)%RoDI@I!Gmsr+tC5P#`f%Q?ko~54O^`HiYsNOTG(7euEb5o*|}X za8RHv+01&XUE3dqR+LHD=W?^ft&^w%i>YHNXs{5ZacEE-3|>VmueB&W5a27Yfn4#} zs$P+W#JPsy*6v`Sq?%bEaJ$Sy60;fuP|?LecwkxhMH&Np>kNcH!-e2vJ3AfNYGLD@ zikCRY#ppgP#!q>7Q#hvpA3r^G@KUt^#v580m6*dQ6A3Teq} zj!-F;dj4G3ve2uC!8DTs?6WKzt1NcAl&Qr<`h@r@O^5h3bPzE7Y_NyxBPnu!{jA<( z9nRK8OS(oNOncMhu!@TBbFgc6WJVz+BvDJH0w?oiFK&_sgt%`Vmp|3JfnU!AbOOri zJ=nP7>JsrIU}k+WT15dCO0=BW0aT0U?tM(7D5`|LCW;AtPNojP-SSfKPtH=h-*P1w z^PnD^5u-&rVX!=lFxY5Rl~iyWh}rLwJlxsg?YpYS9mATnX7-Axq8!>=yFf0#H|HSn z$4u)0Nu~BKP+#>Jk8`tCX`zdc5^oYLh;0ObO%N_1)zdyt1E;tz5=O=Y#;D!9zZ(=+ z=n(yu(ep?^1+VjX{a(9T1-^=W<@%5lr1jmne+6Ky-Ajv+tTHS+utjk9(v`5F4Qvdf z87r&a@T?o+Vh_Er`5yF}9io0Vow%p(Q(XW9r_|vt^p>n6v%Mj$>0j?|I~d*G zi=6Zl!q|Ml*?P7vWqkIE=JBmpO~Q{aWhqLheXbg(r2%MTYzqorFJsw2myEIswrTz> zs~?Y1Y$_(aJ*7e}e;(fI?oxvUuFvadehY>+<;7ZHvmc%qbJ9uRIj81?&($62tz0q&+4&|yrWNeRC9u!$_mKh_VH2sj%1}4*{ zVcXcf!NhF|fAbX8K+j^m{gTZ6#GqVtqWT*m@ znzn1(7R)(b0Pu~-3JB=AAoN58P4F}#D~?}YXmd*?d#j$oST)0S#lLPZfCXCu8n_+ zc^I-XR`Ozb?MXLbVn5#wHrqY(qWY^>WeZEbCzk_AmIi_O=me<4M7rS%jeRpgaBuFE zSeJPCxmO|IzCgC~hy;AZa{E&(zUM`o1oVhvrpoXm;S9TBEI{H~Ra>1z{fx zDKDxQc4nxvTOE^bL^R8_=!o2N(ANWLO?4Q z-;(vf^e71Dwd!wtAro}v4WFU;$8Ow=68`qx_d}XuUc1?OD#fkil*YNr4)L{0-Z0Em zh~^NCFB^5rV3A$s^i8muyID18=XzAXlFakCGcD>RU4swsd28a}{0XCy?d*37+c-JX z4HXF0%%G;TKnu1Im?=I884ix0jsASy3Fl(Fy9Emv{61Am^HmX&8B8hXSx}$ag`lv- zK4!vWugfN#>0wr|vv;RP4KIiL5+XoA+6*|GG?uq^LI=V%{}uU7zmW|qL8UCaq~F+q zZ3dJ`80-Lm9yR!7-*_m`{xmi(By~*^eIo7&kM4lz?0M}gFQYp9{+P|1;2sQ^+Z8~R zzB7IqJFs>E0^x$XdsrltpH8z8Deo99m-5?sO(3W0Yzi+|-!vLdGtT@jvA()D7TL)c zI-2U0h<{||Lv$UCG_XaBg>*b=QD}+d(IT{z#h6)rxihds|DzZTx5DAotDMSpbhyVJ z*b$p?YhS=SxRXw)c~4YZ%3S;SA!S=L%NU53bnko$%tw})89-ep zVxWJ8ZF`AqQ!ps7WUX)4#CQ`{xj+*t!nLq?Xb{&r6jUs!wb(1c_NC(4mpBs3O97ND zGAS7-Bvw(sw0XMnx@{7`Yewnuhx*AwMo@2a;`0ZkDq0Z>$jWCT)L+|7vLC1CvVFkgSX#d29sn#@Z zrO^}qoCGb)=1tMMv`kT#_n~vwLL^@A!02&VfW`E3lP5XZFCt~X^a3GO zZJ#!^NnoWNSi;@$`hcOzWSUP_S%|y+MmKIvboW(J`U;n&`F`-X>xZq6iMptyE3fKH zW%w6L9TuohQxIStJWFr`?(zIF=6`kA!zNEbv8ncL0gVr}^f1_X`My)$-GK-&L{Rx; z;VtNXM4HI+oRN7=+poG_9Q%|nF;>N0P503pTlT&oN#&vX9#~9>$s{^k5@PxFatQgU zR*m%T-iM6EMkraS*aMk^y&b3pTs*ULE8R#aXjlJw^1-?}f&wZ?#qc7uAyIQx+fYc31NWNgY z2B%egzuC4I(5npRvb~Dzsk>AG7I7jU@6M(rcizQsQDF%z-W_>9nq6IpkJP8KzOiD1 zf$yhmk9?$9jLC128vC0^*fQ14Z+tPR0naC`(eBprrus3qwoSuMoeSucgMLYbjpz87 z#v{trv@$@5{+`pW#bNy#RRdQEI#gVRk~fdn7+KTP&eEq7a${1WEt%xr3-F2PL3Pr7 zg4)Ufbz*x#pr+IE+AXrXCY1aEhV=$^8f5?z9`F$dyP8)*M8-;^U9^r>w=>G@3h^vU zwE5XfD#e#DTN?P|1)&stLgoq&Bu0>AAOE7tj2UTJmvUp`wx-Bk*FCKU!V!kr|| z?tQy^`Z1dgu{mJRkDs|~%{C?RkFb*@3t_}=J*{QI)QuUrrKF%9lG}uMV9vR1;eK|1 zHPG15CEFh45m;Zb+&^NK7?JBY!e~s|+K96>!2WKK- zWx`mQ7t9I{Hjl^mKVN!rk3e~Hh0??;Rxfp;60T*~cUky?O=`yox_KP0swli?uBL3i_^6j>VH_KdH5t%Z1x;<;;mnT08?PU8zj!HEc$b?v1cV$D zY#VuF3lrEqy_*vbu6!1tL_dje~IN8&Cb+W7& z_(4-!W`mw;zYux<4yE31rLZF!K((xrv9ak7JbL1437)_Kc`zHmxw%|*7jFgE=ivLA zEK|qjx9I6;f}8oheZ*g!mgRX7!W^fbIiQoebkv45V2$=9Ggh3^WSfHDd*m>tcyl`W z!DrphHgo-)VWl;MT#4C}IzRyc5eOHfX;`EmwOBMrg-{(u2V!4>`S!`%$#}}j$^wb; zJ^@NxP=Vx&PMYnHBm+!R_O8~oM&c^h(WDO=?d>?;UGtgd5nMm#y61=ULQdf`o!*d@ z^+z&)coh`KWl7L+iQgRe-IEeKGP>4gvsL&L1N+QuD_vZ!PZ4{Fo_o4J2}x^_W0bQg zoL+SD*rV&DnEG8#x*4M6LI?}}+Ym)O`UNh6!xe;$Gc}-Z1J^b*k2K(9-tZ=r2Z%dk z$xRCn6KB=%ngO;KAv+4lsb_P<4lU54LwN9Vy(Gu@)I+z;3ip4OxsV?WjK2&`0L`jasxdmNeXr z7PiyC76WoG`cKhUKYXmNGTJZNlTY48e9#ZZ7yyooKmuiY#3*~TeU~ii?&|nsz>&M) z`{kEAH-LzJ{?+?vN<%VWEWmcXS#*HW0xfpT8^eNec)^ANEk02l;w*~=^zlQ{;ACUp z9AO29$FPn#Q;>8Q&(W|wk1Z*K%!QV>6ID;Rh9*dfvlg=_a!gt>3ZkR(S00{LmCt9f z3%ba7G}m?KI;1bCGwe_-dt{|xeG@Qu-8h;+%1gp$ct}&EyDpaTP2n8(yrz+(pyLUN z*1-zN<5>ZcXGa(d^r~}dbTR?Z1l|>_1Ig~L&^%!FyR#mqzgo7-~-TVl{6!4vVx zJKrvyP-PmlssCVX0X()r_w_c0O(o>HB8Pw}srBWeBHA$8i$_+sqe*Y_-DNHyJmx0{ zM@D>EOqA^Ss(5(qX_sCPzN$Cbm%M-ogS*$%Quqf;{7Qo4T~{H7P@ClEch3gBq!i*2 zO}6XCHY2-%K1j(@VM;?MG?*iwx-ndWzELq0>&gfeyI7Tvhtxt%OSia2Jr+sj+q%?K zRb@MM-;S}q!XsaimnWP(=9ix^eU!F4Ke%JCQ->^ntE)rAHv>g^MG-xh1fss9`+FCEAXBK3)r1Z@pY`&?$ zZRVCrK{?;)H0UAhCLf(vvgMiiYSp@asEU~mFA7>lNKm6nr$D^@ejX;x`1x3R^)maR zZrR|n3nhq+xeDb5Pq`+8>q!3c) zi%EJ#jd4?;>+t-+{Gyrk$8#pT>w$U`)}iwawmZ{xtT$Kk+RSC9uW%Jrm#K#NAbl5+ zd`j+Jo1_Xe(bYPdRf5Twl9FK6^UWB$-8c0&g~#7~R_ZfeEnPmyVK*?)3AVNQ%2i#5 z8gGAlR)rojHkMaiG*A)2HDD!o%z~$=rmXaHMa^JOsY%D(6vn;H_;hFF&U|EdthKJq zaNW5YX@${xaIaN;MGpv7yCrVQ-+8s<7Q0-gV*DnEs)aIUnq{0O+on!>-7Y*Hfi{1~ z49%Fyqmz=jBY^8Aw^pS$E^VOgU{$lrOTy>CQWK*hUPaT&uiXUpo`ox-_-R*R}Ba|4n>!NMu# zL+tY6cMR5fBSR-0`Z9XD$pBpsrY-~5Jz7M1^zFKsAdwccOZqhjXLF(LRVQ!XYvEnW z?5>GAp~f(tW<0#$W}Y^mNm}~Mc#cajVkpMM#ZdnL`WxK8zXAID+o%79Z=dL36npV1 Upo>KQ{<$(lQ~z3#x_$Wn1L-u4n*CKoO#d8nRDiy_uqM~p{m+Jfq`M9qNr!6Ckd+g*9%wo4`K|4<+-e6%guO} zh|&`*H;vt3zl!7Gi)eDeS-UL0Bd2$L-02Rv__IpxB{JGB`ewByS9;kmXt_g{{T-DT zKLK9`VCb1L-O^V8ZXY@E7K)E5+FDgeStPoYJZZbhh0y_B>)9F1VT%<@)*QV}uuFRP z=L;=wIaxu$x&fzzW7-_pJW(Z3+;ySJ(W%MBjF%T1IB3&IV}2c2cM_Yfi&!gZt1#Y7^inXpZxsB%q8Me`niIx`*eAg}t9mg{VOoq$n^a z_7FUy>*{BkkM}X?o6r9%4t5{9c}e`bB|Fyw;Oac5huT5got2y<3wLkNI+}B+Y#z#X zI++S_kByklT==PtCysnw&G>r!4F>}leuSX^t6HAJX}`aA=gwWMZ_9YtKg?9GaTx_z zKJNamSnp`=MvaIX!H%;91dMW9+svEIP1Ly8t#JM+^Oy2Ut*TWI``wYtns8nI*4B!16^4J%0Klpz^i;s}&)4Blt zn|55qp>uz>-5*<3)<6EcxFh!{P&)$*zZW0swyJ)->|UpyuQp=2&$B8uXnagzx!O^Y z4{qOPxz(4m#6mR-2>$8|?!Xvw58xevzD*M+F6mn#LUg_Uqiav&Pnx{Kv!q1jLK zzw9NFrztx|@*-YxAnXqbJ0|C73gym60;%BVsr3yDZruykt`5*4R*+9o4hfRQ0>D?dpx8G~&`U19b(!7^y zEF>q}Mqj$zCvJ1rT3+J=b};etjd72)L)It3Bbu50(jg4YLMqxRfxqkM0O@3i8wC8% zCGvbEcn^i)KDr_}%E$5e<1sxi|HVMY6cPNs1z;Pp@AZ8Q;j-xJV=0d9U>8ijWBN3e z1t^GQqhfZD6mJD=AS5V6bBKp?a4h?0CCt{C%9QjsY zmhZ>2gqpO05K(N${f4ED}IdskdlV{AQ_S*p@B_?$bR z<8 zpiVB=7^K*`KY$&t*i6;QTh4_$d?K-L;lZr?-koHj=sW?>yPWpSti5ACqdpMnWpO%ML`&#>P3GdcBUslwMRqOm zjZtceoo73v9yra|6!!VGr=`;q{8sj(H z_Z*oV^!2dj>rv)?7%@^#m}|L`Z813$Y*6!@KIbNy(8N_tUFsVFj!)g-f?wMdKdjsl~Im8u$K@gH^c_8u7tJeQz0@ zW87rM(yL7GahgU`D=HETd7hv6$qiZev%@CA;OTGcUFE7Z`kpcxSkTD>>oRYo(35y* zjkic|KO%M@+jl8XB52_7dJ#OO_%R~MKPI%#*|QiAcBl+Kg*yAs-30B9dMDu?*njT` z{%%-?N@3#FR-pE&s3&a&f5SeO)h_X4E3kGL$zpHkh&SNi4&_v?Tch%1Hk31p{ykMs z6uAqIG8{^~B5UrqPR?72?~ld3lJ+9mxGjw|Q8?_|YoV0zH)RcQdAIrJ_E(%Hmr;oh zNO0an7x4Q`YNDmy{5{(2g$}hC647;AXV+d@^nSXR9np%w%>wPq;3!gY%kA*OjMWvY zrCBR7N;cD9XJxg7&p&I7h2Je^8%ez>MOE4+3}K7hUJKZ6?WVe}5MEkTHGHsiQ-eC@ zooP0~O+CEvx|=*rK5XMrg~{}=Qyp(Ouq1~Iw#e5M&Y(Rt0uOHL1SC>VJRverIT!LqViBN zac9D4T&r(VE)DT##Qvpe>4W19X^?k~9rEL~?2ldP?nBuZt+u32!k5V!z6e z0WObMf2Nj$hD*LH15hMpP3*^bwxt*0PyE6Z@LanDSB5k-)WPcbk>_i4ki2%>#d8m{ z4AHk(zRIzLxHl-=StEkk6|VW{fxKfjR^E@nF*<+=H;8T<-y0F~MR&2q6K_5Ijs+Hj%?yjCl(cOze3;ugD|bdJbG6XG#8G|$533jCCi+R(b7ECYm1sr~Yn!>3 z3~KSNU>`_!Iy!6Vt3@=d`3tMEvcez+)8CB`=qFpf|EDs%{Ie9WngSNzgP*@peRZ;i@*ju=udhFO$Y zpIpHS+_)^%$Q>pB@o^0YTtVuPJg;rd^X;>w)Ig1l7@Ju7#c=wsF&n2 z1j`36zHKXu6N3K$eH=D&Tq)HVYr%oNIUsQGO?>;6-`7Ln2dWF6{fX1wkvI5e#vLYXnRP9QB0Wz{Mrqu_rk#&XM5)AmMl zAnus+H36#T2ro9%V*d6p#AQ1J(QD0Ak(@W>I zC1E6x1ubqCv<&h8{S=DUF60#Kl;jq6b=c+ zt^ei*HUX5nx_5(z3@L;o48APfoh2`Lv@eaSL7eoo5I_3x>rS6c-4w6t!b)Q$*DyGw zu19L`?$V=(WG@a)eCuApDiImPN=*}1AF*iVtKegSsB}k_V=7NY`TnD>bvyF;;YJ8b zAC0!_x-uyqYU8#gp2agpd8oJ zJCoZ)gRX-b#ET!p-u~a6=4-3tZA@Z&awUa4Vs`noyuX`D_fZSP9-2;7Y4xciWLom)b=2rWjm9(Cj-%#_J5g(VsOQ!>icW31T6G{=$ZqX zqyjfZe(N*%TkhD-vdQdB=3-3^B+nt1OEKPA6E1wTYsh_o!0de4Qqmls=U_LH@c}vd z;+@Y>`B6ssA*@^nQ`C_{Hoy6$w7~#*2MgKH95bh~FCgW*cXY+F&i$6%ZM`71bdNRF zlPTLkEELVXaLmo7)jih5OWIK!A0_~P2Yk@gll#NH)vf zr|gI9b7u^}I#STRaG#f=L%uK5jGs>hz-9e>q+gG|jM5F-`&kJ-xM$tbSvpV>ksSOj zzTFxT5TvVLs+nImKzD61R-Eyj&=B@FdoW(#{5FJhg#`8)Bq!bPleWxLk4Lpy*JO0p#E{VcvbWb4sy%cLusJT93NKtQNQ8(SQU@@3= z2HEVOeFf@SQB3;4Z7?xD#LV#XX0kHqh7X+Z25uvpOkl2QCDgXKg}*bc*E=hc_F(Hv!76$?d-~!eViGINEaI~6UB~z@dE|ego(@q zp{~Py$Z6Lh{NhZCUY{`VYrZ)%d^suPecG&q6!NyR_S3~1*%&r`5XVoNb8%2vTmraV z;mTroMf8CSphYSWGxpSGT!gH+?}otwhi;#6#MxpAXOW?;z4zM!g>h(!sm5BX zn`E_D*!vXfitWk~^0Goc@A^%VfA7$|`mugMBhI8xO|`oX` z&9Hy&B%Gb1qa=1bLqZC>w4trYqP;hRkmm@+^fXpF@HveF|L)xS%bo%~m0AEz42;4T z<32A!dg9SlDI0q$yj|I3TMplv4`)1^mPC;roC8QDVC=ZnU=DCQeZRV + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/arrow.svg b/modules/creativeelements/views/img/shapes/arrow.svg new file mode 100644 index 00000000..79c89e87 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/arrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/book-negative.svg b/modules/creativeelements/views/img/shapes/book-negative.svg new file mode 100644 index 00000000..82194692 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/book-negative.svg @@ -0,0 +1,3 @@ + + + diff --git a/modules/creativeelements/views/img/shapes/book.svg b/modules/creativeelements/views/img/shapes/book.svg new file mode 100644 index 00000000..336dcdde --- /dev/null +++ b/modules/creativeelements/views/img/shapes/book.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/clouds-negative.svg b/modules/creativeelements/views/img/shapes/clouds-negative.svg new file mode 100644 index 00000000..73bbbe86 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/clouds-negative.svg @@ -0,0 +1,3 @@ + + + diff --git a/modules/creativeelements/views/img/shapes/clouds.svg b/modules/creativeelements/views/img/shapes/clouds.svg new file mode 100644 index 00000000..43dd88e5 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/clouds.svg @@ -0,0 +1,3 @@ + + + diff --git a/modules/creativeelements/views/img/shapes/curve-asymmetrical-negative.svg b/modules/creativeelements/views/img/shapes/curve-asymmetrical-negative.svg new file mode 100644 index 00000000..915b57ab --- /dev/null +++ b/modules/creativeelements/views/img/shapes/curve-asymmetrical-negative.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/curve-asymmetrical.svg b/modules/creativeelements/views/img/shapes/curve-asymmetrical.svg new file mode 100644 index 00000000..57904209 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/curve-asymmetrical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/curve-negative.svg b/modules/creativeelements/views/img/shapes/curve-negative.svg new file mode 100644 index 00000000..d28f7063 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/curve-negative.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/curve.svg b/modules/creativeelements/views/img/shapes/curve.svg new file mode 100644 index 00000000..0f397479 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/curve.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/drops-negative.svg b/modules/creativeelements/views/img/shapes/drops-negative.svg new file mode 100644 index 00000000..773747a0 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/drops-negative.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/drops.svg b/modules/creativeelements/views/img/shapes/drops.svg new file mode 100644 index 00000000..e17fa99c --- /dev/null +++ b/modules/creativeelements/views/img/shapes/drops.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/index.php b/modules/creativeelements/views/img/shapes/index.php new file mode 100644 index 00000000..54d01608 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/index.php @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/opacity-fan.svg b/modules/creativeelements/views/img/shapes/opacity-fan.svg new file mode 100644 index 00000000..426fc94c --- /dev/null +++ b/modules/creativeelements/views/img/shapes/opacity-fan.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/opacity-tilt.svg b/modules/creativeelements/views/img/shapes/opacity-tilt.svg new file mode 100644 index 00000000..52b13ce7 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/opacity-tilt.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/pyramids-negative.svg b/modules/creativeelements/views/img/shapes/pyramids-negative.svg new file mode 100644 index 00000000..2a24ab54 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/pyramids-negative.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/pyramids.svg b/modules/creativeelements/views/img/shapes/pyramids.svg new file mode 100644 index 00000000..5d172dff --- /dev/null +++ b/modules/creativeelements/views/img/shapes/pyramids.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/split-negative.svg b/modules/creativeelements/views/img/shapes/split-negative.svg new file mode 100644 index 00000000..ceec6c3e --- /dev/null +++ b/modules/creativeelements/views/img/shapes/split-negative.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/split.svg b/modules/creativeelements/views/img/shapes/split.svg new file mode 100644 index 00000000..1761cc98 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/split.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/tilt.svg b/modules/creativeelements/views/img/shapes/tilt.svg new file mode 100644 index 00000000..34754774 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/tilt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/triangle-asymmetrical-negative.svg b/modules/creativeelements/views/img/shapes/triangle-asymmetrical-negative.svg new file mode 100644 index 00000000..c48580ec --- /dev/null +++ b/modules/creativeelements/views/img/shapes/triangle-asymmetrical-negative.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/triangle-asymmetrical.svg b/modules/creativeelements/views/img/shapes/triangle-asymmetrical.svg new file mode 100644 index 00000000..604710c8 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/triangle-asymmetrical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/triangle-negative.svg b/modules/creativeelements/views/img/shapes/triangle-negative.svg new file mode 100644 index 00000000..a777b311 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/triangle-negative.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/triangle.svg b/modules/creativeelements/views/img/shapes/triangle.svg new file mode 100644 index 00000000..9c2cba49 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/triangle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/wave-brush.svg b/modules/creativeelements/views/img/shapes/wave-brush.svg new file mode 100644 index 00000000..2411a919 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/wave-brush.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/waves-negative.svg b/modules/creativeelements/views/img/shapes/waves-negative.svg new file mode 100644 index 00000000..93cf2ef3 --- /dev/null +++ b/modules/creativeelements/views/img/shapes/waves-negative.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/waves-pattern.svg b/modules/creativeelements/views/img/shapes/waves-pattern.svg new file mode 100644 index 00000000..0f752d3e --- /dev/null +++ b/modules/creativeelements/views/img/shapes/waves-pattern.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/waves.svg b/modules/creativeelements/views/img/shapes/waves.svg new file mode 100644 index 00000000..0efd23fb --- /dev/null +++ b/modules/creativeelements/views/img/shapes/waves.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/modules/creativeelements/views/img/shapes/zigzag.svg b/modules/creativeelements/views/img/shapes/zigzag.svg new file mode 100644 index 00000000..90dc5a1a --- /dev/null +++ b/modules/creativeelements/views/img/shapes/zigzag.svg @@ -0,0 +1,3 @@ + + + diff --git a/modules/creativeelements/views/index.php b/modules/creativeelements/views/index.php new file mode 100644 index 00000000..0e32c6a1 --- /dev/null +++ b/modules/creativeelements/views/index.php @@ -0,0 +1,16 @@ +').html( + ceAdmin.languages.length > 1 && ceAdmin.uid !== '0010000' + ? + '' + + '' + + '' + + '' + : + '' + + '' + + '' + ).prependTo($btnGroup).pstooltip(); + } else { + $('
').html( + ceAdmin.languages.length > 1 && ceAdmin.uid !== '0010000' + ? + '' + + '' + : + '' + + '' + + '' + ).prependTo($btnGroup); + } + }); + // Minor CSS fix + $('.btn-group-action a.product-edit.tooltip-link').addClass('dropdown-item'); + + // Import Template + var $import = $('.ce-import-panel').removeClass('hide') + .parent().slideUp(0).insertBefore('#form-ce_template') + ; + $('.ce-import-panel #file').attr({ + accept: '.json,.zip', + required: true, + }); + + // Handler functions + ceAdmin.onClickImport = function() { + $import.hasClass('visible') + ? $import.removeClass('visible').slideUp(300) + : $import.addClass('visible').slideDown(300) + ; + }; + ceAdmin.onClickBtnBack = function(e) { + ceAdmin.checkChanges = true; + }; + ceAdmin.onClickBtnWrapper = function(e) { + this.children[0].click(); + }; + ceAdmin.onClickBtnEdit = function(e) { + e.stopPropagation(); + ceAdmin.checkChanges = true; + + if (ceAdmin.i18n.error) { + ceAdmin.checkChanges = e.preventDefault(); + return alert(ceAdmin.i18n.error); + } + if ('0' === ceAdmin.uid[0]) { + if (document.body.classList.contains('adminmaintenance')) { + return this.href += '&action=addMaintenance'; + } + ceAdmin.checkChanges = e.preventDefault(); + return alert(ceAdmin.i18n.save); + } + }; + + // Button templates + var tmplBtnBack = $('#tmpl-btn-back-to-ps').html(), + tmplBtnEdit = $('#tmpl-btn-edit-with-ce').html(); + + if (ceAdmin.footerProduct) { + var $tf = $('
').wrap('
'); + $tf.parent() + .insertAfter('#related-product') + .before('

displayFooterProduct

') + ; + + $('textarea[id*=description_short_]').each(function(i, el) { + var idLang = el.id.split('_').pop(), + lang = el.parentNode.className.match(/translation-label-(\w+)/), + $btn = $(tmplBtnEdit).click(ceAdmin.onClickBtnEdit); + + if ('0' === ceAdmin.footerProduct[0]) { + $btn[0].href += '&action=addFooterProduct&uid=' + (1*ceAdmin.uid + 100*idLang); + } else { + $btn[0].href += '&uid=' + (1*ceAdmin.footerProduct + 100*idLang) + '&footerProduct=' + ceAdmin.uid.slice(0, -6); + } + $('
') + .addClass(lang ? 'translation-label-'+lang[1] : '') + .addClass(el.parentNode.classList.contains('active') ? 'active' : '') + .addClass(el.parentNode.classList.contains('visible') ? 'visible' : '') + .append($btn) + .appendTo($tf) + ; + }); + } + + ceAdmin.getContents = function(selector) { + if (!ceAdmin.editSuppliers && $('form[name=supplier]').length || + !ceAdmin.editManufacturers && $('form[name=manufacturer]').length + ) { + return; + } + return $(selector).each(function(i, el) { + var idLang = parseInt(el[el.id ? 'id' : 'name'].split('_').pop()) || 0, + $btn = $(tmplBtnEdit).insertBefore(el).click(ceAdmin.onClickBtnEdit); + + $btn[0].href += '&uid=' + (1*ceAdmin.uid + 100*idLang); + + if (~ceAdmin.hideEditor.indexOf(idLang)) { + $(tmplBtnBack).insertBefore($btn).click(ceAdmin.onClickBtnBack)[0].href += '&uid=' + (1*ceAdmin.uid + 100*idLang); + $btn.wrap('
').parent().click(ceAdmin.onClickBtnWrapper); + $(el).hide().next('.maxLength').hide(); + } else { + $btn.after('
'); + } + }); + }; + + ceAdmin.$contents = ceAdmin.getContents([ + 'body:not(.adminproducts) textarea[name^=content_]:not([name*=short])', + 'body:not(.adminproducts) textarea[name*="[content]"]', + 'body:not(.adminpsblogblogs) textarea[name^=description_]:not([name*=short])', + 'textarea[name*="[description]"]', + 'textarea[name^=post_content_]', + 'textarea[name=content]', + '.adminmaintenance textarea' + ].join()); + + ceAdmin.form = ceAdmin.$contents[0] && ceAdmin.$contents[0].form; + ceAdmin.formChanged = false; + + $(function() { + // run after jQuery's document ready + $(ceAdmin.form).one('change', ':input', function() { + ceAdmin.formChanged = true; + }); + }); + $(window).on('beforeunload', function() { + if (ceAdmin.checkChanges && ceAdmin.formChanged) { + delete ceAdmin.checkChanges; + return "Changes you made may not be saved!"; + } + }); +}); diff --git a/modules/creativeelements/views/js/backoffice.js b/modules/creativeelements/views/js/backoffice.js new file mode 100644 index 00000000..a2bb276b --- /dev/null +++ b/modules/creativeelements/views/js/backoffice.js @@ -0,0 +1,12 @@ +/*! + * Creative Elements - live PageBuilder [in-stock] + * Copyright 2019-2022 WebshopWorks.com + */ + +document.addEventListener('DOMContentLoaded', function() { + $('body').on('click', '.module-item[data-tech-name=creativeelements] .module_action_menu_upgrade', function (e) { + e.preventDefault(); + e.stopPropagation(); + window.open('https://creativeelements.webshopworks.com/buy-license?utm_source=upgrade&utm_campaign=in-stock&utm_medium=backoffice'); + }); +}); diff --git a/modules/creativeelements/views/js/common-modules.js b/modules/creativeelements/views/js/common-modules.js new file mode 100644 index 00000000..dcfdb5b5 --- /dev/null +++ b/modules/creativeelements/views/js/common-modules.js @@ -0,0 +1,831 @@ +/*! + * Creative Elements - live Theme & Page Builder + * Copyright 2019-2022 WebshopWorks.com & Elementor.com + */ + +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 199); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 19: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _module = __webpack_require__(5); + +var _module2 = _interopRequireDefault(_module); + +var _viewModule = __webpack_require__(6); + +var _viewModule2 = _interopRequireDefault(_viewModule); + +var _masonry = __webpack_require__(20); + +var _masonry2 = _interopRequireDefault(_masonry); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = window.elementorModules = { + Module: _module2.default, + ViewModule: _viewModule2.default, + utils: { + Masonry: _masonry2.default + } +}; + +/***/ }), + +/***/ 199: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _modules = __webpack_require__(19); + +var _modules2 = _interopRequireDefault(_modules); + +var _layout = __webpack_require__(200); + +var _layout2 = _interopRequireDefault(_layout); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +_modules2.default.common = { + views: { + modal: { + Layout: _layout2.default + } + } +}; + +/***/ }), + +/***/ 20: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _viewModule = __webpack_require__(6); + +var _viewModule2 = _interopRequireDefault(_viewModule); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = _viewModule2.default.extend({ + + getDefaultSettings: function getDefaultSettings() { + return { + container: null, + items: null, + columnsCount: 3, + verticalSpaceBetween: 30 + }; + }, + + getDefaultElements: function getDefaultElements() { + return { + $container: jQuery(this.getSettings('container')), + $items: jQuery(this.getSettings('items')) + }; + }, + + run: function run() { + var heights = [], + distanceFromTop = this.elements.$container.position().top, + settings = this.getSettings(), + columnsCount = settings.columnsCount; + + distanceFromTop += parseInt(this.elements.$container.css('margin-top'), 10); + + this.elements.$items.each(function (index) { + var row = Math.floor(index / columnsCount), + $item = jQuery(this), + itemHeight = $item[0].getBoundingClientRect().height + settings.verticalSpaceBetween; + + if (row) { + var itemPosition = $item.position(), + indexAtRow = index % columnsCount, + pullHeight = itemPosition.top - distanceFromTop - heights[indexAtRow]; + + pullHeight -= parseInt($item.css('margin-top'), 10); + + pullHeight *= -1; + + $item.css('margin-top', pullHeight + 'px'); + + heights[indexAtRow] += itemHeight; + } else { + heights.push(itemHeight); + } + }); + } +}); + +/***/ }), + +/***/ 200: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _header = __webpack_require__(201); + +var _header2 = _interopRequireDefault(_header); + +var _logo = __webpack_require__(202); + +var _logo2 = _interopRequireDefault(_logo); + +var _loading = __webpack_require__(203); + +var _loading2 = _interopRequireDefault(_loading); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var _class = function (_Marionette$LayoutVie) { + _inherits(_class, _Marionette$LayoutVie); + + function _class() { + _classCallCheck(this, _class); + + return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); + } + + _createClass(_class, [{ + key: 'el', + value: function el() { + return this.getModal().getElements('widget'); + } + }, { + key: 'regions', + value: function regions() { + return { + modalHeader: '.dialog-header', + modalContent: '.dialog-lightbox-content', + modalLoading: '.dialog-lightbox-loading' + }; + } + }, { + key: 'initialize', + value: function initialize() { + this.modalHeader.show(new _header2.default(this.getHeaderOptions())); + } + }, { + key: 'getModal', + value: function getModal() { + if (!this.modal) { + this.initModal(); + } + + return this.modal; + } + }, { + key: 'initModal', + value: function initModal() { + var modalOptions = { + className: 'elementor-templates-modal', + closeButton: false, + draggable: false, + hide: { + onOutsideClick: false + } + }; + + jQuery.extend(true, modalOptions, this.getModalOptions()); + + this.modal = elementorCommon.dialogsManager.createWidget('lightbox', modalOptions); + + this.modal.getElements('message').append(this.modal.addElement('content'), this.modal.addElement('loading')); + + if (modalOptions.draggable) { + this.draggableModal(); + } + } + }, { + key: 'showModal', + value: function showModal() { + this.getModal().show(); + } + }, { + key: 'hideModal', + value: function hideModal() { + this.getModal().hide(); + } + }, { + key: 'draggableModal', + value: function draggableModal() { + var $modalWidgetContent = this.getModal().getElements('widgetContent'); + + $modalWidgetContent.draggable({ + containment: 'parent', + stop: function stop() { + $modalWidgetContent.height(''); + } + }); + + $modalWidgetContent.css('position', 'absolute'); + } + }, { + key: 'getModalOptions', + value: function getModalOptions() { + return {}; + } + }, { + key: 'getLogoOptions', + value: function getLogoOptions() { + return {}; + } + }, { + key: 'getHeaderOptions', + value: function getHeaderOptions() { + return { + closeType: 'normal' + }; + } + }, { + key: 'getHeaderView', + value: function getHeaderView() { + return this.modalHeader.currentView; + } + }, { + key: 'showLoadingView', + value: function showLoadingView() { + this.modalLoading.show(new _loading2.default()); + + this.modalLoading.$el.show(); + + this.modalContent.$el.hide(); + } + }, { + key: 'hideLoadingView', + value: function hideLoadingView() { + this.modalContent.$el.show(); + + this.modalLoading.$el.hide(); + } + }, { + key: 'showLogo', + value: function showLogo() { + this.getHeaderView().logoArea.show(new _logo2.default(this.getLogoOptions())); + } + }]); + + return _class; +}(Marionette.LayoutView); + +exports.default = _class; + +/***/ }), + +/***/ 201: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var _class = function (_Marionette$LayoutVie) { + _inherits(_class, _Marionette$LayoutVie); + + function _class() { + _classCallCheck(this, _class); + + return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); + } + + _createClass(_class, [{ + key: 'className', + value: function className() { + return 'elementor-templates-modal__header'; + } + }, { + key: 'getTemplate', + value: function getTemplate() { + return '#tmpl-elementor-templates-modal__header'; + } + }, { + key: 'regions', + value: function regions() { + return { + logoArea: '.elementor-templates-modal__header__logo-area', + tools: '#elementor-template-library-header-tools', + menuArea: '.elementor-templates-modal__header__menu-area' + }; + } + }, { + key: 'ui', + value: function ui() { + return { + closeModal: '.elementor-templates-modal__header__close' + }; + } + }, { + key: 'events', + value: function events() { + return { + 'click @ui.closeModal': 'onCloseModalClick' + }; + } + }, { + key: 'templateHelpers', + value: function templateHelpers() { + return { + closeType: this.getOption('closeType') + }; + } + }, { + key: 'onCloseModalClick', + value: function onCloseModalClick() { + this._parent._parent._parent.hideModal(); + } + }]); + + return _class; +}(Marionette.LayoutView); + +exports.default = _class; + +/***/ }), + +/***/ 202: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var _class = function (_Marionette$ItemView) { + _inherits(_class, _Marionette$ItemView); + + function _class() { + _classCallCheck(this, _class); + + return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); + } + + _createClass(_class, [{ + key: 'getTemplate', + value: function getTemplate() { + return '#tmpl-elementor-templates-modal__header__logo'; + } + }, { + key: 'className', + value: function className() { + return 'elementor-templates-modal__header__logo'; + } + }, { + key: 'events', + value: function events() { + return { + click: 'onClick' + }; + } + }, { + key: 'templateHelpers', + value: function templateHelpers() { + return { + title: this.getOption('title') + }; + } + }, { + key: 'onClick', + value: function onClick() { + var clickCallback = this.getOption('click'); + + if (clickCallback) { + clickCallback(); + } + } + }]); + + return _class; +}(Marionette.ItemView); + +exports.default = _class; + +/***/ }), + +/***/ 203: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var _class = function (_Marionette$ItemView) { + _inherits(_class, _Marionette$ItemView); + + function _class() { + _classCallCheck(this, _class); + + return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments)); + } + + _createClass(_class, [{ + key: 'id', + value: function id() { + return 'elementor-template-library-loading'; + } + }, { + key: 'getTemplate', + value: function getTemplate() { + return '#tmpl-elementor-template-library-loading'; + } + }]); + + return _class; +}(Marionette.ItemView); + +exports.default = _class; + +/***/ }), + +/***/ 5: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var Module = function Module() { + var $ = jQuery, + instanceParams = arguments, + self = this, + events = {}; + + var settings = void 0; + + var ensureClosureMethods = function ensureClosureMethods() { + $.each(self, function (methodName) { + var oldMethod = self[methodName]; + + if ('function' !== typeof oldMethod) { + return; + } + + self[methodName] = function () { + return oldMethod.apply(self, arguments); + }; + }); + }; + + var initSettings = function initSettings() { + settings = self.getDefaultSettings(); + + var instanceSettings = instanceParams[0]; + + if (instanceSettings) { + $.extend(true, settings, instanceSettings); + } + }; + + var init = function init() { + self.__construct.apply(self, instanceParams); + + ensureClosureMethods(); + + initSettings(); + + self.trigger('init'); + }; + + this.getItems = function (items, itemKey) { + if (itemKey) { + var keyStack = itemKey.split('.'), + currentKey = keyStack.splice(0, 1); + + if (!keyStack.length) { + return items[currentKey]; + } + + if (!items[currentKey]) { + return; + } + + return this.getItems(items[currentKey], keyStack.join('.')); + } + + return items; + }; + + this.getSettings = function (setting) { + return this.getItems(settings, setting); + }; + + this.setSettings = function (settingKey, value, settingsContainer) { + if (!settingsContainer) { + settingsContainer = settings; + } + + if ('object' === (typeof settingKey === 'undefined' ? 'undefined' : _typeof(settingKey))) { + $.extend(settingsContainer, settingKey); + + return self; + } + + var keyStack = settingKey.split('.'), + currentKey = keyStack.splice(0, 1); + + if (!keyStack.length) { + settingsContainer[currentKey] = value; + + return self; + } + + if (!settingsContainer[currentKey]) { + settingsContainer[currentKey] = {}; + } + + return self.setSettings(keyStack.join('.'), value, settingsContainer[currentKey]); + }; + + this.forceMethodImplementation = function (methodArguments) { + var functionName = methodArguments.callee.name; + + throw new ReferenceError('The method ' + functionName + ' must to be implemented in the inheritor child.'); + }; + + this.on = function (eventName, callback) { + if ('object' === (typeof eventName === 'undefined' ? 'undefined' : _typeof(eventName))) { + $.each(eventName, function (singleEventName) { + self.on(singleEventName, this); + }); + + return self; + } + + var eventNames = eventName.split(' '); + + eventNames.forEach(function (singleEventName) { + if (!events[singleEventName]) { + events[singleEventName] = []; + } + + events[singleEventName].push(callback); + }); + + return self; + }; + + this.off = function (eventName, callback) { + if (!events[eventName]) { + return self; + } + + if (!callback) { + delete events[eventName]; + + return self; + } + + var callbackIndex = events[eventName].indexOf(callback); + + if (-1 !== callbackIndex) { + delete events[eventName][callbackIndex]; + } + + return self; + }; + + this.trigger = function (eventName) { + var methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1), + params = Array.prototype.slice.call(arguments, 1); + + if (self[methodName]) { + self[methodName].apply(self, params); + } + + var callbacks = events[eventName]; + + if (!callbacks) { + return self; + } + + $.each(callbacks, function (index, callback) { + callback.apply(self, params); + }); + + return self; + }; + + init(); +}; + +Module.prototype.__construct = function () {}; + +Module.prototype.getDefaultSettings = function () { + return {}; +}; + +Module.extendsCount = 0; + +Module.extend = function (properties) { + var $ = jQuery, + parent = this; + + var child = function child() { + return parent.apply(this, arguments); + }; + + $.extend(child, parent); + + child.prototype = Object.create($.extend({}, parent.prototype, properties)); + + child.prototype.constructor = child; + + /* + * Constructor ID is used to set an unique ID + * to every extend of the Module. + * + * It's useful in some cases such as unique + * listener for frontend handlers. + */ + var constructorID = ++Module.extendsCount; + + child.prototype.getConstructorID = function () { + return constructorID; + }; + + child.__super__ = parent.prototype; + + return child; +}; + +module.exports = Module; + +/***/ }), + +/***/ 6: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _module = __webpack_require__(5); + +var _module2 = _interopRequireDefault(_module); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = _module2.default.extend({ + elements: null, + + getDefaultElements: function getDefaultElements() { + return {}; + }, + + bindEvents: function bindEvents() {}, + + onInit: function onInit() { + this.initElements(); + + this.bindEvents(); + }, + + initElements: function initElements() { + this.elements = this.getDefaultElements(); + } +}); + +/***/ }) + +/******/ }); diff --git a/modules/creativeelements/views/js/common-modules.min.js b/modules/creativeelements/views/js/common-modules.min.js new file mode 100644 index 00000000..e96107fc --- /dev/null +++ b/modules/creativeelements/views/js/common-modules.min.js @@ -0,0 +1,5 @@ +/*! + * Creative Elements - live Theme & Page Builder + * Copyright 2019-2022 WebshopWorks.com & Elementor.com + */ + !function(n){var o={};function r(e){if(o[e])return o[e].exports;var t=o[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,r),t.l=!0,t.exports}r.m=n,r.c=o,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=199)}({19:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=i(n(5)),r=i(n(6)),n=i(n(20));function i(e){return e&&e.__esModule?e:{default:e}}t.default=window.elementorModules={Module:o.default,ViewModule:r.default,utils:{Masonry:n.default}}},199:function(e,t,n){"use strict";var o=r(n(19)),n=r(n(200));function r(e){return e&&e.__esModule?e:{default:e}}o.default.common={views:{modal:{Layout:n.default}}}},20:function(e,t,n){"use strict";var n=n(6),n=(n=n)&&n.__esModule?n:{default:n};e.exports=n.default.extend({getDefaultSettings:function(){return{container:null,items:null,columnsCount:3,verticalSpaceBetween:30}},getDefaultElements:function(){return{$container:jQuery(this.getSettings("container")),$items:jQuery(this.getSettings("items"))}},run:function(){var r=[],i=this.elements.$container.position().top,a=this.getSettings(),l=a.columnsCount;i+=parseInt(this.elements.$container.css("margin-top"),10),this.elements.$items.each(function(e){var t=Math.floor(e/l),n=jQuery(this),o=n[0].getBoundingClientRect().height+a.verticalSpaceBetween;t?(e=n.position().top-i-r[t=e%l],e-=parseInt(n.css("margin-top"),10),n.css("margin-top",(e*=-1)+"px"),r[t]+=o):r.push(o)})}})},200:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e};function r(e,t){for(var n=0;n/g, + interpolate: /{{{([\s\S]+?)}}}/g, + escape: /{{([^}]+?)}}(?!})/g + }; + + return _.template(rawTemplate, options); + }; + } + }, { + key: 'getDefaultElements', + value: function getDefaultElements() { + return { + $window: jQuery(window), + $document: jQuery(document), + $body: jQuery(document.body) + }; + } + }, { + key: 'initComponents', + value: function initComponents() { + this.helpers = new _helpers2.default(); + + this.storage = new _storage2.default(); + + this.hotKeys = new _hotKeys2.default(); + + this.hotKeys.bindListener(this.elements.$window); + + this.dialogsManager = new DialogsManager.Instance(); + + this.initModules(); + } + }, { + key: 'initModules', + value: function initModules() { + var _this2 = this; + + var activeModules = this.config.activeModules; + + + var modules = { + ajax: _ajax2.default, + // finder: _finder2.default, + // connect: _connect2.default + }; + + activeModules.forEach(function (name) { + if (modules[name]) { + _this2[name] = new modules[name](_this2.config[name]); + } + }); + } + }, { + key: 'translate', + value: function translate(stringKey, context, templateArgs, i18nStack) { + if (context) { + i18nStack = this.config[context] && this.config[context].i18n; + } + + if (!i18nStack) { + i18nStack = this.config.i18n; + } + + var string = i18nStack && i18nStack[stringKey]; + + if (undefined === string) { + string = stringKey; + } + + if (templateArgs) { + string = string.replace(/%(?:(\d+)\$)?s/g, function (match, number) { + if (!number) { + number = 1; + } + + number--; + + return undefined !== templateArgs[number] ? templateArgs[number] : match; + }); + } + + return string; + } + }, { + key: 'onInit', + value: function onInit() { + _get(ElementorCommonApp.prototype.__proto__ || Object.getPrototypeOf(ElementorCommonApp.prototype), 'onInit', this).call(this); + + this.config = elementorCommonConfig; + + this.setMarionetteTemplateCompiler(); + } + }]); + + return ElementorCommonApp; +}(elementorModules.ViewModule); + +window.elementorCommon = new ElementorCommonApp(); + +elementorCommon.initComponents(); + +/***/ }), + +/***/ 168: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Helpers = function () { + function Helpers() { + _classCallCheck(this, Helpers); + } + + _createClass(Helpers, [{ + key: 'deprecatedMethod', + value: function deprecatedMethod(methodName, version, replacement) { + var message = '%c %c`' + methodName + '` is deprecated since ' + version; + + var style = 'font-size: 12px; background-image: url("' + elementorCommon.config.urls.assets + 'images/logo-icon.png"); background-repeat: no-repeat; background-size: contain;'; + + if (replacement) { + message += ' - Use `' + replacement + '` instead'; + } + + console.warn(message, style, ''); // eslint-disable-line no-console + } + }, { + key: 'cloneObject', + value: function cloneObject(object) { + return JSON.parse(JSON.stringify(object)); + } + }, { + key: 'firstLetterUppercase', + value: function firstLetterUppercase(string) { + return string[0].toUpperCase() + string.slice(1); + } + }]); + + return Helpers; +}(); + +exports.default = Helpers; + +/***/ }), + +/***/ 169: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var _class = function (_elementorModules$Mod) { + _inherits(_class, _elementorModules$Mod); + + _createClass(_class, [{ + key: 'getDefaultSettings', + value: function getDefaultSettings() { + return { + ajaxParams: { + type: 'POST', + url: elementorCommon.config.ajax.url, + data: {}, + dataType: 'json' + }, + actionPrefix: 'elementor_' + }; + } + }]); + + function _class() { + var _ref; + + _classCallCheck(this, _class); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var _this = _possibleConstructorReturn(this, (_ref = _class.__proto__ || Object.getPrototypeOf(_class)).call.apply(_ref, [this].concat(args))); + + _this.requests = {}; + + _this.cache = {}; + + _this.initRequestConstants(); + + _this.debounceSendBatch = _.debounce(_this.sendBatch.bind(_this), 500); + return _this; + } + + _createClass(_class, [{ + key: 'initRequestConstants', + value: function initRequestConstants() { + this.requestConstants = { + _nonce: this.getSettings('nonce') + }; + } + }, { + key: 'addRequestConstant', + value: function addRequestConstant(key, value) { + this.requestConstants[key] = value; + } + }, { + key: 'getCacheKey', + value: function getCacheKey(request) { + return JSON.stringify({ + unique_id: request.unique_id, + data: request.data + }); + } + }, { + key: 'loadObjects', + value: function loadObjects(options) { + var _this2 = this; + + var dataCollection = {}; + + var deferredArray = []; + + if (options.before) { + options.before(); + } + + options.ids.forEach(function (objectId) { + deferredArray.push(_this2.load({ + action: options.action, + unique_id: options.data.unique_id + objectId, + data: jQuery.extend({ id: objectId }, options.data) + }).done(function (data) { + return dataCollection = jQuery.extend(dataCollection, data); + })); + }); + + jQuery.when.apply(jQuery, deferredArray).done(function () { + return options.success(dataCollection); + }); + } + }, { + key: 'load', + value: function load(request) { + var _this3 = this; + + if (!request.unique_id) { + request.unique_id = request.action; + } + + if (request.before) { + request.before(); + } + + var deferred = void 0; + + var cacheKey = this.getCacheKey(request); + + if (_.has(this.cache, cacheKey)) { + deferred = jQuery.Deferred().done(request.success).resolve(this.cache[cacheKey]); + } else { + deferred = this.addRequest(request.action, { + data: request.data, + unique_id: request.unique_id, + success: function success(data) { + return _this3.cache[cacheKey] = data; + } + }).done(request.success); + } + + return deferred; + } + }, { + key: 'addRequest', + value: function addRequest(action, options, immediately) { + options = options || {}; + + if (!options.unique_id) { + options.unique_id = action; + } + + options.deferred = jQuery.Deferred().done(options.success).fail(options.error).always(options.complete); + + var request = { + action: action, + options: options + }; + + if (immediately) { + var requests = {}; + + requests[options.unique_id] = request; + + options.deferred.jqXhr = this.sendBatch(requests); + } else { + this.requests[options.unique_id] = request; + + this.debounceSendBatch(); + } + + return options.deferred; + } + }, { + key: 'sendBatch', + value: function sendBatch(requests) { + var actions = {}; + + if (!requests) { + requests = this.requests; + + // Empty for next batch. + this.requests = {}; + } + + Object.entries(requests).forEach(function (_ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + id = _ref3[0], + request = _ref3[1]; + + return actions[id] = { + action: request.action, + data: request.options.data + }; + }); + + return this.send('ajax', { + data: { + actions: JSON.stringify(actions) + }, + success: function success(data) { + Object.entries(data.responses).forEach(function (_ref4) { + var _ref5 = _slicedToArray(_ref4, 2), + id = _ref5[0], + response = _ref5[1]; + + var options = requests[id].options; + + if (options) { + if (response.success) { + options.deferred.resolve(response.data); + } else if (!response.success) { + options.deferred.reject(response.data); + } + } + }); + }, + error: function error(data) { + return Object.values(requests).forEach(function (args) { + if (args.options) { + args.options.deferred.reject(data); + } + }); + } + }); + } + }, { + key: 'send', + value: function send(action, options) { + var _this4 = this; + + var settings = this.getSettings(), + ajaxParams = elementorCommon.helpers.cloneObject(settings.ajaxParams); + + options = options || {}; + + action = settings.actionPrefix + action; + + jQuery.extend(ajaxParams, options); + + var requestConstants = elementorCommon.helpers.cloneObject(this.requestConstants); + + requestConstants.action = action; + + var isFormData = ajaxParams.data instanceof FormData; + + Object.entries(requestConstants).forEach(function (_ref6) { + var _ref7 = _slicedToArray(_ref6, 2), + key = _ref7[0], + value = _ref7[1]; + + if (isFormData) { + ajaxParams.data.append(key, value); + } else { + ajaxParams.data[key] = value; + } + }); + + var successCallback = ajaxParams.success, + errorCallback = ajaxParams.error; + + if (successCallback || errorCallback) { + ajaxParams.success = function (response) { + if (response.success && successCallback) { + successCallback(response.data); + } + + if (!response.success && errorCallback) { + errorCallback(response.data); + } + }; + + if (errorCallback) { + ajaxParams.error = function (data) { + return errorCallback(data); + }; + } else { + ajaxParams.error = function (xmlHttpRequest) { + if (xmlHttpRequest.readyState || 'abort' !== xmlHttpRequest.statusText) { + _this4.trigger('request:unhandledError', xmlHttpRequest); + } + }; + } + } + + return jQuery.ajax(ajaxParams); + } + }]); + + return _class; +}(elementorModules.Module); + +exports.default = _class; + +/***/ }) + +/******/ }); diff --git a/modules/creativeelements/views/js/common.min.js b/modules/creativeelements/views/js/common.min.js new file mode 100644 index 00000000..dafcea75 --- /dev/null +++ b/modules/creativeelements/views/js/common.min.js @@ -0,0 +1,5 @@ +/*! + * Creative Elements - live Theme & Page Builder + * Copyright 2019-2022 WebshopWorks.com & Elementor.com + */ + !function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=167)}({1:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=navigator.userAgent;t.default={webkit:-1!==r.indexOf("AppleWebKit"),firefox:-1!==r.indexOf("Firefox"),ie:/Trident|MSIE/.test(r),edge:-1!==r.indexOf("Edge"),mac:-1!==r.indexOf("Macintosh")}},15:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e};function o(e,t){for(var n=0;n/g,interpolate:/{{{([\s\S]+?)}}}/g,escape:/{{([^}]+?)}}(?!})/g})}}},{key:"getDefaultElements",value:function(){return{$window:jQuery(window),$document:jQuery(document),$body:jQuery(document.body)}}},{key:"initComponents",value:function(){this.helpers=new a.default,this.storage=new u.default,this.hotKeys=new s.default,this.hotKeys.bindListener(this.elements.$window),this.dialogsManager=new DialogsManager.Instance,this.initModules()}},{key:"initModules",value:function(){var t=this,e=this.config.activeModules,n={ajax:c.default};e.forEach(function(e){n[e]&&(t[e]=new n[e](t.config[e]))})}},{key:"translate",value:function(e,t,n,r){t=(r=(r=t?this.config[t]&&this.config[t].i18n:r)||this.config.i18n)&&r[e];return void 0===t&&(t=e),t=n?t.replace(/%(?:(\d+)\$)?s/g,function(e,t){return t=t||1,void 0!==n[--t]?n[t]:e}):t}},{key:"onInit",value:function(){i(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),"onInit",this).call(this),this.config=elementorCommonConfig,this.setMarionetteTemplateCompiler()}}]),n}(elementorModules.ViewModule);window.elementorCommon=new n,elementorCommon.initComponents()},168:function(e,t,n){"use strict";function r(e,t){for(var n=0;n 0) { + $editBtn.not(self.selectors.toolbar + ' ' + self.selectors.editRowBtn).remove(); + } + + if ($closeBtn.length > 0) { + $closeBtn.not(self.selectors.toolbar + ' ' + self.selectors.closeRowBtn).remove(); + } + + if ($deleteBtn.length > 0) { + $deleteBtn.not(self.selectors.toolbar + ' ' + self.selectors.removeRowBtn).remove(); + } + + toolbarHtml = jQuery('
  • ').append($toolbar)[0].outerHTML; + + return self.renderTemplate(self.fontLabelTemplate, { + weight: 'Weight:' + previewStyle.weight, + style: 'Style:' + previewStyle.style, + preview: 'Creative Elements Module Is Making The Web Beautiful!', + toolbar: toolbarHtml + }); + }; + + self.onRepeaterToggleVisible = function (event, $btn, $table) { + var $previewElement = $table.find(self.selectors.inlinePreview), + previewStyle = self.getPreviewStyle($table); + + $previewElement.attr('style', previewStyle.styleAttribute); + }; + + self.onRepeaterNewRow = function (event, $btn, $block) { + $block.find(self.selectors.removeRowBtn).first().remove(); + $block.find(self.selectors.editRowBtn).first().remove(); + $block.find(self.selectors.closeRowBtn).first().remove(); + }; + + self.maybeToggle = function (event) { + event.preventDefault(); + + if (jQuery(this).is(':visible') && !jQuery(event.target).hasClass(self.selectors.editRowBtn)) { + jQuery(this).find(self.selectors.editRowBtn).click(); + } + }; + + self.onInputChange = function (event) { + var $el = jQuery(event.target).next(); + + self.fields.upload.setFields($el); + self.fields.upload.setLabels($el); + self.fields.upload.replaceButtonClass($el); + }; + + self.bind = function () { + jQuery(document).on('repeaterComputedLabel', this.updateRowLabel).on('onRepeaterToggleVisible', this.onRepeaterToggleVisible).on('onRepeaterNewRow', this.onRepeaterNewRow).on('click', this.selectors.repeaterTitle, this.maybeToggle).on('input', this.selectors.fileUrlInput, this.onInputChange.bind(this)); + }; + + self.removeCloseHandle = function () { + jQuery(this.selectors.closeHandle).remove(); + jQuery(this.selectors.customFontsMetaBox).removeClass('closed').removeClass('postbox'); + }; + + self.titleRequired = function () { + jQuery(self.selectors.title).prop('required', true); + }; + + self.init = function () { + if (!jQuery('#ce_font_form #files').length) { + return; + } + + this.removeCloseHandle(); + this.titleRequired(); + this.bind(); + this.fields.upload.init(); + this.fields.repeater.init(); + + // Init font URLs + var fonts = JSON.parse($('#files').val() || '[]'); + + fonts.forEach(function(font, i) { + $('.add-repeater-row').click(); + + $('select[name="font_face['+ i +'][font_weight]"]').val(font.font_weight); + $('select[name="font_face['+ i +'][font_style]"]').val(font.font_style); + $('input[name="font_face['+ i +'][woff][url]"]').val(font.woff && font.woff.url || '').trigger('input'); + $('input[name="font_face['+ i +'][woff2][url]"]').val(font.woff2 && font.woff2.url || '').trigger('input'); + $('input[name="font_face['+ i +'][ttf][url]"]').val(font.ttf && font.ttf.url || '').trigger('input'); + $('input[name="font_face['+ i +'][otf][url]"]').val(font.otf && font.otf.url || '').trigger('input'); + + $('.close-repeater-row:last').click(); + }); + + // Cancel button fix + $('.btn[id$=_form_cancel_btn]') + .removeAttr('onclick') + .attr('href', location.href.replace(/&id\w*=\d+|&(add|update)\w+(=[^&]*)?/g, '')) + ; + }; +}; + +/***/ }), + +/***/ 63: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + $btn: null, + fileFont: null, + fileUrl: null, + fileFrame: [], + + selectors: { + uploadBtnClass: 'elementor-upload-btn', + clearBtnClass: 'elementor-upload-clear-btn', + uploadBtn: '.elementor-upload-btn', + clearBtn: '.elementor-upload-clear-btn' + }, + + hasValue: function hasValue() { + return '' !== jQuery(this.fileUrl).val(); + }, + + setLabels: function setLabels($el) { + if (!this.hasValue()) { + $el.val($el.data('upload_text')); + } else { + $el.val($el.data('remove_text')); + } + }, + + setFields: function setFields(el) { + var self = this; + self.fileUrl = jQuery(el).prev(); + self.fileFont = jQuery(self.fileUrl).prev(); + }, + + replaceButtonClass: function replaceButtonClass(el) { + if (this.hasValue()) { + jQuery(el).removeClass(this.selectors.uploadBtnClass).addClass(this.selectors.clearBtnClass); + } else { + jQuery(el).removeClass(this.selectors.clearBtnClass).addClass(this.selectors.uploadBtnClass); + } + this.setLabels(el); + }, + + updatePreview: function updatePreview(el) { + var self = this, + $ul = jQuery(el).parent().find('ul'), + $li = jQuery('
  • '), + showUrlType = jQuery(el).data('preview_anchor') || 'full'; + + $ul.html(''); + + if (self.hasValue() && 'none' !== showUrlType) { + var anchor = jQuery(self.fileUrl).val(); + if ('full' !== showUrlType) { + anchor = anchor.substring(anchor.lastIndexOf('/') + 1); + } + + $li.html('' + anchor + ''); + $ul.append($li); + } + }, + + setup: function setup() { + var self = this; + jQuery(self.selectors.uploadBtn + ', ' + self.selectors.clearBtn).each(function () { + self.setFields(jQuery(this)); + self.updatePreview(jQuery(this)); + self.setLabels(jQuery(this)); + self.replaceButtonClass(jQuery(this)); + }); + }, + + init: function init() { + var self = this; + + jQuery(document).on('click', self.selectors.uploadBtn, function (event) { + event.preventDefault(); + self.setFields(jQuery(this)); + self.fileFont[0].click(); + }); + + jQuery(document).on('click', self.selectors.clearBtn, function (event) { + event.preventDefault(); + self.setFields(jQuery(this)); + jQuery(self.fileUrl).val('') + .removeAttr('readonly'); + jQuery(self.fileFont).val(''); + + self.updatePreview(jQuery(this)); + self.replaceButtonClass(jQuery(this)); + }); + + jQuery(document).on('change', '.font_face input[type=file]', function (event) { + var el = jQuery(this).next().next(), + ext = el.data('ext'); + + self.setFields(el); + + if (this.files[0] && this.files[0].name && this.files[0].name.endsWith('.' + ext)) { + jQuery(self.fileUrl) + .val(this.files[0].name) + .attr('readonly', true) + ; + self.replaceButtonClass(el); + self.updatePreview(el); + } else { + jQuery(self.fileFont).val(''); + } + }); + + this.setup(); + + jQuery(document).on('onRepeaterNewRow', function () { + self.setup(); + }); + } +}; + +/***/ }), + +/***/ 64: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +module.exports = { + selectors: { + add: '.add-repeater-row', + remove: '.remove-repeater-row', + toggle: '.toggle-repeater-row', + close: '.close-repeater-row', + sort: '.sort-repeater-row', + table: '.form-table', + block: '.repeater-block', + repeaterLabel: '.repeater-title', + repeaterField: '.elementor-field-repeater' + }, + + counters: [], + + trigger: function trigger(eventName, params) { + jQuery(document).trigger(eventName, params); + }, + + triggerHandler: function triggerHandler(eventName, params) { + return jQuery(document).triggerHandler(eventName, params); + }, + + countBlocks: function countBlocks($btn) { + return $btn.closest(this.selectors.repeaterField).find(this.selectors.block).length || 0; + }, + + add: function add(btn) { + var self = this, + $btn = jQuery(btn), + id = $btn.data('template-id'), + repeaterBlock; + if (!self.counters.hasOwnProperty(id)) { + self.counters[id] = self.countBlocks($btn); + } + repeaterBlock = jQuery('#' + id).html(); + repeaterBlock = self.replaceAll('__counter__', self.counters[id], repeaterBlock); + self.counters[id] += 1; + $btn.before(repeaterBlock); + self.trigger('onRepeaterNewRow', [$btn, $btn.prev()]); + }, + + remove: function remove(btn) { + var self = this; + jQuery(btn).closest(self.selectors.block).remove(); + }, + + toggle: function toggle(btn) { + var self = this, + $btn = jQuery(btn), + $table = $btn.closest(self.selectors.block).find(self.selectors.table), + $toggleLabel = $btn.closest(self.selectors.block).find(self.selectors.repeaterLabel); + + $table.toggle(); + + if ($table.is(':visible')) { + $table.closest(self.selectors.block).addClass('block-visible'); + self.trigger('onRepeaterToggleVisible', [$btn, $table, $toggleLabel]); + } else { + $table.closest(self.selectors.block).removeClass('block-visible'); + self.trigger('onRepeaterToggleHidden', [$btn, $table, $toggleLabel]); + } + + $toggleLabel.toggle(); + + // Update row label + self.updateRowLabel(btn); + }, + + close: function close(btn) { + var self = this, + $btn = jQuery(btn), + $table = $btn.closest(self.selectors.block).find(self.selectors.table), + $toggleLabel = $btn.closest(self.selectors.block).find(self.selectors.repeaterLabel); + + $table.closest(self.selectors.block).removeClass('block-visible'); + $table.hide(); + self.trigger('onRepeaterToggleHidden', [$btn, $table, $toggleLabel]); + $toggleLabel.show(); + self.updateRowLabel(btn); + }, + + updateRowLabel: function updateRowLabel(btn) { + var self = this, + $btn = jQuery(btn), + $table = $btn.closest(self.selectors.block).find(self.selectors.table), + $toggleLabel = $btn.closest(self.selectors.block).find(self.selectors.repeaterLabel); + + var selector = $toggleLabel.data('selector'); + // For some browsers, `attr` is undefined; for others, `attr` is false. Check for both. + if ((typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) !== ( true ? 'undefined' : undefined) && false !== selector) { + var value = false, + std = $toggleLabel.data('default'); + + if ($table.find(selector).length) { + value = $table.find(selector).val(); + } + + //filter hook + var computedLabel = self.triggerHandler('repeaterComputedLabel', [$table, $toggleLabel, value]); + + // For some browsers, `attr` is undefined; for others, `attr` is false. Check for both. + if (undefined !== computedLabel && false !== computedLabel) { + value = computedLabel; + } + + // Fallback to default row label + if (undefined === value || false === value) { + value = std; + } + + $toggleLabel.html(value); + } + }, + + replaceAll: function replaceAll(search, replace, string) { + return string.replace(new RegExp(search, 'g'), replace); + }, + + init: function init() { + var self = this; + jQuery(document).on('click', this.selectors.add, function (event) { + event.preventDefault(); + self.add(jQuery(this), event); + }).on('click', this.selectors.remove, function (event) { + event.preventDefault(); + var result = confirm(jQuery(this).data('confirm').toString()); + if (!result) { + return; + } + self.remove(jQuery(this), event); + }).on('click', this.selectors.toggle, function (event) { + event.preventDefault(); + event.stopPropagation(); + self.toggle(jQuery(this), event); + }).on('click', this.selectors.close, function (event) { + event.preventDefault(); + event.stopPropagation(); + self.close(jQuery(this), event); + }); + + jQuery(this.selectors.toggle).each(function () { + self.updateRowLabel(jQuery(this)); + }); + + this.trigger('onRepeaterLoaded', [this]); + } +}; + +/***/ }) + +/******/ }); diff --git a/modules/creativeelements/views/js/editor-ce.js b/modules/creativeelements/views/js/editor-ce.js new file mode 100644 index 00000000..47d921ec --- /dev/null +++ b/modules/creativeelements/views/js/editor-ce.js @@ -0,0 +1,661 @@ +/*! + * Creative Elements - live Theme & Page Builder + * Copyright 2019-2022 WebshopWorks.com + */ + +$(window).on('elementor:init', function onElementorInit() { + if ('product-miniature' === elementor.config.document.type) { + var pageModel = elementor.settings.page.model; + + $('#elementor-preview-responsive-wrapper').css({ + height: '100%', + margin: '0 auto', + padding: 0, + transitionDuration: '0s', + }); + elementor.on('preview:loaded', function () { + var minWidth = pageModel.getControl('preview_width').min, + controlView; + $(elementor.$previewContents[0].body).css({ + width: pageModel.get('preview_width'), + minWidth: minWidth, + }).resizable({ + handles: 'e, w', + start: function () { + var pageView = elementor.getPanelView().getCurrentPageView(), + device = ceFrontend.getCurrentDeviceMode(); + controlView = 'preview_settings' !== pageView.activeSection ? null : pageView.getControlViewByName( + 'desktop' === device ? 'preview_width' : 'preview_width_' + device + ); + elementor.$previewContents[0].documentElement.style.cursor = 'ew-resize'; + }, + resize: function (e, ui) { + var device = ceFrontend.getCurrentDeviceMode(), + width = 2 * (ui.size.width - ui.originalSize.width) + ui.originalSize.width; + if (width < minWidth) { + width = minWidth; + } + this.style.width = width + 'px'; + this.style.left = ''; + this.style.right = ''; + + pageModel.set('desktop' === device ? 'preview_width' : 'preview_width_' + device, width); + + controlView && controlView.render(); + }, + stop: function () { + elementor.$previewContents[0].documentElement.style.cursor = ''; + elementor.$previewContents.children().on('click.ce-resize', function (e) { + e.stopPropagation(); + }); + setTimeout(function () { + elementor.$previewContents.children().off('click.ce-resize'); + }); + }, + }); + }); + elementor.settings.page.model.on('change', function onChangePreviewWidth() { + var device = ceFrontend.getCurrentDeviceMode(), + preview_width = 'desktop' === device ? 'preview_width' : 'preview_width_' + device; + if (preview_width in this.changed) { + elementor.$previewContents[0].body.style.width = this.changed[preview_width] + 'px'; + } + }); + elementor.channels.deviceMode.on('change', function onChangeDeviceMode() { + var width = ceFrontend.getCurrentDeviceSetting(pageModel.attributes, 'preview_width'); + + elementor.$previewContents[0].body.style.width = width + 'px'; + }); + } + + elementor.channels.editor.on('section:activated', function onSectionActivated(sectionName, editor) { + var editedElement = editor.getOption('editedElementView'), + widgetType = editedElement.model.get('widgetType'); + + if ('flip-box' === widgetType) { + // init flip box back + var isSideB = ['section_b', 'section_style_b', 'section_style_button'].indexOf(sectionName) > -1, + $backLayer = editedElement.$el.find('.elementor-flip-box-back'); + + editedElement.$el.toggleClass('elementor-flip-box--flipped', isSideB); + + if (isSideB) { + $backLayer.css('transition', 'none'); + } else { + setTimeout(function () { + $backLayer.css('transition', ''); + }, 10); + } + } else if ('ajax-search' === widgetType) { + // init search results + editedElement.$el.find('.elementor-search__products').css({ + display: ['section_results_style', 'section_products_style'].indexOf(sectionName) < 0 ? 'none' : '' + }); + } + }); + + var tabNumber = ''; + // Refresh Tabbed Section + elementor.hooks.addAction('panel/open_editor/column', function (panel, model, column) { + if (column._parent.model.get('settings').get('tabs')) { + var index = column.$el.index(), + $items = column.$el.parent().prev().find('a'); + + ceFrontend.elements.window.jQuery($items[index]).click(); + + elementor.$previewContents[0].activeElement && elementor.$previewContents[0].activeElement.blur(); + } + }); + function addTabbedColumn(event, attributes) { + var $column = elementor.$previewElementorEl.find('[data-id=' + attributes.id + ']'), + $litems = $column.parent().prev().find('li'), + index = $column.index(), + settings = attributes.settings || attributes, + isNew = $.isEmptyObject(settings); + + isNew || 'history:after:add' === event ? index-- : $litems.find('a').removeClass('elementor-item-active'); + + var $a = $litems.eq(0).clone().insertAfter($litems[index]) + .find('a').html(settings._title || tabNumber); + + isNew || 'history:after:add' === event ? $a.removeClass('elementor-item-active').click() : $a.addClass('elementor-item-active'); + } + elementor.channels.data.on('element:after:add', function (model) { + if (!model) return; + + var attributes = model.attributes || model; + + 'column' === attributes.elType && addTabbedColumn('element:after:add', attributes); + }); + elementor.channels.data.on('history:after:add', function (model) { + if (!model) return; + + var attributes = model.attributes || model; + + 'column' === attributes.elType && addTabbedColumn('history:after:add', attributes); + }); + elementor.channels.data.on('element:before:remove history:before:remove', function (model) { + var attributes = model.attributes || model; + + if ('column' === attributes.elType) { + var $column = elementor.$previewElementorEl.find('[data-id=' + attributes.id + ']'); + $items = $column.parent().prev().find('a'); + + $items.eq($column.index()).parent().remove(); + $items.eq(0).click(); + } + }); + // Sort Tabs + elementor.channels.data.on('drag:after:update', function (model) { + var attributes = model.attributes || model; + + if ('column' === attributes.elType) { + var view = elementor.channels.data.request('dragging:parent:view'); + if (view.model.get('settings').get('tabs')) { + var columns = view.model.get('elements').models; + + view.$el.find('> .elementor-container > .elementor-nav-tabs a').each(function (i) { + $(this).html(columns[i].get('settings').get('_title') || tabNumber); + }); + } + } + }); + // Change Tab Title + elementor.channels.editor.on('change:column:_title', function (control, column) { + var index = column.$el.index(); + + column.$el.parent().prev().find('a').eq(index).html( + control.options.elementSettingsModel.get('_title') || tabNumber + ); + }); + elementor.channels.data.on('history:after:change', function (model, changed, isRedo) { + var attributes = model.attributes || model; + + if ('column' === attributes.elType && changed._title) { + var $column = elementor.$previewElementorEl.find('[data-id=' + attributes.id + ']'); + $items = $column.parent().prev().find('a'), + index = $column.index(); + + $items.eq(index).html(changed._title[isRedo ? 'new' : 'old'] || tabNumber); + } + }); + elementor.channels.editor.on('enter:column:_title', function (model) { + var $column = elementor.$previewElementorEl.find('.elementor-element-editable'), + $items = $column.parent().prev().find('a'), + index = $column.index(); + + $items.eq(index).html(model.get('_title') || ''); + $('.elementor-control-_title input[data-setting="_title"]').val(model.get('_title')); + }); +}); + +$(function () {elementor.on('preview:loaded', function () { + // init widgets + ceFrontend.hooks.addAction('frontend/element_ready/widget', function ($widget, $) { + // remote render fix + if ($widget.find('.ce-remote-render').length) { + var render = elementor.helpers.renderWidgets, + widget = elementor.helpers.getModelById('' + $widget.data('id')), + data = widget.toJSON(); + + if (Date.now() - render.timestamp > render.delay) { + render.actions = {}; + } + render.actions['render_' + data.id] = { + action: 'render_' + data.id, + data: data + }; + clearTimeout(render.timeout); + render.timeout = setTimeout(function() { + render.xhr = $.post(elementor.config.document.urls.preview, { + render: 'widget', + editor_post_id: elementor.config.document.id, + actions: JSON.stringify(render.actions), + }, null, 'json').always(function (arg, status) { + var data = 'success' === status ? arg : arg.responseJSON || {}; + for (var action in data) { + elementor.helpers.getModelById(action.split('_')[1]).onRemoteGetHtml(data); + } + }); + }, render.delay); + render.timestamp = Date.now(); + } + }); + // Auto open Library for Theme Builder + if (elementor.config.post_id.substr(-6, 2) == 17 && !elementor.config.data.length) { + elementor.templates.startModal() + } + // Theme Builder + elementor.channels.editor.on('elementorThemeBuilder:ApplyPreview', function saveAndReload() { + elementor.saver.saveAutoSave({ + onSuccess: function onSuccess() { + elementor.saver.setFlagEditorChange(false); + location.reload(); + } + }); + }); + // Play entrance animations for tabs in editor + elementor.$previewElementorEl.on('mouseup.ce', '.elementor-nav-tabs a', function () { + if (~this.className.indexOf('elementor-item-active')) { + return; + } + var index = $(this.parentNode).index(), + $col = $(this).closest('.elementor-container').find('> .elementor-row > .elementor-column').eq(index), + $animated = $col.find('.animated').addBack('.animated'); + + $animated.each(function () { + var id = $(this).data('id'), + settings = elementor.helpers.getModelById(id).get('settings').attributes; + $(this).removeClass(settings.animation || settings._animation); + }); + $animated.length && setTimeout(function() { + $animated.each(function () { + var id = $(this).data('id'), + settings = elementor.helpers.getModelById(id).get('settings').attributes; + $(this).addClass(settings.animation || settings._animation); + }); + }); + }); +})}); + +$(function onReady() { + // init page custom CSS + var addPageCustomCss = function() { + var customCSS = elementor.settings.page.model.get('custom_css'); + + if (customCSS) { + customCSS = customCSS.replace(/selector/g, elementor.config.settings.page.cssWrapperSelector); + + elementor.settings.page.getControlsCSS().elements.$stylesheetElement.append(customCSS); + } + }; + elementor.on('preview:loaded', addPageCustomCss); + elementor.settings.page.model.on('change', function () { + if ('custom_css' in this.changed) { + addPageCustomCss(); + } + }); + + // init element custom CSS + elementor.hooks.addFilter('editor/style/styleText', function addCustomCss(css, view) { + var model = view.getEditModel(), + customCSS = model.get('settings').get('custom_css'); + + if (customCSS) { + css += customCSS.replace(/selector/g, '.elementor-element.elementor-element-' + view.model.id); + } + + return css; + }); + + // init Products Cache + elementor.productsCache = {}; + elementor.getProductName = function (id) { + return this.productsCache[id] ? this.productsCache[id].name : ''; + }; + elementor.getProductImage = function (id) { + return this.productsCache[id] ? this.productsCache[id].image : ''; + }; + + // init File Manager + elementor.fileManager = elementor.dialogsManager.createWidget('lightbox', { + id: 'ce-file-manager-modal', + closeButton: true, + headerMessage: window.tinyMCE ? tinyMCE.i18n.translate('File manager') : 'File manager', + + onReady: function() { + var $message = this.getElements('message').html( + '' + ); + this.iframe = $message.children()[0]; + this.url = baseAdminDir + 'filemanager/dialog.php?type=1&field_id=3'; + + this.open = function(fieldId) { + this.fieldId = fieldId; + + if (this.iframe.contentWindow) { + this.initFrame(); + this.getElements('widget').appendTo = function() { + return this; + }; + this.show(); + } else { + $message.prepend( + $('#tmpl-elementor-template-library-loading').html() + ); + this.iframe.src = this.url + '&fldr=' + (localStorage.ceImgFldr || ''); + this.show(0); + } + }; + this.initFrame = function() { + var $doc = $(this.iframe).contents(); + + localStorage.ceImgFldr = $doc.find('#fldr_value').val(); + + $doc.find('a.link').attr('data-field_id', this.fieldId); + + this.iframe.contentWindow.close_window = this.hide.bind(this); + + // WEBP + $doc.find('li[data-name$=".webp"], li[data-name$=".WEBP"]').each(function () { + $(this).find('.img-container img').attr({ + src: $(this).find('a.preview').data('url'), + }).css({ + height: '100%', + objectFit: 'cover', + }); + $(this).find('.filetype').css('background', 'rgba(0,0,0,0.2)'); + $(this).find('.cover').remove(); + + var $form = $(this).find('.download-form').attr('onsubmit', 'event.preventDefault()'); + $form.find('a[onclick*=submit]').attr({ + href: $form.find('.preview').data('url'), + download: $form[0].elements.name.value, + }); + $form.find('.rename-file, .delete-file').attr('data-path', ''); + }); + }; + this.iframe.onload = this.initFrame.bind(this); + }, + + onHide: function() { + var $input = $('#' + this.fieldId); + + $input.val( + $input.val().replace(location.origin, '') + ).trigger('input'); + }, + }); + + // helper for get model by id + elementor.helpers.getModelById = function(id, models) { + models = models || elementor.elements.models; + + for (var i = models.length; i--;) { + if (models[i].id === id) { + return models[i]; + } + if (models[i].attributes.elements.models.length) { + var model = this.getModelById(id, models[i].attributes.elements.models); + + if (model) { + return model; + } + } + } + }; + + elementor.helpers.renderWidgets = { + delay: 100, + timestamp: 0, + timeout: null, + actions: {}, + }; + + elementor.helpers.getParentSectionModel = function(id, sections) { + sections = sections || elementor.elements.models; + + for (var i = sections.length; i--;) { + if ('section' !== sections[i].attributes.elType) { + continue; + } + var sectionModel = sections[i].attributes.settings; + + if (sections[i].attributes.elements.models.length) { + var columns = sections[i].attributes.elements.models; + + for (var j = columns.length; j--;) { + if (columns[j].id === id) { + return sectionModel; + } + if (columns[j].attributes.settings.cid === id) { + return sectionModel; + } + if (columns[j].attributes.elements.models.length) { + var result = this.getParentSectionModel(id, columns[j].attributes.elements.models); + if (result) { + return result; + } + } + } + } + } + }; + + // fix: add home_url to relative image path + elementor.imagesManager.getImageUrl = function(image) { + var url = image.url; + + if (url && url.indexOf('://') < 0) { + url = elementor.config.home_url + url; + } + return url; + }; + + elementor.on('preview:loaded', function onPreviewLoaded() { + // fix for View Page in force edit mode + var href = elementor.$preview[0].contentWindow.location.href; + + if (~href.indexOf('&force=1&')) { + elementor.config.post_permalink = href.replace(/&force=1&.*/, ''); + } + + // scroll to content area + var contentTop = elementor.$previewContents.find('#elementor .elementor-section-wrap').offset().top; + if (contentTop > $(window).height() * 0.66) { + elementor.$previewContents.find('html, body').animate({ + scrollTop: contentTop - 30 + }, 400); + } + + // fix for multiple Global colors / fonts + elementor.$previewContents.find('#elementor-global-css, link[href*="css/ce/global-"]').remove(); + + // init Edit with CE buttons + elementor.$previewContents.find('.ce-edit-btn').on('click.ce', function() { + location.href = this.href; + }); + + // init Read More link + elementor.$previewContents.find('.ce-read-more').on('click.ce', function() { + window.open(this.href); + }); + + // fix for redirecting preview + elementor.$previewContents.find('a[href]').on('click.ce', function(e) { + e.preventDefault(); + }); + }); +}); + +$(window).on('load.ce', function onLoadWindow() { + // init language switcher + var $context = $('#ce-context'), + $langs = $('#ce-langs'), + $languages = $langs.children().remove(), + built = $langs.data('built'), + lang = $langs.data('lang'); + + elementor.shopContext = $context.length + ? $context.val() + : 's-' + parseInt(elementor.config.post_id.slice(-2)) + ; + if ('s' !== elementor.shopContext[0]) { + var showToast = elementor.notifications.showToast.bind(elementor.notifications, { + message: elementor.translate('multistore_notification'), + buttons: [{ + name: 'view_languages', + text: $context.find(':selected').html().split('★')[0], + callback: function callback() { + $('#elementor-panel-footer-lang').click(); + } + }] + }), + toast = elementor.notifications.getToast(); + if (toast.isVisible()) { + toast.on('hide', function onHideToast() { + toast.off('hide', onHideToast); + setTimeout(showToast, 350); + }); + } else { + showToast(); + } + } + elementor.helpers.filterLangs = function() { + var ctx = $context.length ? $context.val() : elementor.shopContext, + id_group = 'g' === ctx[0] ? parseInt(ctx.substr(2)) : 0, + id_shop = 's' === ctx[0] ? parseInt(ctx.substr(2)) : 0, + dirty = elementor.shopContext != ctx; + + $langs.empty(); + + var id_shops = id_group ? $context.find(':selected').nextUntil('[value^=g]').map(function() { + return parseInt(this.value.substr(2)); + }).get() : [id_shop]; + + $languages.each(function() { + if (!ctx || $(this).data('shops').filter(function(id) { return ~id_shops.indexOf(id) }).length) { + var $lang = $(this).clone().appendTo($langs), + id_lang = $lang.data('lang'), + active = !dirty && lang == id_lang; + + var uid = elementor.config.post_id.replace(/\d\d(\d\d)$/, function(m, shop) { + return ('0' + id_lang).slice(-2) + ('0' + id_shop).slice(-2); + }); + $lang.attr('data-uid', uid).data('uid', uid); + + active && $lang.addClass('active'); + + if (active || !id_shop || !built[id_shop] || !built[id_shop][id_lang]) { + $lang.find('.elementor-button').remove(); + } + } + }); + }; + elementor.helpers.filterLangs(); + $context.on('click.ce-ctx', function onClickContext(e) { + // prevent closing languages + e.stopPropagation(); + }).on('change.ce-ctx', elementor.helpers.filterLangs); + + $langs.on('click.ce-lang', '.ce-lang', function onChangeLanguage() { + var uid = $(this).data('uid'), + href = location.href.replace(/uid=\d+/, 'uid=' + uid); + + if ($context.length && $context.val() != elementor.shopContext) { + document.context.action = href; + document.context.submit(); + } else if (uid != elementor.config.post_id) { + location = href; + } + }).on('click.ce-lang-get', '.elementor-button', function onGetLanguageContent(e) { + e.stopImmediatePropagation(); + var $icon = $('i', this); + + if ($icon.hasClass('fa-spin')) { + return; + } + $icon.attr('class', 'fa fa-spin fa-circle-o-notch'); + + elementorCommon.ajax.addRequest('get_language_content', { + data: { + uid: $(this).closest('[data-uid]').data('uid') + }, + success: function(data) { + $icon.attr('class', 'eicon-file-download'); + + elementor.getRegion('sections').currentView.addChildModel(data); + }, + error: function(data) { + elementor.templates.showErrorDialog(data); + } + }); + }); + + // handle permission errors for AJAX requests + $(document).ajaxSuccess(function onAjaxSuccess(e, xhr, conf, res) { + if (false === res.success && res.data && res.data.permission) { + NProgress.done(); + $('.elementor-button-state').removeClass('elementor-button-state'); + + try { + elementor.templates.showTemplates(); + } catch (ex) {} + + elementor.templates.getErrorDialog() + .setMessage('
    ' + res.data.permission + '
    ') + .show() + ; + } + }); +}); + +// init layerslider widget +$('#elementor-panel').on('change.ls', '.ls-selector select', function onChangeSlider() { + var $ = elementor.$previewContents[0].defaultView.jQuery; + + $('.elementor-element-' + elementor.panel.currentView.content.currentView.model.id) + .addClass('elementor-widget-empty') + .append('') + .find('.ls-container').layerSlider('destroy').remove() + ; +}).on('click.ls-new', '.elementor-control-ls-new button', function addSlider(e) { + var title = prompt(ls.NameYourSlider); + + null === title || $.post(ls.url, { + 'ls-add-new-slider': 1, + 'title': title + }, function onSuccessNewSlider(data) { + var id = (data.match(/name="slider_id" value="(\d+)"/) || []).pop(); + if (id) { + var option = '#' + id + ' - ' + title; + elementor.config.widgets['ps-widget-LayerSlider'].controls.slider.options[id] = option; + $('.ls-selector select') + .append('') + .val(id) + .change() + ; + $('.elementor-control-ls-edit button').trigger('click.ls-edit'); + } + }); +}).on('click.ls-edit', '.elementor-control-ls-edit button', function editSlider(e) { + var lsUpdate, + lsId = $('.ls-selector select').val(); + + $.fancybox({ + width: '100%', + height: '100%', + padding: 0, + href: ls.url + '&action=edit&id=' + lsId, + type: 'iframe', + afterLoad: function onAfterLoadSlider() { + var win = $('.fancybox-iframe').contents()[0].defaultView; + + win.jQuery(win.document).ajaxSuccess(function(e, xhr, args, res) { + if (args.data && args.data.indexOf('action=ls_save_slider') === 0 && '{"status":"ok"}' === res) { + lsUpdate = true; + } + }); + $(win.document.head).append(''); + }, + beforeClose: function onBeforeCloseSlider() { + var win = $('.fancybox-iframe').contents()[0].defaultView, + close = win.LS_editorIsDirty ? confirm(ls.ChangesYouMadeMayNotBeSaved) : true; + + if (close && win.LS_editorIsDirty) { + win.LS_editorIsDirty = false; + } + return close; + }, + afterClose: function onAfterCloseSlider() { + lsUpdate && $('.ls-selector select') + .val(0).change() + .val(lsId).change() + ; + } + }); +}); diff --git a/modules/creativeelements/views/js/editor-modules.js b/modules/creativeelements/views/js/editor-modules.js new file mode 100644 index 00000000..2adeed69 --- /dev/null +++ b/modules/creativeelements/views/js/editor-modules.js @@ -0,0 +1,949 @@ +/*! + * Creative Elements - live Theme & Page Builder + * Copyright 2019-2022 WebshopWorks.com & Elementor.com + */ + +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 204); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 12: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var InnerTabsBehavior; + +InnerTabsBehavior = Marionette.Behavior.extend({ + + onRenderCollection: function onRenderCollection() { + this.handleInnerTabs(this.view); + }, + + handleInnerTabs: function handleInnerTabs(parent) { + var closedClass = 'elementor-tab-close', + activeClass = 'elementor-tab-active', + tabsWrappers = parent.children.filter(function (view) { + return 'tabs' === view.model.get('type'); + }); + + _.each(tabsWrappers, function (view) { + view.$el.find('.elementor-control-content').remove(); + + var tabsId = view.model.get('name'), + tabs = parent.children.filter(function (childView) { + return 'tab' === childView.model.get('type') && childView.model.get('tabs_wrapper') === tabsId; + }); + + _.each(tabs, function (childView, index) { + view._addChildView(childView); + + var tabId = childView.model.get('name'), + controlsUnderTab = parent.children.filter(function (controlView) { + return tabId === controlView.model.get('inner_tab'); + }); + + if (0 === index) { + childView.$el.addClass(activeClass); + } else { + _.each(controlsUnderTab, function (controlView) { + controlView.$el.addClass(closedClass); + }); + } + }); + }); + }, + + onChildviewControlTabClicked: function onChildviewControlTabClicked(childView) { + var closedClass = 'elementor-tab-close', + activeClass = 'elementor-tab-active', + tabClicked = childView.model.get('name'), + childrenUnderTab = this.view.children.filter(function (view) { + return 'tab' !== view.model.get('type') && childView.model.get('tabs_wrapper') === view.model.get('tabs_wrapper'); + }), + siblingTabs = this.view.children.filter(function (view) { + return 'tab' === view.model.get('type') && childView.model.get('tabs_wrapper') === view.model.get('tabs_wrapper'); + }); + + _.each(siblingTabs, function (view) { + view.$el.removeClass(activeClass); + }); + + childView.$el.addClass(activeClass); + + _.each(childrenUnderTab, function (view) { + if (view.model.get('inner_tab') === tabClicked) { + view.$el.removeClass(closedClass); + } else { + view.$el.addClass(closedClass); + } + }); + + elementor.getPanelView().updateScrollbar(); + } +}); + +module.exports = InnerTabsBehavior; + +/***/ }), + +/***/ 204: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _module = __webpack_require__(205); + +var _module2 = _interopRequireDefault(_module); + +var _introduction = __webpack_require__(206); + +var _introduction2 = _interopRequireDefault(_introduction); + +var _controlsStack = __webpack_require__(207); + +var _controlsStack2 = _interopRequireDefault(_controlsStack); + +var _baseSettings = __webpack_require__(208); + +var _baseSettings2 = _interopRequireDefault(_baseSettings); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +elementorModules.editor = { + elements: { + models: { + BaseSettings: _baseSettings2.default + } + }, + utils: { + Module: _module2.default, + Introduction: _introduction2.default + }, + views: { + ControlsStack: _controlsStack2.default + } +}; + +/***/ }), + +/***/ 205: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var EditorModule = elementorModules.Module.extend({ + + onInit: function onInit() { + jQuery(window).on('elementor:init', this.onElementorReady); + }, + + getEditorControlView: function getEditorControlView(name) { + var editor = elementor.getPanelView().getCurrentPageView(); + + return editor.children.findByModelCid(this.getEditorControlModel(name).cid); + }, + + getEditorControlModel: function getEditorControlModel(name) { + var editor = elementor.getPanelView().getCurrentPageView(); + + return editor.collection.findWhere({ name: name }); + }, + + onElementorReady: function onElementorReady() { + this.onElementorInit(); + + elementor.on('frontend:init', this.onElementorFrontendInit.bind(this)).on('preview:loaded', this.onElementorPreviewLoaded.bind(this)); + } +}); + +EditorModule.prototype.onElementorInit = function () {}; + +EditorModule.prototype.onElementorPreviewLoaded = function () {}; + +EditorModule.prototype.onElementorFrontendInit = function () {}; + +module.exports = EditorModule; + +/***/ }), + +/***/ 206: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var _class = function (_elementorModules$Mod) { + _inherits(_class, _elementorModules$Mod); + + function _class() { + var _ref; + + _classCallCheck(this, _class); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var _this = _possibleConstructorReturn(this, (_ref = _class.__proto__ || Object.getPrototypeOf(_class)).call.apply(_ref, [this].concat(args))); + + _this.initDialog(); + return _this; + } + + _createClass(_class, [{ + key: 'getDefaultSettings', + value: function getDefaultSettings() { + return { + dialogType: 'buttons', + dialogOptions: { + effects: { + hide: 'hide', + show: 'show' + }, + hide: { + onBackgroundClick: false + } + } + }; + } + }, { + key: 'initDialog', + value: function initDialog() { + var _this2 = this; + + var dialog = void 0; + + this.getDialog = function () { + if (!dialog) { + var settings = _this2.getSettings(); + + dialog = elementorCommon.dialogsManager.createWidget(settings.dialogType, settings.dialogOptions); + + if (settings.onDialogInitCallback) { + settings.onDialogInitCallback.call(_this2, dialog); + } + } + + return dialog; + }; + } + }, { + key: 'show', + value: function show(target) { + if (this.introductionViewed) { + return; + } + + var dialog = this.getDialog(); + + if (target) { + dialog.setSettings('position', { + of: target + }); + } + + dialog.show(); + } + }, { + key: 'setViewed', + value: function setViewed() { + this.introductionViewed = true; + + elementorCommon.ajax.addRequest('introduction_viewed', { + data: { + introductionKey: this.getSettings('introductionKey') + } + }); + } + }]); + + return _class; +}(elementorModules.Module); + +exports.default = _class; + +/***/ }), + +/***/ 207: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ControlsStack; + +ControlsStack = Marionette.CompositeView.extend({ + classes: { + popover: 'elementor-controls-popover' + }, + + activeTab: null, + + activeSection: null, + + className: function className() { + return 'elementor-controls-stack'; + }, + + templateHelpers: function templateHelpers() { + return { + elementData: elementor.getElementData(this.model) + }; + }, + + childViewOptions: function childViewOptions() { + return { + elementSettingsModel: this.model + }; + }, + + ui: function ui() { + return { + tabs: '.elementor-panel-navigation-tab', + reloadButton: '.elementor-update-preview-button' + }; + }, + + events: function events() { + return { + 'click @ui.tabs': 'onClickTabControl', + 'click @ui.reloadButton': 'onReloadButtonClick' + }; + }, + + modelEvents: { + destroy: 'onModelDestroy' + }, + + behaviors: { + HandleInnerTabs: { + behaviorClass: __webpack_require__(12) + } + }, + + initialize: function initialize() { + this.initCollection(); + + this.listenTo(elementor.channels.deviceMode, 'change', this.onDeviceModeChange); + }, + + initCollection: function initCollection() { + this.collection = new Backbone.Collection(_.values(elementor.mergeControlsSettings(this.getOption('controls')))); + }, + + filter: function filter(controlModel) { + if (controlModel.get('tab') !== this.activeTab) { + return false; + } + + if ('section' === controlModel.get('type')) { + return true; + } + + var section = controlModel.get('section'); + + return !section || section === this.activeSection; + }, + + getControlViewByModel: function getControlViewByModel(model) { + return this.children.findByModelCid(model.cid); + }, + + getControlViewByName: function getControlViewByName(name) { + return this.getControlViewByModel(this.getControlModel(name)); + }, + + getControlModel: function getControlModel(name) { + return this.collection.findWhere({ name: name }); + }, + + isVisibleSectionControl: function isVisibleSectionControl(sectionControlModel) { + return this.activeTab === sectionControlModel.get('tab'); + }, + + activateTab: function activateTab(tabName) { + this.activeTab = tabName; + + this.ui.tabs.removeClass('elementor-active').filter('[data-tab="' + tabName + '"]').addClass('elementor-active'); + + this.activateFirstSection(); + }, + + activateSection: function activateSection(sectionName) { + this.activeSection = sectionName; + }, + + activateFirstSection: function activateFirstSection() { + var self = this; + + var sectionControls = self.collection.filter(function (controlModel) { + return 'section' === controlModel.get('type') && self.isVisibleSectionControl(controlModel); + }); + + if (!sectionControls[0]) { + return; + } + + var preActivatedSection = sectionControls.filter(function (controlModel) { + return self.activeSection === controlModel.get('name'); + }); + + if (preActivatedSection[0]) { + return; + } + + self.activateSection(sectionControls[0].get('name')); + }, + + getChildView: function getChildView(item) { + var controlType = item.get('type'); + + return elementor.getControlView(controlType); + }, + + handlePopovers: function handlePopovers() { + var self = this, + popoverStarted = false, + $popover; + + self.removePopovers(); + + self.children.each(function (child) { + if (popoverStarted) { + $popover.append(child.$el); + } + + var popover = child.model.get('popover'); + + if (!popover) { + return; + } + + if (popover.start) { + popoverStarted = true; + + $popover = jQuery('
    ', { class: self.classes.popover }); + + child.$el.before($popover); + + $popover.append(child.$el); + } + + if (popover.end) { + popoverStarted = false; + } + }); + }, + + removePopovers: function removePopovers() { + this.$el.find('.' + this.classes.popover).remove(); + }, + + getNamespaceArray: function getNamespaceArray() { + return [elementor.getPanelView().getCurrentPageName()]; + }, + + openActiveSection: function openActiveSection() { + var activeSection = this.activeSection, + activeSectionView = this.children.filter(function (view) { + return activeSection === view.model.get('name'); + }); + + if (activeSectionView[0]) { + activeSectionView[0].$el.addClass('elementor-open'); + + var eventNamespace = this.getNamespaceArray(); + + eventNamespace.push(activeSection, 'activated'); + + elementor.channels.editor.trigger(eventNamespace.join(':'), this); + } + }, + + onRenderCollection: function onRenderCollection() { + this.openActiveSection(); + + this.handlePopovers(); + }, + + onRenderTemplate: function onRenderTemplate() { + this.activateTab(this.activeTab || this.ui.tabs.eq(0).data('tab')); + }, + + onModelDestroy: function onModelDestroy() { + this.destroy(); + }, + + onClickTabControl: function onClickTabControl(event) { + event.preventDefault(); + + var $tab = this.$(event.currentTarget), + tabName = $tab.data('tab'); + + if (this.activeTab === tabName) { + return; + } + + this.activateTab(tabName); + + this._renderChildren(); + }, + + onReloadButtonClick: function onReloadButtonClick() { + elementor.reloadPreview(); + }, + + onDeviceModeChange: function onDeviceModeChange() { + if ('desktop' === elementor.channels.deviceMode.request('currentMode')) { + this.$el.removeClass('elementor-responsive-switchers-open'); + } + }, + + onChildviewControlSectionClicked: function onChildviewControlSectionClicked(childView) { + var isSectionOpen = childView.$el.hasClass('elementor-open'); + + this.activateSection(isSectionOpen ? null : childView.model.get('name')); + + this._renderChildren(); + }, + + onChildviewResponsiveSwitcherClick: function onChildviewResponsiveSwitcherClick(childView, device) { + if ('desktop' === device) { + this.$el.toggleClass('elementor-responsive-switchers-open'); + } + } +}); + +module.exports = ControlsStack; + +/***/ }), + +/***/ 208: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var BaseSettingsModel; + +BaseSettingsModel = Backbone.Model.extend({ + options: {}, + + initialize: function initialize(data, options) { + var self = this; + + // Keep the options for cloning + self.options = options; + + self.controls = elementor.mergeControlsSettings(options.controls); + + self.validators = {}; + + if (!self.controls) { + return; + } + + var attrs = data || {}, + defaults = {}; + + _.each(self.controls, function (control) { + var isUIControl = -1 !== control.features.indexOf('ui'); + + if (isUIControl) { + return; + } + var controlName = control.name; + + if ('object' === _typeof(control.default)) { + defaults[controlName] = elementorCommon.helpers.cloneObject(control.default); + } else { + defaults[controlName] = control.default; + } + + var isDynamicControl = control.dynamic && control.dynamic.active, + hasDynamicSettings = isDynamicControl && attrs.__dynamic__ && attrs.__dynamic__[controlName]; + + if (isDynamicControl && !hasDynamicSettings && control.dynamic.default) { + if (!attrs.__dynamic__) { + attrs.__dynamic__ = {}; + } + + attrs.__dynamic__[controlName] = control.dynamic.default; + + hasDynamicSettings = true; + } + + // Check if the value is a plain object ( and not an array ) + var isMultipleControl = jQuery.isPlainObject(control.default); + + if (undefined !== attrs[controlName] && isMultipleControl && !_.isObject(attrs[controlName]) && !hasDynamicSettings) { + elementor.debug.addCustomError(new TypeError('An invalid argument supplied as multiple control value'), 'InvalidElementData', 'Element `' + (self.get('widgetType') || self.get('elType')) + '` got <' + attrs[controlName] + '> as `' + controlName + '` value. Expected array or object.'); + + delete attrs[controlName]; + } + + if (undefined === attrs[controlName]) { + attrs[controlName] = defaults[controlName]; + } + }); + + self.defaults = defaults; + + self.handleRepeaterData(attrs); + + self.set(attrs); + }, + + handleRepeaterData: function handleRepeaterData(attrs) { + _.each(this.controls, function (field) { + if (field.is_repeater) { + // TODO: Apply defaults on each field in repeater fields + if (!(attrs[field.name] instanceof Backbone.Collection)) { + attrs[field.name] = new Backbone.Collection(attrs[field.name], { + model: function model(attributes, options) { + options = options || {}; + + options.controls = field.fields; + + if (!attributes._id) { + attributes._id = elementor.helpers.getUniqueID(); + } + + return new BaseSettingsModel(attributes, options); + } + }); + } + } + }); + }, + + getFontControls: function getFontControls() { + return _.filter(this.getActiveControls(), function (control) { + return 'font' === control.type; + }); + }, + + getStyleControls: function getStyleControls(controls, attributes) { + var self = this; + + controls = elementorCommon.helpers.cloneObject(self.getActiveControls(controls, attributes)); + + var styleControls = []; + + jQuery.each(controls, function () { + var control = this, + controlDefaultSettings = elementor.config.controls[control.type]; + + control = jQuery.extend({}, controlDefaultSettings, control); + + if (control.fields) { + var styleFields = []; + + self.attributes[control.name].each(function (item) { + styleFields.push(self.getStyleControls(control.fields, item.attributes)); + }); + + control.styleFields = styleFields; + } + + if (control.fields || control.dynamic && control.dynamic.active || self.isStyleControl(control.name, controls)) { + styleControls.push(control); + } + }); + + return styleControls; + }, + + isStyleControl: function isStyleControl(attribute, controls) { + controls = controls || this.controls; + + var currentControl = _.find(controls, function (control) { + return attribute === control.name; + }); + + return currentControl && !_.isEmpty(currentControl.selectors); + }, + + getClassControls: function getClassControls(controls) { + controls = controls || this.controls; + + return _.filter(controls, function (control) { + return !_.isUndefined(control.prefix_class); + }); + }, + + isClassControl: function isClassControl(attribute) { + var currentControl = _.find(this.controls, function (control) { + return attribute === control.name; + }); + + return currentControl && !_.isUndefined(currentControl.prefix_class); + }, + + getControl: function getControl(id) { + return _.find(this.controls, function (control) { + return id === control.name; + }); + }, + + getActiveControls: function getActiveControls(controls, attributes) { + var activeControls = {}; + + if (!controls) { + controls = this.controls; + } + + if (!attributes) { + attributes = this.attributes; + } + + _.each(controls, function (control, controlKey) { + if (elementor.helpers.isActiveControl(control, attributes)) { + activeControls[controlKey] = control; + } + }); + + return activeControls; + }, + + clone: function clone() { + return new BaseSettingsModel(elementorCommon.helpers.cloneObject(this.attributes), elementorCommon.helpers.cloneObject(this.options)); + }, + + setExternalChange: function setExternalChange(key, value) { + var self = this, + settingsToChange; + + if ('object' === (typeof key === 'undefined' ? 'undefined' : _typeof(key))) { + settingsToChange = key; + } else { + settingsToChange = {}; + + settingsToChange[key] = value; + } + + self.set(settingsToChange); + + jQuery.each(settingsToChange, function (changedKey, changedValue) { + self.trigger('change:external:' + changedKey, changedValue); + }); + }, + + parseDynamicSettings: function parseDynamicSettings(settings, options, controls) { + var self = this; + + settings = elementorCommon.helpers.cloneObject(settings || self.attributes); + + options = options || {}; + + controls = controls || this.controls; + + jQuery.each(controls, function () { + var control = this, + valueToParse; + + if ('repeater' === control.type) { + valueToParse = settings[control.name]; + valueToParse.forEach(function (value, key) { + valueToParse[key] = self.parseDynamicSettings(value, options, control.fields); + }); + + return; + } + + valueToParse = settings.__dynamic__ && settings.__dynamic__[control.name]; + + if (!valueToParse) { + return; + } + + var dynamicSettings = control.dynamic; + + if (undefined === dynamicSettings) { + dynamicSettings = elementor.config.controls[control.type].dynamic; + } + + if (!dynamicSettings || !dynamicSettings.active) { + return; + } + + var dynamicValue; + + try { + dynamicValue = elementor.dynamicTags.parseTagsText(valueToParse, dynamicSettings, elementor.dynamicTags.getTagDataContent); + } catch (error) { + if (elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR !== error.message) { + throw error; + } + + dynamicValue = ''; + + if (options.onServerRequestStart) { + options.onServerRequestStart(); + } + + elementor.dynamicTags.refreshCacheFromServer(function () { + if (options.onServerRequestEnd) { + options.onServerRequestEnd(); + } + }); + } + + if (dynamicSettings.property) { + settings[control.name][dynamicSettings.property] = dynamicValue; + } else { + settings[control.name] = dynamicValue; + } + }); + + return settings; + }, + + toJSON: function toJSON(options) { + var data = Backbone.Model.prototype.toJSON.call(this); + + options = options || {}; + + delete data.widgetType; + delete data.elType; + delete data.isInner; + + _.each(data, function (attribute, key) { + if (attribute && attribute.toJSON) { + data[key] = attribute.toJSON(); + } + }); + + // TODO: `options.removeDefault` is a bc since 2.5.14 + if (options.remove && -1 !== options.remove.indexOf('default') || options.removeDefault) { + var controls = this.controls; + + _.each(data, function (value, key) { + var control = controls[key]; + + if (!control) { + return; + } + + // TODO: use `save_default` in text|textarea controls. + if (control.save_default || ('text' === control.type || 'textarea' === control.type) && data[key]) { + return; + } + + if (_.isEqual(data[key], control.default)) { + delete data[key]; + } + }); + } + + return elementorCommon.helpers.cloneObject(data); + } +}); + +module.exports = BaseSettingsModel; + +/***/ }) + +/******/ }); diff --git a/modules/creativeelements/views/js/editor-modules.min.js b/modules/creativeelements/views/js/editor-modules.min.js new file mode 100644 index 00000000..d5799a00 --- /dev/null +++ b/modules/creativeelements/views/js/editor-modules.min.js @@ -0,0 +1,5 @@ +/*! + * Creative Elements - live Theme & Page Builder + * Copyright 2019-2022 WebshopWorks.com & Elementor.com + */ + !function(n){var o={};function i(e){if(o[e])return o[e].exports;var t=o[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=n,i.c=o,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)i.d(n,o,function(e){return t[e]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=204)}({12:function(e,t,n){"use strict";var o=Marionette.Behavior.extend({onRenderCollection:function(){this.handleInnerTabs(this.view)},handleInnerTabs:function(r){var e=r.children.filter(function(e){return"tabs"===e.model.get("type")});_.each(e,function(i){i.$el.find(".elementor-control-content").remove();var t=i.model.get("name"),e=r.children.filter(function(e){return"tab"===e.model.get("type")&&e.model.get("tabs_wrapper")===t});_.each(e,function(e,t){i._addChildView(e);var n=e.model.get("name"),o=r.children.filter(function(e){return n===e.model.get("inner_tab")});0===t?e.$el.addClass("elementor-tab-active"):_.each(o,function(e){e.$el.addClass("elementor-tab-close")})})})},onChildviewControlTabClicked:function(t){var n="elementor-tab-close",o="elementor-tab-active",i=t.model.get("name"),e=this.view.children.filter(function(e){return"tab"!==e.model.get("type")&&t.model.get("tabs_wrapper")===e.model.get("tabs_wrapper")}),r=this.view.children.filter(function(e){return"tab"===e.model.get("type")&&t.model.get("tabs_wrapper")===e.model.get("tabs_wrapper")});_.each(r,function(e){e.$el.removeClass(o)}),t.$el.addClass(o),_.each(e,function(e){e.model.get("inner_tab")===i?e.$el.removeClass(n):e.$el.addClass(n)}),elementor.getPanelView().updateScrollbar()}});e.exports=o},204:function(e,t,n){"use strict";var o=l(n(205)),i=l(n(206)),r=l(n(207)),n=l(n(208));function l(e){return e&&e.__esModule?e:{default:e}}elementorModules.editor={elements:{models:{BaseSettings:n.default}},utils:{Module:o.default,Introduction:i.default},views:{ControlsStack:r.default}}},205:function(e,t,n){"use strict";var o=elementorModules.Module.extend({onInit:function(){jQuery(window).on("elementor:init",this.onElementorReady)},getEditorControlView:function(e){return elementor.getPanelView().getCurrentPageView().children.findByModelCid(this.getEditorControlModel(e).cid)},getEditorControlModel:function(e){return elementor.getPanelView().getCurrentPageView().collection.findWhere({name:e})},onElementorReady:function(){this.onElementorInit(),elementor.on("frontend:init",this.onElementorFrontendInit.bind(this)).on("preview:loaded",this.onElementorPreviewLoaded.bind(this))}});o.prototype.onElementorInit=function(){},o.prototype.onElementorPreviewLoaded=function(){},o.prototype.onElementorFrontendInit=function(){},e.exports=o},206:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e};function i(e,t){for(var n=0;n",{class:o.classes.popover}),e.$el.before(n),n.append(e.$el)),t.end&&(i=!1))})},removePopovers:function(){this.$el.find("."+this.classes.popover).remove()},getNamespaceArray:function(){return[elementor.getPanelView().getCurrentPageName()]},openActiveSection:function(){var t=this.activeSection,e=this.children.filter(function(e){return t===e.model.get("name")});e[0]&&(e[0].$el.addClass("elementor-open"),(e=this.getNamespaceArray()).push(t,"activated"),elementor.channels.editor.trigger(e.join(":"),this))},onRenderCollection:function(){this.openActiveSection(),this.handlePopovers()},onRenderTemplate:function(){this.activateTab(this.activeTab||this.ui.tabs.eq(0).data("tab"))},onModelDestroy:function(){this.destroy()},onClickTabControl:function(e){e.preventDefault();e=this.$(e.currentTarget).data("tab");this.activeTab!==e&&(this.activateTab(e),this._renderChildren())},onReloadButtonClick:function(){elementor.reloadPreview()},onDeviceModeChange:function(){"desktop"===elementor.channels.deviceMode.request("currentMode")&&this.$el.removeClass("elementor-responsive-switchers-open")},onChildviewControlSectionClicked:function(e){var t=e.$el.hasClass("elementor-open");this.activateSection(t?null:e.model.get("name")),this._renderChildren()},onChildviewResponsiveSwitcherClick:function(e,t){"desktop"===t&&this.$el.toggleClass("elementor-responsive-switchers-open")}});e.exports=n},208:function(e,t,n){"use strict";var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=Backbone.Model.extend({options:{},initialize:function(e,t){var i,r,l=this;l.options=t,l.controls=elementor.mergeControlsSettings(t.controls),l.validators={},l.controls&&(i=e||{},r={},_.each(l.controls,function(e){var t,n,o;-1===e.features.indexOf("ui")&&(t=e.name,"object"===a(e.default)?r[t]=elementorCommon.helpers.cloneObject(e.default):r[t]=e.default,n=(o=e.dynamic&&e.dynamic.active)&&i.__dynamic__&&i.__dynamic__[t],o&&!n&&e.dynamic.default&&(i.__dynamic__||(i.__dynamic__={}),i.__dynamic__[t]=e.dynamic.default,n=!0),o=jQuery.isPlainObject(e.default),void 0===i[t]||!o||_.isObject(i[t])||n||(elementor.debug.addCustomError(new TypeError("An invalid argument supplied as multiple control value"),"InvalidElementData","Element `"+(l.get("widgetType")||l.get("elType"))+"` got <"+i[t]+"> as `"+t+"` value. Expected array or object."),delete i[t]),void 0===i[t]&&(i[t]=r[t]))}),l.defaults=r,l.handleRepeaterData(i),l.set(i))},handleRepeaterData:function(e){_.each(this.controls,function(n){!n.is_repeater||e[n.name]instanceof Backbone.Collection||(e[n.name]=new Backbone.Collection(e[n.name],{model:function(e,t){return(t=t||{}).controls=n.fields,e._id||(e._id=elementor.helpers.getUniqueID()),new o(e,t)}}))})},getFontControls:function(){return _.filter(this.getActiveControls(),function(e){return"font"===e.type})},getStyleControls:function(o,e){var i=this,r=(o=elementorCommon.helpers.cloneObject(i.getActiveControls(o,e)),[]);return jQuery.each(o,function(){var t,n=this,e=elementor.config.controls[n.type];(n=jQuery.extend({},e,n)).fields&&(t=[],i.attributes[n.name].each(function(e){t.push(i.getStyleControls(n.fields,e.attributes))}),n.styleFields=t),(n.fields||n.dynamic&&n.dynamic.active||i.isStyleControl(n.name,o))&&r.push(n)}),r},isStyleControl:function(t,e){e=e||this.controls;e=_.find(e,function(e){return t===e.name});return e&&!_.isEmpty(e.selectors)},getClassControls:function(e){return e=e||this.controls,_.filter(e,function(e){return!_.isUndefined(e.prefix_class)})},isClassControl:function(t){var e=_.find(this.controls,function(e){return t===e.name});return e&&!_.isUndefined(e.prefix_class)},getControl:function(t){return _.find(this.controls,function(e){return t===e.name})},getActiveControls:function(e,n){var o={};return e=e||this.controls,n=n||this.attributes,_.each(e,function(e,t){elementor.helpers.isActiveControl(e,n)&&(o[t]=e)}),o},clone:function(){return new o(elementorCommon.helpers.cloneObject(this.attributes),elementorCommon.helpers.cloneObject(this.options))},setExternalChange:function(e,t){var n,o=this;"object"===(void 0===e?"undefined":a(e))?n=e:(n={})[e]=t,o.set(n),jQuery.each(n,function(e,t){o.trigger("change:external:"+e,t)})},parseDynamicSettings:function(i,r,e){var l=this;return i=elementorCommon.helpers.cloneObject(i||l.attributes),r=r||{},e=e||this.controls,jQuery.each(e,function(){var n,o=this;if("repeater"===o.type)(n=i[o.name]).forEach(function(e,t){n[t]=l.parseDynamicSettings(e,r,o.fields)});else if(n=i.__dynamic__&&i.__dynamic__[o.name]){var t,e=o.dynamic;if((e=void 0===e?elementor.config.controls[o.type].dynamic:e)&&e.active){try{t=elementor.dynamicTags.parseTagsText(n,e,elementor.dynamicTags.getTagDataContent)}catch(e){if(elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR!==e.message)throw e;t="",r.onServerRequestStart&&r.onServerRequestStart(),elementor.dynamicTags.refreshCacheFromServer(function(){r.onServerRequestEnd&&r.onServerRequestEnd()})}e.property?i[o.name][e.property]=t:i[o.name]=t}}}),i},toJSON:function(e){var o,i=Backbone.Model.prototype.toJSON.call(this);return e=e||{},delete i.widgetType,delete i.elType,delete i.isInner,_.each(i,function(e,t){e&&e.toJSON&&(i[t]=e.toJSON())}),(e.remove&&-1!==e.remove.indexOf("default")||e.removeDefault)&&(o=this.controls,_.each(i,function(e,t){var n=o[t];!n||n.save_default||("text"===n.type||"textarea"===n.type)&&i[t]||_.isEqual(i[t],n.default)&&delete i[t]})),elementorCommon.helpers.cloneObject(i)}});e.exports=o}}); \ No newline at end of file diff --git a/modules/creativeelements/views/js/editor-preview.js b/modules/creativeelements/views/js/editor-preview.js new file mode 100644 index 00000000..af12b412 --- /dev/null +++ b/modules/creativeelements/views/js/editor-preview.js @@ -0,0 +1,8 @@ +/*! + * Creative Elements - live Theme & Page Builder + * Copyright 2019-2022 WebshopWorks.com + */ +if (!$('#elementor').length && location.search.indexOf('&force=1&') < 0) { + // redirect to preview page when content area doesn't exist + location.href = cePreview + '&force=1&ver=' + Date.now(); +} \ No newline at end of file diff --git a/modules/creativeelements/views/js/editor.js b/modules/creativeelements/views/js/editor.js new file mode 100644 index 00000000..eb06a633 --- /dev/null +++ b/modules/creativeelements/views/js/editor.js @@ -0,0 +1,18055 @@ +/*! + * Creative Elements - live Theme & Page Builder + * Copyright 2019-2022 WebshopWorks.com & Elementor.com + */ + +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 43); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ControlBaseView = __webpack_require__(3), + TagsBehavior = __webpack_require__(57), + Validator = __webpack_require__(9), + ControlBaseDataView; + +ControlBaseDataView = ControlBaseView.extend({ + + ui: function ui() { + var ui = ControlBaseView.prototype.ui.apply(this, arguments); + + _.extend(ui, { + input: 'input[data-setting][type!="checkbox"][type!="radio"]', + checkbox: 'input[data-setting][type="checkbox"]', + radio: 'input[data-setting][type="radio"]', + select: 'select[data-setting]', + textarea: 'textarea[data-setting]', + responsiveSwitchers: '.elementor-responsive-switcher', + contentEditable: '[contenteditable="true"]', + tooltipTarget: '.tooltip-target' + }); + + return ui; + }, + + templateHelpers: function templateHelpers() { + var controlData = ControlBaseView.prototype.templateHelpers.apply(this, arguments); + + controlData.data.controlValue = this.getControlValue(); + + return controlData; + }, + + events: function events() { + return { + 'input @ui.input': 'onBaseInputChange', + 'change @ui.checkbox': 'onBaseInputChange', + 'change @ui.radio': 'onBaseInputChange', + 'input @ui.textarea': 'onBaseInputChange', + 'change @ui.select': 'onBaseInputChange', + 'input @ui.contentEditable': 'onBaseInputChange', + 'click @ui.responsiveSwitchers': 'onResponsiveSwitchersClick' + }; + }, + + behaviors: function behaviors() { + var behaviors = {}, + dynamicSettings = this.options.model.get('dynamic'); + + if (dynamicSettings && dynamicSettings.active) { + var tags = _.filter(elementor.dynamicTags.getConfig('tags'), function (tag) { + return _.intersection(tag.categories, dynamicSettings.categories).length; + }); + + if (tags.length) { + behaviors.tags = { + behaviorClass: TagsBehavior, + tags: tags, + dynamicSettings: dynamicSettings + }; + } + } + + return behaviors; + }, + + initialize: function initialize() { + ControlBaseView.prototype.initialize.apply(this, arguments); + + this.registerValidators(); + + this.listenTo(this.elementSettingsModel, 'change:external:' + this.model.get('name'), this.onAfterExternalChange); + }, + + getControlValue: function getControlValue() { + return this.elementSettingsModel.get(this.model.get('name')); + }, + + setValue: function setValue(value) { + this.setSettingsModel(value); + }, + + setSettingsModel: function setSettingsModel(value) { + this.elementSettingsModel.set(this.model.get('name'), value); + + this.triggerMethod('settings:change'); + }, + + applySavedValue: function applySavedValue() { + this.setInputValue('[data-setting="' + this.model.get('name') + '"]', this.getControlValue()); + }, + + getEditSettings: function getEditSettings(setting) { + var settings = this.getOption('elementEditSettings').toJSON(); + + if (setting) { + return settings[setting]; + } + + return settings; + }, + + setEditSetting: function setEditSetting(settingKey, settingValue) { + var settings = this.getOption('elementEditSettings'); + + settings.set(settingKey, settingValue); + }, + + getInputValue: function getInputValue(input) { + var $input = this.$(input); + + if ($input.is('[contenteditable="true"]')) { + return $input.html(); + } + + var inputValue = $input.val(), + inputType = $input.attr('type'); + + if (-1 !== ['radio', 'checkbox'].indexOf(inputType)) { + return $input.prop('checked') ? inputValue : ''; + } + + if ('number' === inputType && _.isFinite(inputValue)) { + return +inputValue; + } + + // Temp fix for jQuery (< 3.0) that return null instead of empty array + if ('SELECT' === input.tagName && $input.prop('multiple') && null === inputValue) { + inputValue = []; + } + + return inputValue; + }, + + setInputValue: function setInputValue(input, value) { + var $input = this.$(input), + inputType = $input.attr('type'); + + if ('checkbox' === inputType) { + $input.prop('checked', !!value); + } else if ('radio' === inputType) { + $input.filter('[value="' + value + '"]').prop('checked', true); + } else { + $input.val(value); + } + }, + + addValidator: function addValidator(validator) { + this.validators.push(validator); + }, + + registerValidators: function registerValidators() { + this.validators = []; + + var validationTerms = {}; + + if (this.model.get('required')) { + validationTerms.required = true; + } + + if (!jQuery.isEmptyObject(validationTerms)) { + this.addValidator(new Validator({ + validationTerms: validationTerms + })); + } + }, + + onRender: function onRender() { + ControlBaseView.prototype.onRender.apply(this, arguments); + + if (this.model.get('responsive')) { + this.renderResponsiveSwitchers(); + } + + this.applySavedValue(); + + this.triggerMethod('ready'); + + this.toggleControlVisibility(); + + this.addTooltip(); + }, + + onBaseInputChange: function onBaseInputChange(event) { + clearTimeout(this.correctionTimeout); + + var input = event.currentTarget, + value = this.getInputValue(input), + validators = this.validators.slice(0), + settingsValidators = this.elementSettingsModel.validators[this.model.get('name')]; + + if (settingsValidators) { + validators = validators.concat(settingsValidators); + } + + if (validators) { + var oldValue = this.getControlValue(input.dataset.setting); + + var isValidValue = validators.every(function (validator) { + return validator.isValid(value, oldValue); + }); + + if (!isValidValue) { + this.correctionTimeout = setTimeout(this.setInputValue.bind(this, input, oldValue), 1200); + + return; + } + } + + this.updateElementModel(value, input); + + this.triggerMethod('input:change', event); + }, + + onResponsiveSwitchersClick: function onResponsiveSwitchersClick(event) { + var device = jQuery(event.currentTarget).data('device'); + + this.triggerMethod('responsive:switcher:click', device); + + elementor.changeDeviceMode(device); + }, + + renderResponsiveSwitchers: function renderResponsiveSwitchers() { + var templateHtml = Marionette.Renderer.render('#tmpl-elementor-control-responsive-switchers', this.model.attributes); + + this.ui.controlTitle.after(templateHtml); + }, + + onAfterExternalChange: function onAfterExternalChange() { + this.hideTooltip(); + + this.applySavedValue(); + }, + + addTooltip: function addTooltip() { + if (!this.ui.tooltipTarget) { + return; + } + + // Create tooltip on controls + this.ui.tooltipTarget.tipsy({ + gravity: function gravity() { + // `n` for down, `s` for up + var gravity = jQuery(this).data('tooltip-pos'); + + if (undefined !== gravity) { + return gravity; + } + return 'n'; + }, + title: function title() { + return this.getAttribute('data-tooltip'); + } + }); + }, + + hideTooltip: function hideTooltip() { + if (this.ui.tooltipTarget) { + this.ui.tooltipTarget.tipsy('hide'); + } + }, + + updateElementModel: function updateElementModel(value) { + this.setValue(value); + } +}, { + // Static methods + getStyleValue: function getStyleValue(placeholder, controlValue, controlData) { + if ('DEFAULT' === placeholder) { + return controlData.default; + } + + return controlValue; + }, + + onPasteStyle: function onPasteStyle() { + return true; + } +}); + +module.exports = ControlBaseDataView; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var userAgent = navigator.userAgent; + +exports.default = { + webkit: -1 !== userAgent.indexOf('AppleWebKit'), + firefox: -1 !== userAgent.indexOf('Firefox'), + ie: /Trident|MSIE/.test(userAgent), + edge: -1 !== userAgent.indexOf('Edge'), + mac: -1 !== userAgent.indexOf('Macintosh') +}; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var ControlBaseDataView = __webpack_require__(0), + ControlBaseMultipleItemView; + +ControlBaseMultipleItemView = ControlBaseDataView.extend({ + + applySavedValue: function applySavedValue() { + var values = this.getControlValue(), + $inputs = this.$('[data-setting]'), + self = this; + + _.each(values, function (value, key) { + var $input = $inputs.filter(function () { + return key === this.dataset.setting; + }); + + self.setInputValue($input, value); + }); + }, + + getControlValue: function getControlValue(key) { + var values = this.elementSettingsModel.get(this.model.get('name')); + + if (!jQuery.isPlainObject(values)) { + return {}; + } + + if (key) { + var value = values[key]; + + if (undefined === value) { + value = ''; + } + + return value; + } + + return elementorCommon.helpers.cloneObject(values); + }, + + setValue: function setValue(key, value) { + var values = this.getControlValue(); + + if ('object' === (typeof key === 'undefined' ? 'undefined' : _typeof(key))) { + _.each(key, function (internalValue, internalKey) { + values[internalKey] = internalValue; + }); + } else { + values[key] = value; + } + + this.setSettingsModel(values); + }, + + updateElementModel: function updateElementModel(value, input) { + var key = input.dataset.setting; + + this.setValue(key, value); + } +}, { + // Static methods + getStyleValue: function getStyleValue(placeholder, controlValue) { + if (!_.isObject(controlValue)) { + return ''; // invalid + } + + return controlValue[placeholder.toLowerCase()]; + } +}); + +module.exports = ControlBaseMultipleItemView; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ControlBaseView; + +ControlBaseView = Marionette.CompositeView.extend({ + ui: function ui() { + return { + controlTitle: '.elementor-control-title' + }; + }, + + behaviors: function behaviors() { + var behaviors = {}; + + return elementor.hooks.applyFilters('controls/base/behaviors', behaviors, this); + }, + + getBehavior: function getBehavior(name) { + return this._behaviors[Object.keys(this.behaviors()).indexOf(name)]; + }, + + className: function className() { + // TODO: Any better classes for that? + var classes = 'elementor-control elementor-control-' + this.model.get('name') + ' elementor-control-type-' + this.model.get('type'), + modelClasses = this.model.get('classes'), + responsive = this.model.get('responsive'); + + if (!_.isEmpty(modelClasses)) { + classes += ' ' + modelClasses; + } + + if (!_.isEmpty(responsive)) { + classes += ' elementor-control-responsive-' + responsive.max; + } + + return classes; + }, + + templateHelpers: function templateHelpers() { + var controlData = { + _cid: this.model.cid + }; + + return { + data: _.extend({}, this.model.toJSON(), controlData) + }; + }, + + getTemplate: function getTemplate() { + return Marionette.TemplateCache.get('#tmpl-elementor-control-' + this.model.get('type') + '-content'); + }, + + initialize: function initialize(options) { + this.elementSettingsModel = options.elementSettingsModel; + + var controlType = this.model.get('type'), + controlSettings = jQuery.extend(true, {}, elementor.config.controls[controlType], this.model.attributes); + + this.model.set(controlSettings); + + this.listenTo(this.elementSettingsModel, 'change', this.toggleControlVisibility); + }, + + toggleControlVisibility: function toggleControlVisibility() { + var isVisible = elementor.helpers.isActiveControl(this.model, ( + this.model.get('check_section') ? elementor.helpers.getParentSectionModel(this.elementSettingsModel.cid) : this.elementSettingsModel + ).attributes); + + this.$el.toggleClass('elementor-hidden-control', !isVisible); + + elementor.getPanelView().updateScrollbar(); + }, + + onRender: function onRender() { + var layoutType = this.model.get('label_block') ? 'block' : 'inline', + showLabel = this.model.get('show_label'), + elClasses = 'elementor-label-' + layoutType; + + elClasses += ' elementor-control-separator-' + this.model.get('separator'); + + if (!showLabel) { + elClasses += ' elementor-control-hidden-label'; + } + + this.$el.addClass(elClasses); + + this.toggleControlVisibility(); + } +}); + +module.exports = ControlBaseView; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ControlBaseDataView = __webpack_require__(0), + ControlSelect2ItemView; + +ControlSelect2ItemView = ControlBaseDataView.extend({ + + getSelect2Placeholder: function getSelect2Placeholder() { + return this.ui.select.children('option:first[value=""]').text(); + }, + + getSelect2DefaultOptions: function getSelect2DefaultOptions() { + return { + allowClear: true, + placeholder: this.getSelect2Placeholder(), + dir: elementorCommon.config.isRTL ? 'rtl' : 'ltr', + }; + }, + + getProductsListOptions: function getProductsListOptions() { + return { + ajax: { + type: 'GET', + dataType: 'json', + delay: 250, + processResults: function (data) { + return {results: data}; + } + }, + minimumInputLength: 2, + templateResult: function (data) { + elementor.productsCache[data.id] = data; + return jQuery( + '
    ' + + (data.image ? '' : '') + + '' + (data.name || '') + '' + + '
    ' + ); + }, + templateSelection: function (data) { + return data.name || data.text || ''; + }, + }; + }, + + getSelect2Options: function getSelect2Options() { + var opts = this.model.get('select2options') || {}; + return jQuery.extend(true, this.getSelect2DefaultOptions(), opts.product ? this.getProductsListOptions() : {}, opts); + }, + + onReady: function onReady() { + var opts = this.getSelect2Options(), + val = this.elementSettingsModel.attributes[this.model.attributes.name]; + + this.ui.select.select2(opts); + this.ui.fieldLoading = this.$el.find('.elementor-control-loading'); + + if (opts.ajax && val) { + var result = elementor.productsCache[val]; + if (result) { + return this.onSuccessGetProducts([result]); + } + elementorCommon.ajax.addRequest('get_products_by_id', { + data: {ids: [val]}, + success: $.proxy(this, 'onSuccessGetProducts'), + }); + } else { + this.ui.fieldLoading.hide(); + } + }, + + onSuccessGetProducts: function onSuccessGetProducts(results) { + var result = results && results[0]; + if (result) { + elementor.productsCache[result.id] = result; + + this.ui.select.select2('trigger', 'select', { + data: result, + }); + } + this.ui.fieldLoading.hide(); + }, + + onBeforeDestroy: function onBeforeDestroy() { + if (this.ui.select.data('select2')) { + this.ui.select.select2('destroy'); + } + + this.$el.remove(); + } +}); + +module.exports = ControlSelect2ItemView; + +/***/ }), +/* 5 */, +/* 6 */, +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _environment = __webpack_require__(1); + +var _environment2 = _interopRequireDefault(_environment); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var ControlsCSSParser = __webpack_require__(10), + Validator = __webpack_require__(9), + BaseContainer = __webpack_require__(26), + BaseElementView; + +BaseElementView = BaseContainer.extend({ + tagName: 'div', + + controlsCSSParser: null, + + allowRender: true, + + toggleEditTools: false, + + renderAttributes: {}, + + className: function className() { + var classes = 'elementor-element elementor-element-edit-mode ' + this.getElementUniqueID(); + + if (this.toggleEditTools) { + classes += ' elementor-element--toggle-edit-tools'; + } + + return classes; + }, + + attributes: function attributes() { + return { + 'data-id': this.getID(), + 'data-element_type': this.model.get('elType') + }; + }, + + ui: function ui() { + return { + tools: '> .elementor-element-overlay > .elementor-editor-element-settings', + editButton: '> .elementor-element-overlay .elementor-editor-element-edit', + duplicateButton: '> .elementor-element-overlay .elementor-editor-element-duplicate', + addButton: '> .elementor-element-overlay .elementor-editor-element-add', + removeButton: '> .elementor-element-overlay .elementor-editor-element-remove', + tabs: '> .elementor-container > nav li' + }; + }, + + behaviors: function behaviors() { + var groups = elementor.hooks.applyFilters('elements/' + this.options.model.get('elType') + '/contextMenuGroups', this.getContextMenuGroups(), this); + + var behaviors = { + contextMenu: { + behaviorClass: __webpack_require__(8), + groups: groups + } + }; + + return elementor.hooks.applyFilters('elements/base/behaviors', behaviors, this); + }, + + getBehavior: function getBehavior(name) { + return this._behaviors[Object.keys(this.behaviors()).indexOf(name)]; + }, + + events: function events() { + return { + mousedown: 'onMouseDown', + 'click @ui.editButton': 'onEditButtonClick', + 'click @ui.duplicateButton': 'onDuplicateButtonClick', + 'click @ui.addButton': 'onAddButtonClick', + 'click @ui.removeButton': 'onRemoveButtonClick', + 'click @ui.tabs': 'onTabClick' + }; + }, + + getElementType: function getElementType() { + return this.model.get('elType'); + }, + + getIDInt: function getIDInt() { + return parseInt(this.getID(), 16); + }, + + getChildType: function getChildType() { + return elementor.helpers.getElementChildType(this.getElementType()); + }, + + getChildView: function getChildView(model) { + var ChildView, + elType = model.get('elType'); + + if ('section' === elType) { + ChildView = __webpack_require__(27); + } else if ('column' === elType) { + ChildView = __webpack_require__(96); + } else { + ChildView = elementor.modules.elements.views.Widget; + } + + return elementor.hooks.applyFilters('element/view', ChildView, model, this); + }, + + getTemplateType: function getTemplateType() { + return 'js'; + }, + + getEditModel: function getEditModel() { + return this.model; + }, + + getContextMenuGroups: function getContextMenuGroups() { + var controlSign = _environment2.default.mac ? '⌘' : '^'; + + return [{ + name: 'general', + actions: [{ + name: 'edit', + icon: 'eicon-edit', + title: elementor.translate('edit_element', [this.options.model.getTitle()]), + callback: this.options.model.trigger.bind(this.options.model, 'request:edit') + }, { + name: 'duplicate', + icon: 'eicon-clone', + title: elementor.translate('duplicate'), + shortcut: controlSign + '+D', + callback: this.duplicate.bind(this) + }] + }, { + name: 'transfer', + actions: [{ + name: 'copy', + title: elementor.translate('copy'), + shortcut: controlSign + '+C', + callback: this.copy.bind(this) + }, { + name: 'paste', + title: elementor.translate('paste'), + shortcut: controlSign + '+V', + callback: this.paste.bind(this), + isEnabled: this.isPasteEnabled.bind(this) + }, { + name: 'pasteStyle', + title: elementor.translate('paste_style'), + shortcut: controlSign + '+⇧+V', + callback: this.pasteStyle.bind(this), + isEnabled: function isEnabled() { + return !!elementorCommon.storage.get('transfer'); + } + }, { + name: 'resetStyle', + title: elementor.translate('reset_style'), + callback: this.resetStyle.bind(this) + }] + }, { + name: 'delete', + actions: [{ + name: 'delete', + icon: 'eicon-trash', + title: elementor.translate('delete'), + shortcut: '⌦', + callback: this.removeElement.bind(this) + }] + }]; + }, + + initialize: function initialize() { + BaseContainer.prototype.initialize.apply(this, arguments); + + if (this.collection) { + this.listenTo(this.collection, 'add remove reset', this.onCollectionChanged, this); + } + + var editModel = this.getEditModel(); + + this.listenTo(editModel.get('settings'), 'change', this.onSettingsChanged).listenTo(editModel.get('editSettings'), 'change', this.onEditSettingsChanged).listenTo(this.model, 'request:edit', this.onEditRequest).listenTo(this.model, 'request:toggleVisibility', this.toggleVisibility); + + this.initControlsCSSParser(); + }, + + startTransport: function startTransport(type) { + elementorCommon.storage.set('transfer', { + type: type, + elementsType: this.getElementType(), + elements: [this.model.toJSON({ copyHtmlCache: true })] + }); + }, + + copy: function copy() { + this.startTransport('copy'); + }, + + cut: function cut() { + this.startTransport('cut'); + }, + + paste: function paste() { + this.trigger('request:paste'); + }, + + isPasteEnabled: function isPasteEnabled() { + var transferData = elementorCommon.storage.get('transfer'); + + if (!transferData || this.isCollectionFilled()) { + return false; + } + + return this.getElementType() === transferData.elementsType; + }, + + isStyleTransferControl: function isStyleTransferControl(control) { + if (undefined !== control.style_transfer) { + return control.style_transfer; + } + + return 'content' !== control.tab || control.selectors || control.prefix_class; + }, + + duplicate: function duplicate() { + var oldTransport = elementorCommon.storage.get('transfer'); + + this.copy(); + + this.paste(); + + elementorCommon.storage.set('transfer', oldTransport); + }, + + pasteStyle: function pasteStyle() { + var self = this, + transferData = elementorCommon.storage.get('transfer'), + sourceElement = transferData.elements[0], + sourceSettings = sourceElement.settings, + editModel = self.getEditModel(), + settings = editModel.get('settings'), + settingsAttributes = settings.attributes, + controls = settings.controls, + diffSettings = {}; + + jQuery.each(controls, function (controlName, control) { + if (!self.isStyleTransferControl(control)) { + return; + } + + var sourceValue = sourceSettings[controlName], + targetValue = settingsAttributes[controlName]; + + if (undefined === sourceValue || undefined === targetValue) { + return; + } + + if ('object' === (typeof sourceValue === 'undefined' ? 'undefined' : _typeof(sourceValue)) ^ 'object' === (typeof targetValue === 'undefined' ? 'undefined' : _typeof(targetValue))) { + return; + } + + if ('object' === (typeof sourceValue === 'undefined' ? 'undefined' : _typeof(sourceValue))) { + var isEqual = true; + + jQuery.each(sourceValue, function (propertyKey) { + if (sourceValue[propertyKey] !== targetValue[propertyKey]) { + return isEqual = false; + } + }); + + if (isEqual) { + return; + } + } + if (sourceValue === targetValue) { + return; + } + + var ControlView = elementor.getControlView(control.type); + + if (!ControlView.onPasteStyle(control, sourceValue)) { + return; + } + + diffSettings[controlName] = sourceValue; + }); + + self.allowRender = false; + + elementor.channels.data.trigger('element:before:paste:style', editModel); + + editModel.setSetting(diffSettings); + + elementor.channels.data.trigger('element:after:paste:style', editModel); + + self.allowRender = true; + + self.renderOnChange(); + }, + + resetStyle: function resetStyle() { + var self = this, + editModel = self.getEditModel(), + controls = editModel.get('settings').controls, + defaultValues = {}; + + self.allowRender = false; + + elementor.channels.data.trigger('element:before:reset:style', editModel); + + jQuery.each(controls, function (controlName, control) { + if (!self.isStyleTransferControl(control)) { + return; + } + + defaultValues[controlName] = control.default; + }); + + editModel.setSetting(defaultValues); + + elementor.channels.data.trigger('element:after:reset:style', editModel); + + self.allowRender = true; + + self.renderOnChange(); + }, + + toggleVisibility: function toggleVisibility() { + this.model.set('hidden', !this.model.get('hidden')); + + this.toggleVisibilityClass(); + }, + + toggleVisibilityClass: function toggleVisibilityClass() { + this.$el.toggleClass('elementor-edit-hidden', !!this.model.get('hidden')); + }, + + addElementFromPanel: function addElementFromPanel(options) { + options = options || {}; + + var elementView = elementor.channels.panelElements.request('element:selected'); + + var itemData = { + elType: elementView.model.get('elType') + }; + + if ('widget' === itemData.elType) { + itemData.widgetType = elementView.model.get('widgetType'); + } else if ('section' === itemData.elType) { + itemData.isInner = true; + } else { + return; + } + + var customData = elementView.model.get('custom'); + + if (customData) { + jQuery.extend(itemData, customData); + } + + options.trigger = { + beforeAdd: 'element:before:add', + afterAdd: 'element:after:add' + }; + + options.onAfterAdd = function (newModel, newView) { + if ('section' === newView.getElementType() && newView.isInner()) { + newView.addChildElement(); + } + }; + + this.addChildElement(itemData, options); + }, + + addControlValidator: function addControlValidator(controlName, validationCallback) { + validationCallback = validationCallback.bind(this); + + var validator = new Validator({ customValidationMethod: validationCallback }), + validators = this.getEditModel().get('settings').validators; + + if (!validators[controlName]) { + validators[controlName] = []; + } + + validators[controlName].push(validator); + }, + + addRenderAttribute: function addRenderAttribute(element, key, value, overwrite) { + var self = this; + + if ('object' === (typeof element === 'undefined' ? 'undefined' : _typeof(element))) { + jQuery.each(element, function (elementKey) { + self.addRenderAttribute(elementKey, this, null, overwrite); + }); + + return self; + } + + if ('object' === (typeof key === 'undefined' ? 'undefined' : _typeof(key))) { + jQuery.each(key, function (attributeKey) { + self.addRenderAttribute(element, attributeKey, this, overwrite); + }); + + return self; + } + + if (!self.renderAttributes[element]) { + self.renderAttributes[element] = {}; + } + + if (!self.renderAttributes[element][key]) { + self.renderAttributes[element][key] = []; + } + + if (!Array.isArray(value)) { + value = [value]; + } + + if (overwrite) { + self.renderAttributes[element][key] = value; + } else { + self.renderAttributes[element][key] = self.renderAttributes[element][key].concat(value); + } + }, + + getRenderAttributeString: function getRenderAttributeString(element) { + if (!this.renderAttributes[element]) { + return ''; + } + + var renderAttributes = this.renderAttributes[element], + attributes = []; + + jQuery.each(renderAttributes, function (attributeKey) { + attributes.push(attributeKey + '="' + _.escape(this.join(' ')) + '"'); + }); + + return attributes.join(' '); + }, + + isInner: function isInner() { + return !!this.model.get('isInner'); + }, + + initControlsCSSParser: function initControlsCSSParser() { + this.controlsCSSParser = new ControlsCSSParser({ + id: this.model.cid, + settingsModel: this.getEditModel().get('settings'), + dynamicParsing: this.getDynamicParsingSettings() + }); + }, + + enqueueFonts: function enqueueFonts() { + var editModel = this.getEditModel(), + settings = editModel.get('settings'); + + _.each(settings.getFontControls(), function (control) { + var fontFamilyName = editModel.getSetting(control.name); + + if (_.isEmpty(fontFamilyName)) { + return; + } + + elementor.helpers.enqueueFont(fontFamilyName); + }); + }, + + renderStyles: function renderStyles(settings) { + if (!settings) { + settings = this.getEditModel().get('settings'); + } + + this.controlsCSSParser.stylesheet.empty(); + + this.controlsCSSParser.addStyleRules(settings.getStyleControls(), settings.attributes, this.getEditModel().get('settings').controls, [ + /{{ID}}/g, + /{{WRAPPER}}/g, + /{{HOVER}}/g + ], [ + this.getID(), + '#elementor .' + this.getElementUniqueID(), + this.getTransformHoverSelector(settings) + ]); + + this.controlsCSSParser.addStyleToDocument(); + + var extraCSS = elementor.hooks.applyFilters('editor/style/styleText', '', this); + + if (extraCSS) { + this.controlsCSSParser.elements.$stylesheetElement.append(extraCSS); + } + }, + + renderCustomClasses: function renderCustomClasses() { + var self = this; + + var settings = self.getEditModel().get('settings'), + classControls = settings.getClassControls(); + + // Remove all previous classes + _.each(classControls, function (control) { + var previousClassValue = settings.previous(control.name); + + if (control.classes_dictionary) { + if (undefined !== control.classes_dictionary[previousClassValue]) { + previousClassValue = control.classes_dictionary[previousClassValue]; + } + } + + self.$el.removeClass(control.prefix_class + previousClassValue); + }); + + // Add new classes + _.each(classControls, function (control) { + var value = settings.attributes[control.name], + classValue = value; + + if (control.classes_dictionary) { + if (undefined !== control.classes_dictionary[value]) { + classValue = control.classes_dictionary[value]; + } + } + + var isVisible = elementor.helpers.isActiveControl(control, settings.attributes); + + if (isVisible && (classValue || 0 === classValue)) { + self.$el.addClass(control.prefix_class + classValue); + } + }); + + self.$el.addClass(_.result(self, 'className')); + + self.toggleVisibilityClass(); + }, + + renderCustomElementID: function renderCustomElementID() { + var customElementID = this.getEditModel().get('settings').get('_element_id'); + + this.$el.attr('id', customElementID); + }, + + renderUI: function renderUI() { + this.renderStyles(); + this.renderCustomClasses(); + this.renderCustomElementID(); + this.enqueueFonts(); + }, + + runReadyTrigger: function runReadyTrigger() { + var self = this; + + _.defer(function () { + ceFrontend.elementsHandler.runReadyTrigger(self.el); + + if (!ceFrontend.isEditMode()) { + return; + } + + // In edit mode - handle an external elements that loaded by another elements like shortcode etc. + self.$el.find('.elementor-element.elementor-' + self.model.get('elType') + ':not(.elementor-element-edit-mode)').each(function () { + ceFrontend.elementsHandler.runReadyTrigger(this); + }); + }); + }, + + getID: function getID() { + return this.model.get('id'); + }, + + getElementUniqueID: function getElementUniqueID() { + return 'elementor-element-' + this.getID(); + }, + + getTransformHoverSelector: function getTransformHoverSelector(settings) { + switch (settings.get('_transform_trigger_hover')) { + case 'miniature': + return '[data-elementor-type$=miniature] > :hover .' + this.getElementUniqueID() + ' > .elementor-widget-container'; + case 'section': + return '.elementor-section:hover > .elementor-container > * > * > .elementor-column-wrap > * > .' + this.getElementUniqueID() + ' > .elementor-widget-container'; + case 'column': + return '.elementor-column-wrap:hover > * > .' + this.getElementUniqueID() + ' > .elementor-widget-container'; + } + return '.' + this.getElementUniqueID() + ' > .elementor-widget-container:hover'; + }, + + renderOnChange: function renderOnChange(settings) { + if (!this.allowRender) { + return; + } + + // Make sure is correct model + if (settings instanceof elementorModules.editor.elements.models.BaseSettings) { + var hasChanged = settings.hasChanged(), + isContentChanged = !hasChanged, + isRenderRequired = !hasChanged; + + _.each(settings.changedAttributes(), function (settingValue, settingKey) { + var control = settings.getControl(settingKey); + + if ('_column_size' === settingKey) { + isRenderRequired = true; + return; + } + + if (!control) { + isRenderRequired = true; + isContentChanged = true; + return; + } + + if ('none' !== control.render_type) { + isRenderRequired = true; + } + + if (-1 !== ['none', 'ui'].indexOf(control.render_type)) { + return; + } + + if ('template' === control.render_type || !settings.isStyleControl(settingKey) && !settings.isClassControl(settingKey) && '_element_id' !== settingKey) { + isContentChanged = true; + } + }); + + if (!isRenderRequired) { + return; + } + + if (!isContentChanged) { + this.renderUI(); + return; + } + } + + // Re-render the template + var templateType = this.getTemplateType(), + editModel = this.getEditModel(); + + if ('js' === templateType) { + this.getEditModel().setHtmlCache(); + this.render(); + editModel.renderOnLeave = true; + } else { + editModel.renderRemoteServer(); + } + }, + + getDynamicParsingSettings: function getDynamicParsingSettings() { + var self = this; + + return { + onServerRequestStart: function onServerRequestStart() { + self.$el.addClass('elementor-loading'); + }, + onServerRequestEnd: function onServerRequestEnd() { + // tmp fix: self.render(); doesn't work on all widgets + try { + self.renderOnChange({}); + } catch (ex) {} + + self.$el.removeClass('elementor-loading'); + } + }; + }, + + serializeData: function serializeData() { + var data = BaseContainer.prototype.serializeData.apply(this, arguments); + + data.settings = this.getEditModel().get('settings').parseDynamicSettings(data.settings, this.getDynamicParsingSettings()); + + return data; + }, + + save: function save() { + var model = this.model; + + elementor.templates.startModal({ + onReady: function onReady() { + elementor.templates.getLayout().showSaveTemplateView(model); + } + }); + }, + + removeElement: function removeElement() { + elementor.channels.data.trigger('element:before:remove', this.model); + + var parent = this._parent; + + parent.isManualRemoving = true; + + this.model.destroy(); + + parent.isManualRemoving = false; + + elementor.channels.data.trigger('element:after:remove', this.model); + }, + + onBeforeRender: function onBeforeRender() { + this.renderAttributes = {}; + }, + + onRender: function onRender() { + this.renderUI(); + + this.runReadyTrigger(); + + if (this.toggleEditTools) { + var editButton = this.ui.editButton; + + this.ui.tools.hoverIntent(function () { + editButton.addClass('elementor-active'); + }, function () { + editButton.removeClass('elementor-active'); + }, { timeout: 500 }); + } + }, + + onCollectionChanged: function onCollectionChanged() { + elementor.saver.setFlagEditorChange(true); + }, + + onEditSettingsChanged: function onEditSettingsChanged(changedModel) { + elementor.channels.editor.trigger('change:editSettings', changedModel, this); + }, + + onSettingsChanged: function onSettingsChanged(changedModel) { + elementor.saver.setFlagEditorChange(true); + + this.renderOnChange(changedModel); + }, + + onEditButtonClick: function onEditButtonClick() { + this.model.trigger('request:edit'); + }, + + onTabClick: function onTabClick(e) { + var index = $(e.currentTarget).index(); + + this.model.get('elements').models[index].trigger('request:edit'); + }, + + onEditRequest: function onEditRequest() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + if ('edit' !== elementor.channels.dataEditMode.request('activeMode')) { + return; + } + + var model = this.getEditModel(), + panel = elementor.getPanelView(); + + if ('editor' === panel.getCurrentPageName() && panel.getCurrentPageView().model === model) { + return; + } + + if (options.scrollIntoView) { + elementor.helpers.scrollToView(this.$el, 200); + } + + panel.openEditor(model, this); + }, + + onDuplicateButtonClick: function onDuplicateButtonClick(event) { + event.stopPropagation(); + + this.duplicate(); + }, + + onRemoveButtonClick: function onRemoveButtonClick(event) { + event.stopPropagation(); + + this.removeElement(); + }, + + /* jQuery ui sortable preventing any `mousedown` event above any element, and as a result is preventing the `blur` + * event on the currently active element. Therefor, we need to blur the active element manually. + */ + onMouseDown: function onMouseDown(event) { + if (jQuery(event.target).closest('.elementor-inline-editing').length) { + return; + } + + ceFrontend.elements.window.document.activeElement.blur(); + }, + + onDestroy: function onDestroy() { + this.controlsCSSParser.removeStyleFromDocument(); + + this.getEditModel().get('settings').validators = {}; + + elementor.channels.data.trigger('element:destroy', this.model); + } +}); + +module.exports = BaseElementView; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ContextMenu = __webpack_require__(94); + +module.exports = Marionette.Behavior.extend({ + + defaults: { + groups: [], + eventTargets: ['el'] + }, + + events: function events() { + var events = {}; + + this.getOption('eventTargets').forEach(function (eventTarget) { + var eventName = 'contextmenu'; + + if ('el' !== eventTarget) { + eventName += ' ' + eventTarget; + } + + events[eventName] = 'onContextMenu'; + }); + + return events; + }, + + initialize: function initialize() { + this.listenTo(this.view.options.model, 'request:contextmenu', this.onRequestContextMenu); + }, + + initContextMenu: function initContextMenu() { + var contextMenuGroups = this.getOption('groups'), + deleteGroup = _.findWhere(contextMenuGroups, { name: 'delete' }), + afterGroupIndex = contextMenuGroups.indexOf(deleteGroup); + + if (-1 === afterGroupIndex) { + afterGroupIndex = contextMenuGroups.length; + } + + contextMenuGroups.splice(afterGroupIndex, 0, { + name: 'tools', + actions: [{ + name: 'navigator', + title: elementor.translate('navigator'), + callback: elementor.navigator.open.bind(elementor.navigator, this.view.model) + }] + }); + + this.contextMenu = new ContextMenu({ + groups: contextMenuGroups + }); + + this.contextMenu.getModal().on('hide', this.onContextMenuHide); + }, + + getContextMenu: function getContextMenu() { + if (!this.contextMenu) { + this.initContextMenu(); + } + + return this.contextMenu; + }, + + onContextMenu: function onContextMenu(event) { + if (elementorCommon.hotKeys.isControlEvent(event) || !elementor.userCan('design')) { + return; + } + + if ('edit' !== elementor.channels.dataEditMode.request('activeMode')) { + return; + } + + event.preventDefault(); + + event.stopPropagation(); + + this.getContextMenu().show(event); + + elementor.channels.editor.reply('contextMenu:targetView', this.view); + }, + + onRequestContextMenu: function onRequestContextMenu(event) { + var modal = this.getContextMenu().getModal(), + iframe = modal.getSettings('iframe'), + toolsGroup = _.findWhere(this.contextMenu.getSettings('groups'), { name: 'tools' }); + + toolsGroup.isVisible = false; + + modal.setSettings('iframe', null); + + this.onContextMenu(event); + + toolsGroup.isVisible = true; + + modal.setSettings('iframe', iframe); + }, + + onContextMenuHide: function onContextMenuHide() { + elementor.channels.editor.reply('contextMenu:targetView', null); + }, + + onDestroy: function onDestroy() { + if (this.contextMenu) { + this.contextMenu.destroy(); + } + } +}); + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = elementorModules.Module.extend({ + errors: [], + + __construct: function __construct(settings) { + var customValidationMethod = settings.customValidationMethod; + + if (customValidationMethod) { + this.validationMethod = customValidationMethod; + } + }, + + getDefaultSettings: function getDefaultSettings() { + return { + validationTerms: {} + }; + }, + + isValid: function isValid() { + var validationErrors = this.validationMethod.apply(this, arguments); + + if (validationErrors.length) { + this.errors = validationErrors; + + return false; + } + + return true; + }, + + validationMethod: function validationMethod(newValue) { + var validationTerms = this.getSettings('validationTerms'), + errors = []; + + if (validationTerms.required) { + if (!('' + newValue).length) { + errors.push('Required value is empty'); + } + } + + return errors; + } +}); + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Stylesheet = __webpack_require__(22), + ControlsCSSParser; + +ControlsCSSParser = elementorModules.ViewModule.extend({ + stylesheet: null, + + getDefaultSettings: function getDefaultSettings() { + return { + id: 0, + settingsModel: null, + dynamicParsing: {} + }; + }, + + getDefaultElements: function getDefaultElements() { + return { + $stylesheetElement: jQuery(''); + } + + if (data.font_url) { + elementor.$previewContents.find('link:last').after(''); + } + } + }); + + this._enqueuedFonts.push(font); + + // if ('typekit' === fontType) { + // this._enqueuedTypekit = true; + // } + }, + + onInit: function onInit() { + elementor.channels.editor.on('font:insertion', this.onFontChange.bind(this)); + } +}); + +/***/ }), +/* 17 */, +/* 18 */, +/* 19 */, +/* 20 */, +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = Marionette.Region.extend({ + + storage: null, + + storageSizeKeys: null, + + constructor: function constructor() { + Marionette.Region.prototype.constructor.apply(this, arguments); + + var savedStorage = elementorCommon.storage.get(this.getStorageKey()); + + this.storage = savedStorage ? savedStorage : this.getDefaultStorage(); + + this.storageSizeKeys = Object.keys(this.storage.size); + }, + + saveStorage: function saveStorage(key, value) { + this.storage[key] = value; + + elementorCommon.storage.set(this.getStorageKey(), this.storage); + }, + + saveSize: function saveSize() { + this.saveStorage('size', elementor.helpers.getElementInlineStyle(this.$el, this.storageSizeKeys)); + } +}); + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +(function ($) { + var Stylesheet = function Stylesheet() { + var self = this, + rules = {}, + rawCSS = {}, + devices = {}; + + var getDeviceMaxValue = function getDeviceMaxValue(deviceName) { + var deviceNames = Object.keys(devices), + deviceNameIndex = deviceNames.indexOf(deviceName), + nextIndex = deviceNameIndex + 1; + + if (nextIndex >= deviceNames.length) { + throw new RangeError('Max value for this device is out of range.'); + } + + return devices[deviceNames[nextIndex]] - 1; + }; + + var queryToHash = function queryToHash(query) { + var hash = []; + + $.each(query, function (endPoint) { + hash.push(endPoint + '_' + this); + }); + + return hash.join('-'); + }; + + var hashToQuery = function hashToQuery(hash) { + var query = {}; + + hash = hash.split('-').filter(String); + + hash.forEach(function (singleQuery) { + var queryParts = singleQuery.split('_'), + endPoint = queryParts[0], + deviceName = queryParts[1]; + + query[endPoint] = 'max' === endPoint ? getDeviceMaxValue(deviceName) : devices[deviceName]; + }); + + return query; + }; + + var addQueryHash = function addQueryHash(queryHash) { + rules[queryHash] = {}; + + var hashes = Object.keys(rules); + + if (hashes.length < 2) { + return; + } + + // Sort the devices from narrowest to widest + hashes.sort(function (a, b) { + if ('all' === a) { + return -1; + } + + if ('all' === b) { + return 1; + } + + var aQuery = hashToQuery(a), + bQuery = hashToQuery(b); + + return bQuery.max - aQuery.max; + }); + + var sortedRules = {}; + + hashes.forEach(function (deviceName) { + sortedRules[deviceName] = rules[deviceName]; + }); + + rules = sortedRules; + }; + + var getQueryHashStyleFormat = function getQueryHashStyleFormat(queryHash) { + var query = hashToQuery(queryHash), + styleFormat = []; + + $.each(query, function (endPoint) { + styleFormat.push('(' + endPoint + '-width:' + this + 'px)'); + }); + + return '@media' + styleFormat.join(' and '); + }; + + this.addDevice = function (newDeviceName, deviceValue) { + devices[newDeviceName] = deviceValue; + + var deviceNames = Object.keys(devices); + + if (deviceNames.length < 2) { + return self; + } + + // Sort the devices from narrowest to widest + deviceNames.sort(function (a, b) { + return devices[a] - devices[b]; + }); + + var sortedDevices = {}; + + deviceNames.forEach(function (deviceName) { + sortedDevices[deviceName] = devices[deviceName]; + }); + + devices = sortedDevices; + + return self; + }; + + this.addRawCSS = function (key, css) { + rawCSS[key] = css; + }; + + this.addRules = function (selector, styleRules, query) { + var queryHash = 'all'; + + if (!_.isEmpty(query)) { + queryHash = queryToHash(query); + } + + if (!rules[queryHash]) { + addQueryHash(queryHash); + } + + if (!styleRules) { + var parsedRules = selector.match(/[^{]+\{[^}]+}/g); + + $.each(parsedRules, function () { + var parsedRule = this.match(/([^{]+)\{([^}]+)}/); + + if (parsedRule) { + self.addRules(parsedRule[1].trim(), parsedRule[2].trim(), query); + } + }); + + return; + } + + if (!rules[queryHash][selector]) { + rules[queryHash][selector] = {}; + } + + if ('string' === typeof styleRules) { + styleRules = styleRules.split(';').filter(String); + + var orderedRules = {}; + + try { + $.each(styleRules, function () { + var property = this.split(/:(.*)?/); + + orderedRules[property[0].trim()] = property[1].trim().replace(';', ''); + }); + } catch (error) { + // At least one of the properties is incorrect + return; + } + + styleRules = orderedRules; + } + + $.extend(rules[queryHash][selector], styleRules); + + return self; + }; + + this.getRules = function () { + return rules; + }; + + this.empty = function () { + rules = {}; + rawCSS = {}; + }; + + this.toString = function () { + var styleText = ''; + + $.each(rules, function (queryHash) { + var deviceText = Stylesheet.parseRules(this); + + if ('all' !== queryHash) { + deviceText = getQueryHashStyleFormat(queryHash) + '{' + deviceText + '}'; + } + + styleText += deviceText; + }); + + $.each(rawCSS, function () { + styleText += this; + }); + + return styleText; + }; + }; + + Stylesheet.parseRules = function (rules) { + var parsedRules = ''; + + $.each(rules, function (selector) { + var selectorContent = Stylesheet.parseProperties(this); + + if (selectorContent) { + parsedRules += selector + '{' + selectorContent + '}'; + } + }); + + return parsedRules; + }; + + Stylesheet.parseProperties = function (properties) { + var parsedProperties = ''; + + $.each(properties, function (propertyKey) { + if (this) { + parsedProperties += propertyKey + ':' + this + ';'; + } + }); + + return parsedProperties; + }; + + module.exports = Stylesheet; +})(jQuery); + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var InsertTemplateHandler; + +InsertTemplateHandler = Marionette.Behavior.extend({ + ui: { + insertButton: '.elementor-template-library-template-insert' + }, + + events: { + 'click @ui.insertButton': 'onInsertButtonClick' + }, + + onInsertButtonClick: function onInsertButtonClick() { + var autoImportSettings = elementor.config.document.remoteLibrary.autoImportSettings; + + if (!autoImportSettings && this.view.model.get('hasPageSettings')) { + InsertTemplateHandler.showImportDialog(this.view.model); + + return; + } + + elementor.templates.importTemplate(this.view.model, { withPageSettings: autoImportSettings }); + } +}, { + dialog: null, + + showImportDialog: function showImportDialog(model) { + var dialog = InsertTemplateHandler.getDialog(); + + dialog.onConfirm = function () { + elementor.templates.importTemplate(model, { withPageSettings: true }); + }; + + dialog.onCancel = function () { + elementor.templates.importTemplate(model); + }; + + dialog.show(); + }, + + initDialog: function initDialog() { + InsertTemplateHandler.dialog = elementorCommon.dialogsManager.createWidget('confirm', { + id: 'elementor-insert-template-settings-dialog', + headerMessage: elementor.translate('import_template_dialog_header'), + message: elementor.translate('import_template_dialog_message') + '
    ' + elementor.translate('import_template_dialog_message_attention'), + strings: { + confirm: elementor.translate('yes'), + cancel: elementor.translate('no') + } + }); + }, + + getDialog: function getDialog() { + if (!InsertTemplateHandler.dialog) { + InsertTemplateHandler.initDialog(); + } + + return InsertTemplateHandler.dialog; + } +}); + +module.exports = InsertTemplateHandler; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var TemplateLibraryInsertTemplateBehavior = __webpack_require__(23), + TemplateLibraryTemplateView; + +TemplateLibraryTemplateView = Marionette.ItemView.extend({ + className: function className() { + var classes = 'elementor-template-library-template', + source = this.model.get('source'); + + classes += ' elementor-template-library-template-' + source; + + if ('remote' === source) { + classes += ' elementor-template-library-template-' + this.model.get('type'); + } + + if (this.model.get('isPro')) { + classes += ' elementor-template-library-pro-template'; + } + + return classes; + }, + + ui: function ui() { + return { + previewButton: '.elementor-template-library-template-preview' + }; + }, + + events: function events() { + return { + 'click @ui.previewButton': 'onPreviewButtonClick' + }; + }, + + behaviors: { + insertTemplate: { + behaviorClass: TemplateLibraryInsertTemplateBehavior + } + } +}); + +module.exports = TemplateLibraryTemplateView; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _itemView = __webpack_require__(88); + +var _itemView2 = _interopRequireDefault(_itemView); + +var _empty = __webpack_require__(89); + +var _empty2 = _interopRequireDefault(_empty); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = Marionette.CompositeView.extend({ + id: 'elementor-panel-history', + + template: '#tmpl-elementor-panel-history-tab', + + childView: _itemView2.default, + + childViewContainer: '#elementor-history-list', + + emptyView: _empty2.default, + + currentItem: null, + + updateCurrentItem: function updateCurrentItem() { + var _this = this; + + if (this.children.length <= 1) { + return; + } + + _.defer(function () { + // Set current item - the first not applied item + var currentItem = _this.collection.find(function (model) { + return 'not_applied' === model.get('status'); + }), + currentView = _this.children.findByModel(currentItem); + + if (!currentView) { + return; + } + + var currentItemClass = 'elementor-history-item-current'; + + if (_this.currentItem) { + _this.currentItem.removeClass(currentItemClass); + } + + _this.currentItem = currentView.$el; + + _this.currentItem.addClass(currentItemClass); + }); + }, + + onRender: function onRender() { + this.updateCurrentItem(); + }, + + onRenderEmpty: function onRenderEmpty() { + this.$el.addClass('elementor-empty'); + }, + + onChildviewClick: function onChildviewClick(childView, event) { + if (childView.$el === this.currentItem) { + return; + } + + var collection = event.model.collection, + itemIndex = collection.findIndex(event.model); + + elementor.history.history.doItem(itemIndex); + } +}); + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = Marionette.CompositeView.extend({ + + templateHelpers: function templateHelpers() { + return { + view: this + }; + }, + + getBehavior: function getBehavior(name) { + return this._behaviors[Object.keys(this.behaviors()).indexOf(name)]; + }, + + initialize: function initialize() { + this.collection = this.model.get('elements'); + }, + + addChildModel: function addChildModel(model, options) { + return this.collection.add(model, options, true); + }, + + addChildElement: function addChildElement(data, options) { + if (this.isCollectionFilled()) { + return; + } + + options = jQuery.extend({ + trigger: false, + edit: true, + onBeforeAdd: null, + onAfterAdd: null + }, options); + + var childTypes = this.getChildType(), + newItem, + elType; + + if (data instanceof Backbone.Model) { + newItem = data; + + elType = newItem.get('elType'); + } else { + newItem = { + id: elementor.helpers.getUniqueID(), + elType: childTypes[0], + settings: {}, + elements: [] + }; + + if (data) { + jQuery.extend(newItem, data); + } + + elType = newItem.elType; + } + + if (-1 === childTypes.indexOf(elType)) { + return this.children.last().addChildElement(newItem, options); + } + + if (options.clone) { + newItem = this.cloneItem(newItem); + } + + if (options.trigger) { + elementor.channels.data.trigger(options.trigger.beforeAdd, newItem); + } + + if (options.onBeforeAdd) { + options.onBeforeAdd(); + } + + var newModel = this.addChildModel(newItem, { at: options.at }), + newView = this.children.findByModel(newModel); + + if (options.onAfterAdd) { + options.onAfterAdd(newModel, newView); + } + + if (options.trigger) { + elementor.channels.data.trigger(options.trigger.afterAdd, newItem); + } + + if (options.edit) { + newModel.trigger('request:edit'); + } + + return newView; + }, + + cloneItem: function cloneItem(item) { + var self = this; + + if (item instanceof Backbone.Model) { + return item.clone(); + } + + item.id = elementor.helpers.getUniqueID(); + + item.settings._element_id = ''; + + item.elements.forEach(function (childItem, index) { + item.elements[index] = self.cloneItem(childItem); + }); + + return item; + }, + + isCollectionFilled: function isCollectionFilled() { + return false; + }, + + onChildviewRequestAddNew: function onChildviewRequestAddNew(childView) { + this.addChildElement({}, { + at: childView.$el.index() + 1, + trigger: { + beforeAdd: 'element:before:add', + afterAdd: 'element:after:add' + } + }); + }, + + onChildviewRequestPaste: function onChildviewRequestPaste(childView) { + var self = this; + + if (self.isCollectionFilled()) { + return; + } + + var elements = elementorCommon.storage.get('transfer').elements, + index = self.collection.indexOf(childView.model); + + elementor.channels.data.trigger('element:before:add', elements[0]); + + elements.forEach(function (item) { + index++; + + self.addChildElement(item, { at: index, clone: true }); + }); + + elementor.channels.data.trigger('element:after:add', elements[0]); + } +}); + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _inline = __webpack_require__(95); + +var _inline2 = _interopRequireDefault(_inline); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var BaseElementView = __webpack_require__(7), + SectionView; + +SectionView = BaseElementView.extend({ + template: Marionette.TemplateCache.get('#tmpl-elementor-section-content'), + + addSectionView: null, + + className: function className() { + var classes = BaseElementView.prototype.className.apply(this, arguments), + type = this.isInner() ? 'inner' : 'top'; + + return classes + ' elementor-section elementor-' + type + '-section'; + }, + + tagName: function tagName() { + return this.model.getSetting('html_tag') || 'section'; + }, + + childViewContainer: '> .elementor-container > .elementor-row', + + behaviors: function behaviors() { + var behaviors = BaseElementView.prototype.behaviors.apply(this, arguments); + + _.extend(behaviors, { + Sortable: { + behaviorClass: __webpack_require__(11), + elChildType: 'column' + } + }); + + return elementor.hooks.applyFilters('elements/section/behaviors', behaviors, this); + }, + + errors: { + columnWidthTooLarge: 'New column width is too large', + columnWidthTooSmall: 'New column width is too small' + }, + + initialize: function initialize() { + BaseElementView.prototype.initialize.apply(this, arguments); + + this.listenTo(this.collection, 'add remove reset', this._checkIsFull); + + this._checkIsEmpty(); + }, + + getContextMenuGroups: function getContextMenuGroups() { + var groups = BaseElementView.prototype.getContextMenuGroups.apply(this, arguments), + transferGroupIndex = groups.indexOf(_.findWhere(groups, { name: 'transfer' })); + + groups.splice(transferGroupIndex + 1, 0, { + name: 'save', + actions: [{ + name: 'save', + title: elementor.translate('save_as_block'), + callback: this.save.bind(this) + }] + }); + + return groups; + }, + + addChildModel: function addChildModel(model) { + var isModelInstance = model instanceof Backbone.Model, + isInner = this.isInner(); + + if (isModelInstance) { + model.set('isInner', isInner); + } else { + model.isInner = isInner; + } + + return BaseElementView.prototype.addChildModel.apply(this, arguments); + }, + + getSortableOptions: function getSortableOptions() { + var sectionConnectClass = this.isInner() ? '.elementor-inner-section' : '.elementor-top-section'; + + return { + connectWith: sectionConnectClass + ' > .elementor-container > .elementor-row', + handle: '> .elementor-element-overlay .elementor-editor-element-edit', + items: '> .elementor-column', + forcePlaceholderSize: true, + tolerance: 'pointer' + }; + }, + + getColumnPercentSize: function getColumnPercentSize(element, size) { + return +(size / element.parent().width() * 100).toFixed(3); + }, + + getDefaultStructure: function getDefaultStructure() { + return this.collection.length + '0'; + }, + + getStructure: function getStructure() { + return this.model.getSetting('structure'); + }, + + setStructure: function setStructure(structure) { + var parsedStructure = elementor.presetsFactory.getParsedStructure(structure); + + if (+parsedStructure.columnsCount !== this.collection.length) { + throw new TypeError('The provided structure doesn\'t match the columns count.'); + } + + this.model.setSetting('structure', structure); + }, + + redefineLayout: function redefineLayout() { + var preset = elementor.presetsFactory.getPresetByStructure(this.getStructure()); + + this.collection.each(function (model, index) { + model.setSetting('_column_size', preset.preset[index]); + model.setSetting('_inline_size', null); + }); + }, + + resetLayout: function resetLayout() { + this.setStructure(this.getDefaultStructure()); + }, + + resetColumnsCustomSize: function resetColumnsCustomSize() { + this.collection.each(function (model) { + model.setSetting('_inline_size', null); + }); + }, + + isCollectionFilled: function isCollectionFilled() { + var MAX_SIZE = 10, + columnsCount = this.collection.length; + + return MAX_SIZE <= columnsCount; + }, + + _checkIsFull: function _checkIsFull() { + this.$el.toggleClass('elementor-section-filled', this.isCollectionFilled()); + }, + + _checkIsEmpty: function _checkIsEmpty() { + if (!this.collection.length && !this.model.get('allowEmpty')) { + this.addChildElement(null, { edit: false }); + } + }, + + getColumnAt: function getColumnAt(index) { + var model = this.collection.at(index); + + return model ? this.children.findByModelCid(model.cid) : null; + }, + + getNextColumn: function getNextColumn(columnView) { + return this.getColumnAt(this.collection.indexOf(columnView.model) + 1); + }, + + getPreviousColumn: function getPreviousColumn(columnView) { + return this.getColumnAt(this.collection.indexOf(columnView.model) - 1); + }, + + showChildrenPercentsTooltip: function showChildrenPercentsTooltip(columnView, nextColumnView) { + columnView.ui.percentsTooltip.show(); + + columnView.ui.percentsTooltip.attr('data-side', elementorCommon.config.isRTL ? 'right' : 'left'); + + nextColumnView.ui.percentsTooltip.show(); + + nextColumnView.ui.percentsTooltip.attr('data-side', elementorCommon.config.isRTL ? 'left' : 'right'); + }, + + hideChildrenPercentsTooltip: function hideChildrenPercentsTooltip(columnView, nextColumnView) { + columnView.ui.percentsTooltip.hide(); + + nextColumnView.ui.percentsTooltip.hide(); + }, + + resizeChild: function resizeChild(childView, currentSize, newSize) { + var nextChildView = this.getNextColumn(childView) || this.getPreviousColumn(childView); + + if (!nextChildView) { + throw new ReferenceError('There is not any next column'); + } + + var minColumnSize = 2, + $nextElement = nextChildView.$el, + nextElementCurrentSize = +nextChildView.model.getSetting('_inline_size') || this.getColumnPercentSize($nextElement, $nextElement[0].getBoundingClientRect().width), + nextElementNewSize = +(currentSize + nextElementCurrentSize - newSize).toFixed(3); + + if (nextElementNewSize < minColumnSize) { + throw new RangeError(this.errors.columnWidthTooLarge); + } + + if (newSize < minColumnSize) { + throw new RangeError(this.errors.columnWidthTooSmall); + } + + nextChildView.model.setSetting('_inline_size', nextElementNewSize); + + return true; + }, + + destroyAddSectionView: function destroyAddSectionView() { + if (this.addSectionView && !this.addSectionView.isDestroyed) { + this.addSectionView.destroy(); + } + }, + + onRender: function onRender() { + BaseElementView.prototype.onRender.apply(this, arguments); + + this._checkIsFull(); + }, + + onSettingsChanged: function onSettingsChanged(settingsModel) { + BaseElementView.prototype.onSettingsChanged.apply(this, arguments); + + if (settingsModel.changed.structure) { + this.redefineLayout(); + } + }, + + onAddButtonClick: function onAddButtonClick() { + if (this.addSectionView && !this.addSectionView.isDestroyed) { + this.addSectionView.fadeToDeath(); + + return; + } + + var myIndex = this.model.collection.indexOf(this.model), + addSectionView = new _inline2.default({ + at: myIndex + }); + + addSectionView.render(); + + this.$el.before(addSectionView.$el); + + addSectionView.$el.hide(); + + // Delaying the slide down for slow-render browsers (such as FF) + setTimeout(function () { + addSectionView.$el.slideDown(); + }); + + this.addSectionView = addSectionView; + }, + + onAddChild: function onAddChild() { + if (!this.isBuffering && !this.model.get('allowEmpty')) { + // Reset the layout just when we have really add/remove element. + this.resetLayout(); + } + }, + + onRemoveChild: function onRemoveChild() { + if (!this.isManualRemoving) { + return; + } + + // If it's the last column, please create new one. + this._checkIsEmpty(); + + this.resetLayout(); + }, + + onChildviewRequestResizeStart: function onChildviewRequestResizeStart(columnView) { + var nextColumnView = this.getNextColumn(columnView); + + if (!nextColumnView) { + return; + } + + this.showChildrenPercentsTooltip(columnView, nextColumnView); + + var $iframes = columnView.$el.find('iframe').add(nextColumnView.$el.find('iframe')); + + elementor.helpers.disableElementEvents($iframes); + }, + + onChildviewRequestResizeStop: function onChildviewRequestResizeStop(columnView) { + var nextColumnView = this.getNextColumn(columnView); + + if (!nextColumnView) { + return; + } + + this.hideChildrenPercentsTooltip(columnView, nextColumnView); + + var $iframes = columnView.$el.find('iframe').add(nextColumnView.$el.find('iframe')); + + elementor.helpers.enableElementEvents($iframes); + }, + + onChildviewRequestResize: function onChildviewRequestResize(columnView, ui) { + // Get current column details + var currentSize = +columnView.model.getSetting('_inline_size') || this.getColumnPercentSize(columnView.$el, columnView.$el.data('originalWidth')); + + ui.element.css({ + width: '', + left: 'initial' // Fix for RTL resizing + }); + + var newSize = this.getColumnPercentSize(ui.element, ui.size.width); + + try { + this.resizeChild(columnView, currentSize, newSize); + } catch (e) { + return; + } + + columnView.model.setSetting('_inline_size', newSize); + }, + + onDestroy: function onDestroy() { + BaseElementView.prototype.onDestroy.apply(this, arguments); + + this.destroyAddSectionView(); + } +}); + +module.exports = SectionView; + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var AddSectionBase = function (_Marionette$ItemView) { + _inherits(AddSectionBase, _Marionette$ItemView); + + function AddSectionBase() { + _classCallCheck(this, AddSectionBase); + + return _possibleConstructorReturn(this, (AddSectionBase.__proto__ || Object.getPrototypeOf(AddSectionBase)).apply(this, arguments)); + } + + _createClass(AddSectionBase, [{ + key: 'template', + value: function template() { + return Marionette.TemplateCache.get('#tmpl-elementor-add-section'); + } + }, { + key: 'attributes', + value: function attributes() { + return { + 'data-view': 'choose-action' + }; + } + }, { + key: 'ui', + value: function ui() { + return { + addNewSection: '.elementor-add-new-section', + closeButton: '.elementor-add-section-close', + addSectionButton: '.elementor-add-section-button', + addTemplateButton: '.elementor-add-template-button', + selectPreset: '.elementor-select-preset', + presets: '.elementor-preset' + }; + } + }, { + key: 'events', + value: function events() { + return { + 'click @ui.addSectionButton': 'onAddSectionButtonClick', + 'click @ui.addTemplateButton': 'onAddTemplateButtonClick', + 'click @ui.closeButton': 'onCloseButtonClick', + 'click @ui.presets': 'onPresetSelected' + }; + } + }, { + key: 'behaviors', + value: function behaviors() { + return { + contextMenu: { + behaviorClass: __webpack_require__(8), + groups: this.getContextMenuGroups() + } + }; + } + }, { + key: 'className', + value: function className() { + return 'elementor-add-section elementor-visible-desktop'; + } + }, { + key: 'addSection', + value: function addSection(properties, options) { + return elementor.getPreviewView().addChildElement(properties, jQuery.extend({}, this.options, options)); + } + }, { + key: 'setView', + value: function setView(view) { + this.$el.attr('data-view', view); + } + }, { + key: 'showSelectPresets', + value: function showSelectPresets() { + this.setView('select-preset'); + } + }, { + key: 'closeSelectPresets', + value: function closeSelectPresets() { + this.setView('choose-action'); + } + }, { + key: 'getTemplatesModalOptions', + value: function getTemplatesModalOptions() { + return { + importOptions: { + at: this.getOption('at') + } + }; + } + }, { + key: 'getContextMenuGroups', + value: function getContextMenuGroups() { + var hasContent = function hasContent() { + return elementor.elements.length > 0; + }; + + return [{ + name: 'paste', + actions: [{ + name: 'paste', + title: elementor.translate('paste'), + callback: this.paste.bind(this), + isEnabled: this.isPasteEnabled.bind(this) + }] + }, { + name: 'content', + actions: [{ + name: 'copy_all_content', + title: elementor.translate('copy_all_content'), + callback: this.copy.bind(this), + isEnabled: hasContent + }, { + name: 'delete_all_content', + title: elementor.translate('delete_all_content'), + callback: elementor.clearPage.bind(elementor), + isEnabled: hasContent + }] + }]; + } + }, { + key: 'copy', + value: function copy() { + elementor.getPreviewView().copy(); + } + }, { + key: 'paste', + value: function paste() { + elementor.getPreviewView().paste(this.getOption('at')); + } + }, { + key: 'isPasteEnabled', + value: function isPasteEnabled() { + return elementorCommon.storage.get('transfer'); + } + }, { + key: 'onAddSectionButtonClick', + value: function onAddSectionButtonClick() { + this.showSelectPresets(); + } + }, { + key: 'onAddTemplateButtonClick', + value: function onAddTemplateButtonClick() { + elementor.templates.startModal(this.getTemplatesModalOptions()); + } + }, { + key: 'onRender', + value: function onRender() { + this.$el.html5Droppable({ + axis: ['vertical'], + groups: ['elementor-element'], + placeholder: false, + currentElementClass: 'elementor-html5dnd-current-element', + hasDraggingOnChildClass: 'elementor-dragging-on-child', + onDropping: this.onDropping.bind(this) + }); + } + }, { + key: 'onPresetSelected', + value: function onPresetSelected(event) { + this.closeSelectPresets(); + + var selectedStructure = event.currentTarget.dataset.structure, + parsedStructure = elementor.presetsFactory.getParsedStructure(selectedStructure), + elements = []; + + var loopIndex = void 0; + + for (loopIndex = 0; loopIndex < parsedStructure.columnsCount; loopIndex++) { + elements.push({ + id: elementor.helpers.getUniqueID(), + elType: 'column', + settings: {}, + elements: [] + }); + } + + elementor.channels.data.trigger('element:before:add', { + elType: 'section' + }); + + var newSection = this.addSection({ elements: elements }, { edit: false }); + + newSection.setStructure(selectedStructure); + + newSection.getEditModel().trigger('request:edit'); + + elementor.channels.data.trigger('element:after:add'); + } + }, { + key: 'onDropping', + value: function onDropping() { + elementor.channels.data.trigger('section:before:drop'); + + this.addSection().addElementFromPanel(); + + elementor.channels.data.trigger('section:after:drop'); + } + }]); + + return AddSectionBase; +}(Marionette.ItemView); + +exports.default = AddSectionBase; + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ControlMultipleBaseItemView = __webpack_require__(2), + ControlBoxShadowItemView; + +ControlBoxShadowItemView = ControlMultipleBaseItemView.extend({ + ui: function ui() { + var ui = ControlMultipleBaseItemView.prototype.ui.apply(this, arguments); + + ui.sliders = '.elementor-slider'; + ui.colors = '.elementor-shadow-color-picker'; + + return ui; + }, + + initSliders: function initSliders() { + var _this = this; + + var value = this.getControlValue(); + + this.ui.sliders.each(function (index, slider) { + var $input = jQuery(slider).next('.elementor-slider-input').find('input'); + + var sliderInstance = noUiSlider.create(slider, { + start: [value[slider.dataset.input]], + step: 1, + range: { + min: +$input.attr('min'), + max: +$input.attr('max') + }, + format: { + to: function to(sliderValue) { + return +sliderValue.toFixed(1); + }, + from: function from(sliderValue) { + return +sliderValue; + } + } + }); + + sliderInstance.on('slide', function (values) { + var type = sliderInstance.target.dataset.input; + + $input.val(values[0]); + + _this.setValue(type, values[0]); + }); + }); + }, + + initColors: function initColors() { + var self = this; + + elementor.helpers.wpColorPicker(this.ui.colors, { + change: function change() { + var $this = jQuery(this), + type = $this.data('setting'); + + self.setValue(type, $this.wpColorPicker('color')); + }, + + clear: function clear() { + self.setValue(this.dataset.setting, ''); + } + }); + }, + + onInputChange: function onInputChange(event) { + var type = event.currentTarget.dataset.setting, + $slider = this.ui.sliders.filter('[data-input="' + type + '"]'); + + $slider[0].noUiSlider.set(this.getControlValue(type)); + }, + + onReady: function onReady() { + this.initSliders(); + this.initColors(); + }, + + onBeforeDestroy: function onBeforeDestroy() { + this.ui.colors.each(function () { + var $color = jQuery(this); + + if ($color.wpColorPicker('instance')) { + $color.wpColorPicker('close'); + } + }); + + this.$el.remove(); + } +}); + +module.exports = ControlBoxShadowItemView; + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ControlBaseDataView = __webpack_require__(0), + ControlChooseItemView; + +ControlChooseItemView = ControlBaseDataView.extend({ + ui: function ui() { + var ui = ControlBaseDataView.prototype.ui.apply(this, arguments); + + ui.inputs = '[type="radio"]'; + + return ui; + }, + + events: function events() { + return _.extend(ControlBaseDataView.prototype.events.apply(this, arguments), { + 'mousedown label': 'onMouseDownLabel', + 'click @ui.inputs': 'onClickInput', + 'change @ui.inputs': 'onBaseInputChange' + }); + }, + + applySavedValue: function applySavedValue() { + var currentValue = this.getControlValue(); + + if (currentValue) { + this.ui.inputs.filter('[value="' + currentValue + '"]').prop('checked', true); + } + }, + + onMouseDownLabel: function onMouseDownLabel(event) { + var $clickedLabel = this.$(event.currentTarget), + $selectedInput = this.$('#' + $clickedLabel.attr('for')); + + $selectedInput.data('checked', $selectedInput.prop('checked')); + }, + + onClickInput: function onClickInput(event) { + if (!this.model.get('toggle')) { + return; + } + + var $selectedInput = this.$(event.currentTarget); + + if ($selectedInput.data('checked')) { + $selectedInput.prop('checked', false).trigger('change'); + } + } +}, { + + onPasteStyle: function onPasteStyle(control, clipboardValue) { + return '' === clipboardValue || undefined !== control.options[clipboardValue]; + } +}); + +module.exports = ControlChooseItemView; + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ControlBaseMultipleItemView = __webpack_require__(2), + ControlBaseUnitsItemView; + +ControlBaseUnitsItemView = ControlBaseMultipleItemView.extend({ + + getCurrentRange: function getCurrentRange() { + return this.getUnitRange(this.getControlValue('unit')); + }, + + getUnitRange: function getUnitRange(unit) { + var ranges = this.model.get('range'); + + if (!ranges || !ranges[unit]) { + return false; + } + + return ranges[unit]; + } +}); + +module.exports = ControlBaseUnitsItemView; + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ControlBaseDataView = __webpack_require__(0), + RepeaterRowView; + +RepeaterRowView = Marionette.CompositeView.extend({ + template: Marionette.TemplateCache.get('#tmpl-elementor-repeater-row'), + + className: 'elementor-repeater-fields', + + ui: { + duplicateButton: '.elementor-repeater-tool-duplicate', + editButton: '.elementor-repeater-tool-edit', + removeButton: '.elementor-repeater-tool-remove', + itemTitle: '.elementor-repeater-row-item-title' + }, + + behaviors: { + HandleInnerTabs: { + behaviorClass: __webpack_require__(12) + } + }, + + triggers: { + 'click @ui.removeButton': 'click:remove', + 'click @ui.duplicateButton': 'click:duplicate', + 'click @ui.itemTitle': 'click:edit' + }, + + modelEvents: { + change: 'onModelChange' + }, + + templateHelpers: function templateHelpers() { + return { + itemIndex: this.getOption('itemIndex'), + itemActions: this.getOption('itemActions') + }; + }, + + childViewContainer: '.elementor-repeater-row-controls', + + getChildView: function getChildView(item) { + var controlType = item.get('type'); + + return elementor.getControlView(controlType); + }, + + childViewOptions: function childViewOptions() { + return { + elementSettingsModel: this.model + }; + }, + + updateIndex: function updateIndex(newIndex) { + this.itemIndex = newIndex; + }, + + setTitle: function setTitle() { + var titleField = this.getOption('titleField'), + title = ''; + + if (titleField) { + var values = {}; + + this.children.each(function (child) { + if (!(child instanceof ControlBaseDataView)) { + return; + } + + values[child.model.get('name')] = child.getControlValue(); + }); + + title = Marionette.TemplateCache.prototype.compileTemplate(titleField)(this.model.parseDynamicSettings()); + } + + if (!title) { + title = elementor.translate('Item #%s', [this.getOption('itemIndex')]); + } + + this.ui.itemTitle.html(title); + }, + + initialize: function initialize(options) { + this.itemIndex = 0; + + // Collection for Controls list + this.collection = new Backbone.Collection(_.values(elementor.mergeControlsSettings(options.controlFields))); + }, + + onRender: function onRender() { + this.setTitle(); + }, + + onModelChange: function onModelChange() { + if (this.getOption('titleField')) { + this.setTitle(); + } + }, + + onChildviewResponsiveSwitcherClick: function onChildviewResponsiveSwitcherClick(childView, device) { + if ('desktop' === device) { + elementor.getPanelView().getCurrentPageView().$el.toggleClass('elementor-responsive-switchers-open'); + } + } +}); + +module.exports = RepeaterRowView; + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var ColumnSettingsModel = __webpack_require__(127), + ElementModel; + +ElementModel = Backbone.Model.extend({ + defaults: { + id: '', + elType: '', + isInner: false, + settings: {}, + defaultEditSettings: {} + }, + + remoteRender: false, + _htmlCache: null, + _jqueryXhr: null, + renderOnLeave: false, + + initialize: function initialize(options) { + var elType = this.get('elType'), + elements = this.get('elements'); + + if (undefined !== elements) { + var ElementsCollection = __webpack_require__(34); + + this.set('elements', new ElementsCollection(elements)); + } + + if ('widget' === elType) { + this.remoteRender = true; + this.setHtmlCache(options.htmlCache || ''); + } + + // No need this variable anymore + delete options.htmlCache; + + // Make call to remote server as throttle function + this.renderRemoteServer = _.throttle(this.renderRemoteServer, 1000); + + this.initSettings(); + + this.initEditSettings(); + + this.on({ + destroy: this.onDestroy, + 'editor:close': this.onCloseEditor + }); + }, + + initSettings: function initSettings() { + var elType = this.get('elType'), + settings = this.get('settings'), + settingModels = { + column: ColumnSettingsModel + }, + SettingsModel = settingModels[elType] || elementorModules.editor.elements.models.BaseSettings; + + if (jQuery.isEmptyObject(settings)) { + settings = elementorCommon.helpers.cloneObject(settings); + } + + if ('widget' === elType) { + settings.widgetType = this.get('widgetType'); + } + + settings.elType = elType; + settings.isInner = this.get('isInner'); + + settings = new SettingsModel(settings, { + controls: elementor.getElementControls(this) + }); + + this.set('settings', settings); + + ceFrontend.config.elements.data[this.cid] = settings; + }, + + initEditSettings: function initEditSettings() { + var editSettings = new Backbone.Model(this.get('defaultEditSettings')); + + this.set('editSettings', editSettings); + + ceFrontend.config.elements.editSettings[this.cid] = editSettings; + }, + + setSetting: function setSetting(key, value) { + var settings = this.get('settings'); + + if ('object' !== (typeof key === 'undefined' ? 'undefined' : _typeof(key))) { + var keyParts = key.split('.'), + isRepeaterKey = 3 === keyParts.length; + + key = keyParts[0]; + + if (isRepeaterKey) { + settings = settings.get(key).models[keyParts[1]]; + + key = keyParts[2]; + } + } + + settings.setExternalChange(key, value); + }, + + getSetting: function getSetting(key) { + var keyParts = key.split('.'), + isRepeaterKey = 3 === keyParts.length, + settings = this.get('settings'); + + key = keyParts[0]; + + var value = settings.get(key); + + if (undefined === value) { + return ''; + } + + if (isRepeaterKey) { + value = value.models[keyParts[1]].get(keyParts[2]); + } + + return value; + }, + + setHtmlCache: function setHtmlCache(htmlCache) { + this._htmlCache = htmlCache; + }, + + getHtmlCache: function getHtmlCache() { + return this._htmlCache; + }, + + getDefaultTitle: function getDefaultTitle() { + return elementor.getElementData(this).title; + }, + + getTitle: function getTitle() { + var title = this.getSetting('_title'); + + if (!title) { + title = this.getDefaultTitle(); + } + + return title; + }, + + getIcon: function getIcon() { + return elementor.getElementData(this).icon; + }, + + createRemoteRenderRequest: function createRemoteRenderRequest() { + var actions = {}, + data = this.toJSON(); + + actions['render_' + data.id] = { + action: 'render_' + data.id, + data: data + }; + return Backbone.$.post(elementor.config.document.urls.preview, { + render: 'widget', + editor_post_id: elementor.config.document.id, + actions: JSON.stringify(actions), + }, null, 'json').always(function (arg, status) { + var data = 'success' === status ? arg : arg.responseJSON; + data && this.onRemoteGetHtml(data); + }.bind(this)); + }, + + renderRemoteServer: function renderRemoteServer() { + if (!this.remoteRender) { + return; + } + + this.renderOnLeave = false; + + this.trigger('before:remote:render'); + + if (this.isRemoteRequestActive()) { + this._jqueryXhr.abort(); + } + + this._jqueryXhr = this.createRemoteRenderRequest(); + }, + + isRemoteRequestActive: function isRemoteRequestActive() { + return this._jqueryXhr && 4 !== this._jqueryXhr.readyState; + }, + + onRemoteGetHtml: function onRemoteGetHtml(data) { + this.setHtmlCache(data['render_' + this.id]); + this.trigger('remote:render'); + }, + + clone: function clone() { + var newModel = new this.constructor(elementorCommon.helpers.cloneObject(this.attributes)); + + newModel.set('id', elementor.helpers.getUniqueID()); + + newModel.setHtmlCache(this.getHtmlCache()); + + var elements = this.get('elements'); + + if (!_.isEmpty(elements)) { + newModel.set('elements', elements.clone()); + } + + return newModel; + }, + + toJSON: function toJSON(options) { + options = options || {}; + + // Call parent's toJSON method + var data = Backbone.Model.prototype.toJSON.call(this); + + _.each(data, function (attribute, key) { + if (attribute && attribute.toJSON) { + data[key] = attribute.toJSON(options); + } + }); + + if (options.copyHtmlCache) { + data.htmlCache = this.getHtmlCache(); + } else { + delete data.htmlCache; + } + + if (options.remove) { + options.remove.forEach(function (key) { + return delete data[key]; + }); + } + + return data; + }, + + onCloseEditor: function onCloseEditor() { + if (this.renderOnLeave) { + this.renderRemoteServer(); + } + }, + + onDestroy: function onDestroy() { + // Clean the memory for all use instances + var settings = this.get('settings'), + elements = this.get('elements'); + + if (undefined !== elements) { + _.each(_.clone(elements.models), function (model) { + model.destroy(); + }); + } + + settings.destroy(); + } + +}); + +ElementModel.prototype.sync = ElementModel.prototype.fetch = ElementModel.prototype.save = _.noop; + +module.exports = ElementModel; + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var ElementModel = __webpack_require__(33); + +var ElementsCollection = Backbone.Collection.extend({ + add: function add(models, options, isCorrectSet) { + if ((!options || !options.silent) && !isCorrectSet) { + throw 'Call Error: Adding model to element collection is allowed only by the dedicated addChildModel() method.'; + } + + return Backbone.Collection.prototype.add.call(this, models, options); + }, + + model: function model(attrs, options) { + var ModelClass = Backbone.Model; + + if (attrs.elType) { + ModelClass = elementor.hooks.applyFilters('element/model', ElementModel, attrs); + } + + return new ModelClass(attrs, options); + }, + + clone: function clone() { + var tempCollection = Backbone.Collection.prototype.clone.apply(this, arguments), + newCollection = new ElementsCollection(); + + tempCollection.forEach(function (model) { + newCollection.add(model.clone(), null, true); + }); + + return newCollection; + } +}); + +ElementsCollection.prototype.sync = ElementsCollection.prototype.fetch = ElementsCollection.prototype.save = _.noop; + +module.exports = ElementsCollection; + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = Marionette.ItemView.extend({ + template: '#tmpl-elementor-panel-global', + + id: 'elementor-panel-global', + + initialize: function initialize() { + elementor.getPanelView().getCurrentPageView().search.reset(); + }, + + onDestroy: function onDestroy() { + var panel = elementor.getPanelView(); + + if ('elements' === panel.getCurrentPageName()) { + setTimeout(function () { + var elementsPageView = panel.getCurrentPageView(); + + if (!elementsPageView.search.currentView) { + elementsPageView.showView('search'); + } + }); + } + } +}); + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = Marionette.ItemView.extend({ + template: '#tmpl-elementor-element-library-element', + + className: 'elementor-element-wrapper', + + ui: { + element: '.elementor-element' + }, + + onRender: function onRender() { + var _this = this; + + if (!elementor.userCan('design')) { + return; + } + + this.ui.element.html5Draggable({ + + onDragStart: function onDragStart() { + elementor.channels.panelElements.reply('element:selected', _this).trigger('element:drag:start'); + }, + + onDragEnd: function onDragEnd() { + elementor.channels.panelElements.trigger('element:drag:end'); + }, + + groups: ['elementor-element'] + }); + } +}); + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var PanelElementsElementModel; + +PanelElementsElementModel = Backbone.Model.extend({ + defaults: { + title: '', + categories: [], + keywords: [], + icon: '', + elType: 'widget', + widgetType: '' + } +}); + +module.exports = PanelElementsElementModel; + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var PanelElementsElementModel = __webpack_require__(37), + PanelElementsElementsCollection; + +PanelElementsElementsCollection = Backbone.Collection.extend({ + model: PanelElementsElementModel /*, + comparator: 'title'*/ +}); + +module.exports = PanelElementsElementsCollection; + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var PanelSchemeBaseView = __webpack_require__(40), + PanelSchemeColorsView; + +PanelSchemeColorsView = PanelSchemeBaseView.extend({ + ui: function ui() { + var ui = PanelSchemeBaseView.prototype.ui.apply(this, arguments); + + ui.systemSchemes = '.elementor-panel-scheme-color-system-scheme'; + + return ui; + }, + + events: function events() { + var events = PanelSchemeBaseView.prototype.events.apply(this, arguments); + + events['click @ui.systemSchemes'] = 'onSystemSchemeClick'; + + return events; + }, + + getType: function getType() { + return 'color'; + }, + + onSystemSchemeClick: function onSystemSchemeClick(event) { + var $schemeClicked = jQuery(event.currentTarget), + schemeName = $schemeClicked.data('schemeName'), + scheme = elementor.config.system_schemes[this.getType()][schemeName].items; + + this.changeChildrenUIValues(scheme); + } +}); + +module.exports = PanelSchemeColorsView; + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var childViewTypes = { + color: __webpack_require__(153), + typography: __webpack_require__(154) +}, + PanelSchemeBaseView; + +PanelSchemeBaseView = Marionette.CompositeView.extend({ + id: function id() { + return 'elementor-panel-scheme-' + this.getType(); + }, + + className: function className() { + return 'elementor-panel-scheme elementor-panel-scheme-' + this.getUIType(); + }, + + childViewContainer: '.elementor-panel-scheme-items', + + getTemplate: function getTemplate() { + return Marionette.TemplateCache.get('#tmpl-elementor-panel-schemes-' + this.getType()); + }, + + getChildView: function getChildView() { + return childViewTypes[this.getUIType()]; + }, + + getUIType: function getUIType() { + return this.getType(); + }, + + ui: function ui() { + return { + saveButton: '.elementor-panel-scheme-save .elementor-button', + discardButton: '.elementor-panel-scheme-discard .elementor-button', + resetButton: '.elementor-panel-scheme-reset .elementor-button' + }; + }, + + events: function events() { + return { + 'click @ui.saveButton': 'saveScheme', + 'click @ui.discardButton': 'discardScheme', + 'click @ui.resetButton': 'setDefaultScheme' + }; + }, + + initialize: function initialize() { + this.model = new Backbone.Model(); + + this.resetScheme(); + }, + + getType: function getType() {}, + + getScheme: function getScheme() { + return elementor.schemes.getScheme(this.getType()); + }, + + changeChildrenUIValues: function changeChildrenUIValues(schemeItems) { + var self = this; + + _.each(schemeItems, function (value, key) { + var model = self.collection.findWhere({ key: key }), + childView = self.children.findByModelCid(model.cid); + + childView.changeUIValue(value); + }); + }, + + discardScheme: function discardScheme() { + elementor.schemes.resetSchemes(this.getType()); + + this.onSchemeChange(); + + this.ui.saveButton.prop('disabled', true); + + this._renderChildren(); + }, + + setSchemeValue: function setSchemeValue(key, value) { + elementor.schemes.setSchemeValue(this.getType(), key, value); + + this.onSchemeChange(); + }, + + saveScheme: function saveScheme() { + elementor.schemes.saveScheme(this.getType()); + + this.ui.saveButton.prop('disabled', true); + + this.resetScheme(); + + this._renderChildren(); + }, + + setDefaultScheme: function setDefaultScheme() { + var defaultScheme = elementor.config.default_schemes[this.getType()].items; + + this.changeChildrenUIValues(defaultScheme); + }, + + resetItems: function resetItems() { + this.model.set('items', this.getScheme().items); + }, + + resetCollection: function resetCollection() { + var self = this, + items = self.model.get('items'); + + self.collection = new Backbone.Collection(); + + _.each(items, function (item, key) { + item.type = self.getType(); + item.key = key; + + self.collection.add(item); + }); + }, + + resetScheme: function resetScheme() { + this.resetItems(); + this.resetCollection(); + }, + + onSchemeChange: function onSchemeChange() { + elementor.schemes.printSchemesStyle(); + }, + + onChildviewValueChange: function onChildviewValueChange(childView, newValue) { + this.ui.saveButton.removeProp('disabled'); + + this.setSchemeValue(childView.model.get('key'), newValue); + } +}); + +module.exports = PanelSchemeBaseView; + +/***/ }), +/* 41 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var PanelSchemeItemView; + +PanelSchemeItemView = Marionette.ItemView.extend({ + getTemplate: function getTemplate() { + return Marionette.TemplateCache.get('#tmpl-elementor-panel-scheme-' + this.getUIType() + '-item'); + }, + + className: function className() { + return 'elementor-panel-scheme-item'; + } +}); + +module.exports = PanelSchemeItemView; + +/***/ }), +/* 42 */, +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(44); +__webpack_require__(45); +module.exports = __webpack_require__(46); + + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* + * jQuery Serialize Object v1.0.1 + */ +(function ($) { + $.fn.elementorSerializeObject = function () { + var serializedArray = this.serializeArray(), + data = {}; + + var parseObject = function parseObject(dataContainer, key, value) { + var isArrayKey = /^[^\[\]]+\[]/.test(key), + isObjectKey = /^[^\[\]]+\[[^\[\]]+]/.test(key), + keyName = key.replace(/\[.*/, ''); + + if (isArrayKey) { + if (!dataContainer[keyName]) { + dataContainer[keyName] = []; + } + } else { + if (!isObjectKey) { + if (dataContainer.push) { + dataContainer.push(value); + } else { + dataContainer[keyName] = value; + } + + return; + } + + if (!dataContainer[keyName]) { + dataContainer[keyName] = {}; + } + } + + var nextKeys = key.match(/\[[^\[\]]*]/g); + + nextKeys[0] = nextKeys[0].replace(/\[|]/g, ''); + + return parseObject(dataContainer[keyName], nextKeys.join(''), value); + }; + + $.each(serializedArray, function () { + parseObject(data, this.name, this.value); + }); + return data; + }; +})(jQuery); + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * HTML5 - Drag and Drop + */ +(function ($) { + var hasFullDataTransferSupport = function hasFullDataTransferSupport(event) { + try { + event.originalEvent.dataTransfer.setData('test', 'test'); + + event.originalEvent.dataTransfer.clearData('test'); + + return true; + } catch (e) { + return false; + } + }; + + var Draggable = function Draggable(userSettings) { + var self = this, + settings = {}, + elementsCache = {}, + defaultSettings = { + element: '', + groups: null, + onDragStart: null, + onDragEnd: null + }; + + var initSettings = function initSettings() { + $.extend(true, settings, defaultSettings, userSettings); + }; + + var initElementsCache = function initElementsCache() { + elementsCache.$element = $(settings.element); + }; + + var buildElements = function buildElements() { + elementsCache.$element.attr('draggable', true); + }; + + var onDragEnd = function onDragEnd(event) { + if ($.isFunction(settings.onDragEnd)) { + settings.onDragEnd.call(elementsCache.$element, event, self); + } + }; + + var onDragStart = function onDragStart(event) { + var groups = settings.groups || [], + dataContainer = { + groups: groups + }; + + if (hasFullDataTransferSupport(event)) { + event.originalEvent.dataTransfer.setData(JSON.stringify(dataContainer), true); + } + + if ($.isFunction(settings.onDragStart)) { + settings.onDragStart.call(elementsCache.$element, event, self); + } + }; + + var attachEvents = function attachEvents() { + elementsCache.$element.on('dragstart', onDragStart).on('dragend', onDragEnd); + }; + + var init = function init() { + initSettings(); + + initElementsCache(); + + buildElements(); + + attachEvents(); + }; + + this.destroy = function () { + elementsCache.$element.off('dragstart', onDragStart); + + elementsCache.$element.removeAttr('draggable'); + }; + + init(); + }; + + var Droppable = function Droppable(userSettings) { + var self = this, + settings = {}, + elementsCache = {}, + currentElement, + currentSide, + defaultSettings = { + element: '', + items: '>', + horizontalSensitivity: '10%', + axis: ['vertical', 'horizontal'], + placeholder: true, + currentElementClass: 'html5dnd-current-element', + placeholderClass: 'html5dnd-placeholder', + hasDraggingOnChildClass: 'html5dnd-has-dragging-on-child', + groups: null, + isDroppingAllowed: null, + onDragEnter: null, + onDragging: null, + onDropping: null, + onDragLeave: null + }; + + var initSettings = function initSettings() { + $.extend(settings, defaultSettings, userSettings); + }; + + var initElementsCache = function initElementsCache() { + elementsCache.$element = $(settings.element); + + elementsCache.$placeholder = $('
    ', { class: settings.placeholderClass }); + }; + + var hasHorizontalDetection = function hasHorizontalDetection() { + return -1 !== settings.axis.indexOf('horizontal'); + }; + + var hasVerticalDetection = function hasVerticalDetection() { + return -1 !== settings.axis.indexOf('vertical'); + }; + + var checkHorizontal = function checkHorizontal(offsetX, elementWidth) { + var isPercentValue, sensitivity; + + if (!hasHorizontalDetection()) { + return false; + } + + if (!hasVerticalDetection()) { + return offsetX > elementWidth / 2 ? 'right' : 'left'; + } + + sensitivity = settings.horizontalSensitivity.match(/\d+/); + + if (!sensitivity) { + return false; + } + + sensitivity = sensitivity[0]; + + isPercentValue = /%$/.test(settings.horizontalSensitivity); + + if (isPercentValue) { + sensitivity = elementWidth / sensitivity; + } + + if (offsetX > elementWidth - sensitivity) { + return 'right'; + } else if (offsetX < sensitivity) { + return 'left'; + } + + return false; + }; + + var setSide = function setSide(event) { + var $element = $(currentElement), + elementHeight = $element.outerHeight() - elementsCache.$placeholder.outerHeight(), + elementWidth = $element.outerWidth(); + + event = event.originalEvent; + + currentSide = checkHorizontal(event.offsetX, elementWidth); + + if (currentSide) { + return; + } + + if (!hasVerticalDetection()) { + currentSide = null; + + return; + } + + var elementPosition = currentElement.getBoundingClientRect(); + + currentSide = event.clientY > elementPosition.top + elementHeight / 2 ? 'bottom' : 'top'; + }; + + var insertPlaceholder = function insertPlaceholder() { + if (!settings.placeholder) { + return; + } + + var insertMethod = 'top' === currentSide ? 'prependTo' : 'appendTo'; + + elementsCache.$placeholder[insertMethod](currentElement); + }; + + var isDroppingAllowed = function isDroppingAllowed(event) { + var dataTransferTypes, draggableGroups, isGroupMatch, droppingAllowed; + + if (settings.groups && hasFullDataTransferSupport(event)) { + dataTransferTypes = event.originalEvent.dataTransfer.types; + + isGroupMatch = false; + + dataTransferTypes = Array.prototype.slice.apply(dataTransferTypes); // Convert to array, since Firefox hold it as DOMStringList + + dataTransferTypes.forEach(function (type) { + try { + draggableGroups = JSON.parse(type); + + if (!draggableGroups.groups.slice) { + return; + } + + settings.groups.forEach(function (groupName) { + if (-1 !== draggableGroups.groups.indexOf(groupName)) { + isGroupMatch = true; + + return false; // stops the forEach from extra loops + } + }); + } catch (e) {} + }); + + if (!isGroupMatch) { + return false; + } + } + + if ($.isFunction(settings.isDroppingAllowed)) { + droppingAllowed = settings.isDroppingAllowed.call(currentElement, currentSide, event, self); + + if (!droppingAllowed) { + return false; + } + } + + return true; + }; + + var onDragEnter = function onDragEnter(event) { + event.stopPropagation(); + + if (currentElement) { + return; + } + + currentElement = this; + + elementsCache.$element.parents().each(function () { + var droppableInstance = $(this).data('html5Droppable'); + + if (!droppableInstance) { + return; + } + + droppableInstance.doDragLeave(); + }); + + setSide(event); + + if (!isDroppingAllowed(event)) { + return; + } + + insertPlaceholder(); + + elementsCache.$element.addClass(settings.hasDraggingOnChildClass); + + $(currentElement).addClass(settings.currentElementClass); + + if ($.isFunction(settings.onDragEnter)) { + settings.onDragEnter.call(currentElement, currentSide, event, self); + } + }; + + var onDragOver = function onDragOver(event) { + event.stopPropagation(); + + if (!currentElement) { + onDragEnter.call(this, event); + } + + var oldSide = currentSide; + + setSide(event); + + if (!isDroppingAllowed(event)) { + return; + } + + event.preventDefault(); + + if (oldSide !== currentSide) { + insertPlaceholder(); + } + + if ($.isFunction(settings.onDragging)) { + settings.onDragging.call(this, currentSide, event, self); + } + }; + + var onDragLeave = function onDragLeave(event) { + var elementPosition = this.getBoundingClientRect(), + oe = event.originalEvent; + // Old jQuery compatibiliy fix + if ('dragleave' === event.type && oe.clientX >= elementPosition.left && oe.clientX < elementPosition.right && oe.clientY >= elementPosition.top && oe.clientY < elementPosition.bottom) { + return; + } + + $(currentElement).removeClass(settings.currentElementClass); + + self.doDragLeave(); + }; + + var onDrop = function onDrop(event) { + setSide(event); + + if (!isDroppingAllowed(event)) { + return; + } + + event.preventDefault(); + + if ($.isFunction(settings.onDropping)) { + settings.onDropping.call(this, currentSide, event, self); + } + }; + + var attachEvents = function attachEvents() { + elementsCache.$element.on('dragenter', settings.items, onDragEnter).on('dragover', settings.items, onDragOver).on('drop', settings.items, onDrop).on('dragleave drop', settings.items, onDragLeave); + }; + + var init = function init() { + initSettings(); + + initElementsCache(); + + attachEvents(); + }; + + this.doDragLeave = function () { + if (settings.placeholder) { + elementsCache.$placeholder.remove(); + } + + elementsCache.$element.removeClass(settings.hasDraggingOnChildClass); + + if ($.isFunction(settings.onDragLeave)) { + settings.onDragLeave.call(currentElement, event, self); + } + + currentElement = currentSide = null; + }; + + this.destroy = function () { + elementsCache.$element.off('dragenter', settings.items, onDragEnter).off('dragover', settings.items, onDragOver).off('drop', settings.items, onDrop).off('dragleave drop', settings.items, onDragLeave); + }; + + init(); + }; + + var plugins = { + html5Draggable: Draggable, + html5Droppable: Droppable + }; + + $.each(plugins, function (pluginName, Plugin) { + $.fn[pluginName] = function (options) { + options = options || {}; + + this.each(function () { + var instance = $.data(this, pluginName), + hasInstance = instance instanceof Plugin; + + if (hasInstance) { + if ('destroy' === options) { + instance.destroy(); + + $.removeData(this, pluginName); + } + + return; + } + + options.element = this; + + $.data(this, pluginName, new Plugin(options)); + }); + + return this; + }; + }); +})(jQuery); + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _heartbeat = __webpack_require__(47); + +var _heartbeat2 = _interopRequireDefault(_heartbeat); + +var _navigator = __webpack_require__(48); + +var _navigator2 = _interopRequireDefault(_navigator); + +var _hotkeys = __webpack_require__(53); + +var _hotkeys2 = _interopRequireDefault(_hotkeys); + +var _environment = __webpack_require__(1); + +var _environment2 = _interopRequireDefault(_environment); + +var _dateTime = __webpack_require__(56); + +var _dateTime2 = _interopRequireDefault(_dateTime); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var App = Marionette.Application.extend({ + loaded: false, + + previewLoadedOnce: false, + + helpers: __webpack_require__(61), + imagesManager: __webpack_require__(62), + // debug: __webpack_require__(63), + schemes: __webpack_require__(64), + presetsFactory: __webpack_require__(65), + templates: __webpack_require__(66), + // TODO: BC Since 2.3.0 + ajax: elementorCommon.ajax, + conditions: __webpack_require__(81), + history: __webpack_require__(82), + + channels: { + editor: Backbone.Radio.channel('ELEMENTOR:editor'), + data: Backbone.Radio.channel('ELEMENTOR:data'), + panelElements: Backbone.Radio.channel('ELEMENTOR:panelElements'), + dataEditMode: Backbone.Radio.channel('ELEMENTOR:editmode'), + deviceMode: Backbone.Radio.channel('ELEMENTOR:deviceMode'), + templates: Backbone.Radio.channel('ELEMENTOR:templates') + }, + + /** + * Exporting modules that can be used externally + * @TODO: All of the following entries should move to `elementorModules.editor` + */ + modules: { + // TODO: Deprecated alias since 2.3.0 + get Module() { + elementorCommon.helpers.deprecatedMethod('elementor.modules.Module', '2.3.0', 'elementorModules.Module'); + + return elementorModules.Module; + }, + components: { + templateLibrary: { + views: { + // TODO: Deprecated alias since 2.4.0 + get BaseModalLayout() { + elementorCommon.helpers.deprecatedMethod('elementor.modules.components.templateLibrary.views.BaseModalLayout', '2.4.0', 'elementorModules.common.views.modal.Layout'); + + return elementorModules.common.views.modal.Layout; + } + } + }, + saver: { + behaviors: { + FooterSaver: __webpack_require__(102) + } + } + }, + controls: { + Animation: __webpack_require__(4), + Base: __webpack_require__(3), + BaseData: __webpack_require__(0), + BaseMultiple: __webpack_require__(2), + Box_shadow: __webpack_require__(29), + Button: __webpack_require__(103), + Choose: __webpack_require__(30), + Code: __webpack_require__(104), + Color: __webpack_require__(105), + Date_time: _dateTime2.default, + Dimensions: __webpack_require__(106), + Font: __webpack_require__(107), + // Gallery: __webpack_require__(108), + Hidden: __webpack_require__(109), + Hover_animation: __webpack_require__(4), + Icon: __webpack_require__(110), + Image_dimensions: __webpack_require__(111), + Media: __webpack_require__(112), + Number: __webpack_require__(113), + Order: __webpack_require__(115), + Popover_toggle: __webpack_require__(116), + Repeater: __webpack_require__(117), + RepeaterRow: __webpack_require__(32), + Section: __webpack_require__(118), + Select: __webpack_require__(119), + Select2: __webpack_require__(4), + Select_category: __webpack_require__(4), + Select_manufacturer: __webpack_require__(4), + Select_supplier: __webpack_require__(4), + Slider: __webpack_require__(120), + Structure: __webpack_require__(121), + Switcher: __webpack_require__(122), + Tab: __webpack_require__(123), + Text_shadow: __webpack_require__(29), + Url: __webpack_require__(124), + // Wp_widget: __webpack_require__(125), + Wysiwyg: __webpack_require__(126) + }, + elements: { + models: { + // TODO: Deprecated alias since 2.4.0 + get BaseSettings() { + elementorCommon.helpers.deprecatedMethod('elementor.modules.elements.models.BaseSettings', '2.4.0', 'elementorModules.editor.elements.models.BaseSettings'); + + return elementorModules.editor.elements.models.BaseSettings; + }, + Element: __webpack_require__(33) + }, + views: { + Widget: __webpack_require__(128) + } + }, + layouts: { + panel: { + pages: { + elements: { + views: { + Global: __webpack_require__(35), + Elements: __webpack_require__(132) + } + }, + menu: { + Menu: __webpack_require__(133) + } + } + } + }, + views: { + // TODO: Deprecated alias since 2.4.0 + get ControlsStack() { + elementorCommon.helpers.deprecatedMethod('elementor.modules.views.ControlsStack', '2.4.0', 'elementorModules.editor.views.ControlsStack'); + + return elementorModules.editor.views.ControlsStack; + } + } + }, + + backgroundClickListeners: { + popover: { + element: '.elementor-controls-popover', + ignore: '.elementor-control-popover-toggle-toggle, .elementor-control-popover-toggle-toggle-label, .select2-container' + }, + tagsList: { + element: '.elementor-tags-list', + ignore: '.elementor-control-dynamic-switcher' + }, + panelFooterSubMenus: { + element: '.elementor-panel-footer-tool', + ignore: '.elementor-panel-footer-tool.elementor-toggle-state, #elementor-panel-saver-button-publish-label', + callback: function callback($elementsToHide) { + $elementsToHide.removeClass('elementor-open'); + } + } + }, + + userCan: function userCan(capability) { + return -1 === this.config.user.restrictions.indexOf(capability); + }, + + _defaultDeviceMode: 'desktop', + + addControlView: function addControlView(controlID, ControlView) { + this.modules.controls[elementorCommon.helpers.firstLetterUppercase(controlID)] = ControlView; + }, + + checkEnvCompatibility: function checkEnvCompatibility() { + return _environment2.default.firefox || _environment2.default.webkit; + }, + + getElementData: function getElementData(model) { + var elType = model.get('elType'); + + if ('widget' === elType) { + var widgetType = model.get('widgetType'); + + if (!this.config.widgets[widgetType]) { + return false; + } + + if (!this.config.widgets[widgetType].commonMerged) { + jQuery.extend(this.config.widgets[widgetType].controls, this.config.widgets.common.controls); + + this.config.widgets[widgetType].commonMerged = true; + } + + return this.config.widgets[widgetType]; + } + + if (!this.config.elements[elType]) { + return false; + } + + var elementConfig = elementorCommon.helpers.cloneObject(this.config.elements[elType]); + + if ('section' === elType && model.get('isInner')) { + elementConfig.title = this.translate('inner_section'); + } + + return elementConfig; + }, + + getElementControls: function getElementControls(modelElement) { + var self = this, + elementData = self.getElementData(modelElement); + + if (!elementData) { + return false; + } + + var isInner = modelElement.get('isInner'), + controls = {}; + + _.each(elementData.controls, function (controlData, controlKey) { + if (isInner && controlData.hide_in_inner || !isInner && controlData.hide_in_top) { + return; + } + + controls[controlKey] = controlData; + }); + + return controls; + }, + + mergeControlsSettings: function mergeControlsSettings(controls) { + var _this = this; + + _.each(controls, function (controlData, controlKey) { + controls[controlKey] = jQuery.extend(true, {}, _this.config.controls[controlData.type], controlData); + }); + + return controls; + }, + + getControlView: function getControlView(controlID) { + var capitalizedControlName = elementorCommon.helpers.firstLetterUppercase(controlID), + View = this.modules.controls[capitalizedControlName]; + + if (!View) { + var controlData = this.config.controls[controlID], + isUIControl = -1 !== controlData.features.indexOf('ui'); + + View = this.modules.controls[isUIControl ? 'Base' : 'BaseData']; + } + + return View; + }, + + getPanelView: function getPanelView() { + return this.panel.currentView; + }, + + getPreviewView: function getPreviewView() { + return this.sections.currentView; + }, + + initComponents: function initComponents() { + var EventManager = __webpack_require__(13), + DynamicTags = __webpack_require__(136), + Settings = __webpack_require__(138), + Saver = __webpack_require__(142), + Notifications = __webpack_require__(143), + AssetsManager = __webpack_require__(15); + + this.hooks = new EventManager(); + + this.saver = new Saver(); + + this.settings = new Settings(); + + this.dynamicTags = new DynamicTags(); + + this.templates.init(); + + this.initDialogsManager(); + + this.notifications = new Notifications(); + + this.initHotKeys(); + + this.hotkeysScreen = new _hotkeys2.default(); + + this.fontsManager = new AssetsManager(); + }, + + // TODO: BC method since 2.3.0 + initDialogsManager: function initDialogsManager() { + this.dialogsManager = elementorCommon.dialogsManager; + }, + + initElements: function initElements() { + var ElementCollection = __webpack_require__(34), + config = this.config.data; + + // If it's an reload, use the not-saved data + if (this.elements) { + config = this.elements.toJSON(); + } + + this.elements = new ElementCollection(config); + + this.elementsModel = new Backbone.Model({ + elements: this.elements + }); + }, + + initPreview: function initPreview() { + var $ = jQuery; + + this.$previewWrapper = $('#elementor-preview'); + + this.$previewResponsiveWrapper = $('#elementor-preview-responsive-wrapper'); + + var previewIframeId = 'elementor-preview-iframe'; + + // Make sure the iFrame does not exist. + if (!this.$preview) { + this.$preview = $('